Ansible で http_proxy
問題
Proxy 環境下で ansible を利用しようとするとたまにはまることがある。 具体的には以下のようなタスクで pip が失敗したり。
- hosts: all
sudo: yes
tasks:
- pip: name=python-docker state=installed
ちょっとぐぐるとオフィシャルな解決方法が出てくる。 それによるとタスクごとに proxy の設定をしろと書いてある。
- hosts: all
remote_user: root
# here we make a variable named "proxy_env" that is a dictionary
vars:
proxy_env:
http_proxy: http://proxy.example.com:8080
tasks:
- pip: name=python-docker state=installed
environment: proxy_env
が、一個一個タスクに environment
キーワードを使って環境変数を設定していくのはすごくだるい。
解決方法
playbook
の最初の方で対象のホストの /etc/environment
ファイルに、
proxy 関連の環境変数を一括で設定しまうことで解決した。
- hosts: all
vars:
proxy:
http_proxy: http://proxy.example.com:8080
tasks:
- name: Add no_proxy to /etc/environment
sudo: yes
lineinfile:
create: yes
dest: '/etc/environment'
state: present
line: 'no_proxy="{{ proxy.no_proxy }}"'
when: proxy.no_proxy | default(False)
register: no_proxy_result
- name: Add http_proxy to /etc/environment
sudo: yes
lineinfile:
create: yes
dest: '/etc/environment'
state: present
line: 'http_proxy="{{ proxy.http_proxy }}"'
when: proxy.http_proxy | default(False)
register: http_proxy_result
- name: Add https_proxy to /etc/environment
sudo: yes
lineinfile:
create: yes
dest: '/etc/environment'
state: present
line: 'https_proxy="{{ proxy.https_proxy }}"'
when: proxy.https_proxy | default(False)
register: https_proxy_result
- name: Restart sshd
service: name=ssh state=restarted
sudo: yes
when: >
no_proxy_result.changed == true or
http_proxy_result.changed == true or
https_proxy_result.changed == true
ただ、設定した後に対象ホストの sshd
を再起動しないと、
環境変数が反映されないことがあったので注意。