Ansible库存:替换问题

时间:2018-05-01 07:04:54

标签: ansible

我有这样的广告资源:

[all:vars]
env_cidr_prefix='172.25'
antother_var="foo"

[VPN_SERVER]
vpn-server ansible_host="{{ env_cidr_prefix}}.0.1" 

在ansible playbook期间,库存仅保留私人IP地址。 我不想用公共IP

替换"ansible_host="的内容

剧本示例:

- name: grab the vpn public_ip
  set_fact: PUBLIC_IP="{{ instance_eip.public_ip }}"
  when: inventory_hostname |search("vpn-server")

- name: update inventory with the vpn public ip
  replace:
     path: "{{ inventory_file }}"
     regexp: "{{ ansible_host }}"
     replace: "{{ PUBLIC_IP }}"
  when: inventory_hostname |search("vpn-server")

如果

ansible_host="172.25.0.1"

替换模块将正常工作。

但是失败了

ansible_host="{{ env_cidr_prefix}}.0.1" 

调试输出:

ok: [vpn-server] => {
    "changed": false,
    "invocation": {
        "module_args": {
            "after": null,
            "attributes": null,
            "backup": false,
            "before": null,
            "content": null,
            "delimiter": null,
            "directory_mode": null,
            "encoding": "utf-8",
            "follow": false,
            "force": null,
            "group": null,
            "mode": null,
            "owner": null,
            "path": "/home/toluna/ansible/openvpn/env.properties",
            "regexp": "172.25.0.11",
            "remote_src": null,
            "replace": "1.1.1.1",
            "selevel": null,
            "serole": null,
            "setype": null,
            "seuser": null,
            "src": null,
            "unsafe_writes": null,
            "validate": null
        }
    },
    "msg": ""
}

注意,我不能使用add_host模块,因为剧本在不同的阶段运行

有更好的方法吗? 感谢

1 个答案:

答案 0 :(得分:0)

好的,经过测试,我想我明白你想要实现的目标。

这里有几个部分:

库存文件是这样的:

vpn-server ansible_host="{{ env_cidr_prefix}}.0.1" 

您正在尝试替换文件中不存在的172.25.0.1字面值。您有"{{ env_cidr_prefix}}.0.1"而不是172.25.0.1

选项:

  1. 如果您想要替换这种方式,可以在角色中使用Jinja2文件,以与尝试相同的方式替换变量和库存文件。

  2. 覆盖Jenkins的/ etc / hosts文件(我真的不太喜欢)并使用主机名。

  3. 在剧本中使用您的主机变量,例如:

  4. 主持Playbooks:

    - name : Test
      hosts: "{{ variable_vpn_ip | default('vpn-server') }}"
    

    并将其称为从您将更改的变量中读取或:

    ansible-playbook play.yml -e "variable_vpn_ip=172.25.0.1"