在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}}"