1

剧本可以从变量中加载库存列表吗?所以我可以根据选择的环境轻松自定义运行?

  tasks:
  - name: include environment config variables
    include_vars:
      file: "{{ item }}"
    with_items:
      - "../../environments/default.yml"
      - "../../environments/{{ env_name }}.yml"

- name: set inventory
  set_fact:
     inventory.docker_host = " {{ env_docker_host }}"
4

2 回答 2

1

是的。使用add_host模块:https ://docs.ansible.com/ansible/latest/modules/add_host_module.html

于 2020-03-05T15:34:40.900 回答
1

因为我在 ansible 2.3 中,所以我无法使用该add_host模块(请参阅 Jack 的回答和add_host文档),这将是一个更好的解决方案。因此,我将使用不同的技巧来扩充现有的 ansible 库存文件,重新加载并使用它。

主机.inv

[remotehosts]

主要的.yml

- hosts: localhost
  pre_tasks:
    - name: include environment config variables
      include_vars:
        file: "{{ item }}"
      with_items:
        - "../environments/default.yml"
        - "../environments/{{ env_name }}.yml"
    - name: inventory facts
      run_once: true
      set_fact:
        my_host: "{{ env_host_name }}"

    - name: update inventory for env
      local_action: lineinfile
        path=hosts.inv
        regexp={{ my_host }}
        insertafter="[remotehosts]" line={{ my_host }}

    - meta: refresh_inventory

- hosts: remotehosts
...

预任务使用所有变量替换等处理环境 yml 并hosts.inv在重新加载之前使用它来填充refresh_inventory

下面定义的任何任务- hosts: remotehosts都将在远程主机或主机上执行。

于 2020-03-05T20:23:53.823 回答