在Windows环境下,使用代理来执行Ansible

首先

Ansible是一个非常实用的配置管理工具。

然而,当我打算在公司内部使用Ansible时,我会因为各种限制而感到困扰。

    • Windows に Ansible がインストールできない

 

    プロキシ設定が面倒

因此,我创建了一个存储库,用于在Windows和代理环境下运行Ansible的模板。

如果复制或者分叉这个文件,那么在公司内部就能轻松使用Ansible。

请阅读存储库的 README 来查看执行方法。

Docker的配置

由于无法直接在Windows上安装Ansible,所以我们决定在Docker上进行安装。

由于使用Docker容器,您可以轻松定义除了安装Ansible之外的代理设置。

在本文中,我们将介绍有关代理设置的内容,不会涉及Docker的介绍和安装方法,这些内容可以在其他文章中找到。

建立时的代理设置

将代理作为参数接收,并将其放入yum的配置和环境变量中。

ARG HTTP_PROXY
ARG HTTPS_PROXY

RUN echo proxy=$HTTP_PROXY >> /etc/yum.conf

ENV http_proxy $HTTP_PROXY
ENV https_proxy $HTTPS_PROXY

在构建时指定以下参数。

docker-compose build `
  --build-arg HTTP_PROXY=$env:HTTP_PROXY `
  --build-arg HTTPS_PROXY=$env:HTTPS_PROXY

这样您本地设置的代理将被直接继承。

SSH配置

将 Ansible 的连接信息配置在 ssh-config 中,并将其复制到容器内。

Host target-server
  HostName x.x.x.x
  User xxx
COPY ssh-config /root/.ssh/config

容器启动时的配置

在docker-compose.yml文件中指定从环境变量传递代理设置

version: "2.3"

services:
  ansible:
    build: .
    hostname: ansible
    container_name: ansible
    environment:
      - HTTP_PROXY
      - HTTPS_PROXY
    volumes:
      - ./playbooks:/playbooks
    tty: true

Ansible的配置

在 playbook 的參數中,從環境變數中傳遞代理設定。

- name: docker
  hosts: target-servers
  become: yes
  vars:
    http_proxy: "{{ lookup('env', 'HTTP_PROXY') }}"
  roles:
    - common

通过指定参数的值,可以继承代理。

- name: Add proxy setting to yum config
  lineinfile:
    dest: /etc/yum.conf
    line: "proxy={{http_proxy}}"
bannerAds