如何将本地shell变量注入到ansible中

时间:2019-01-11 05:25:07

标签: ansible

这是我的意图:

我在Virtualbox中有一个具有网桥网络的VM linux,说它的ip是192.168.1.11,我在托管的mac上运行了一个http代理,说它是192.168.1.4:1087,因为主机Mac,192.168.1.4是dhcp地址,并且可能已更改。

我在Mac上创建了一个update_http_proxy.sh,并通过ansible将其运行到VM。

#!/bin/bash

cat /etc/profile | egrep -v 'http_proxy|https_proxy|no_proxy' > /tmp/profile_$$

cat >> /tmp/profile_$$ <<EOF

export http_proxy={{ http_proxy }} # this is not replaced with the mac variables
export https_proxy=http://192.168.1.4:1087 # this works but I have to edit the shell when the mac ip changed.
export no_proxy="127.0.0.1,localhost,192.0.0.0/8"
EOF
cp /tmp/profile_$$ /etc/profile

此文件将被上载到VM并执行。但是在上传到远程VM之前,如何在Mac上用env varialbe $ http_proxy替换`{{http_proxy}}?

1 个答案:

答案 0 :(得分:1)

  

此文件将被上载到VM并执行。但是在上传到远程VM之前,如何在Mac上用env varialbe $ http_proxy替换`{{http_proxy}}?

您要寻找的是--extra-vars,或将此类信息添加到动态清单脚本中

$ ansible-playbook --extra-vars "http_proxy=$http_proxy" ...

您还可以委派给您的本地主机以获取其ip地址,以避免进行任何类型的启动特殊性:

- name: get the control host info
  setup:
  delegate_to: localhost
- name: get the control host info
  set_fact:
    host_ip: '{{ ansible_default_ipv4.address }}'
- name: re-gather facts of target host
  setup:
- set_fact:
    http_proxy: http://{{ host_ip }}:1087

您可以选择使用gather_facts: no运行该剧本,以避免进行初次事实搜集,因为由于setup:的古怪总是会覆盖{{ 1}},而不是hostvars[inventory_hostname],因为人们可能期望 hostvars["localhost"]要做