【问题标题】:Can ansible variables be used to declare hosts in a playbook?可以使用 ansible 变量在剧本中声明主机吗?
【发布时间】:2018-07-25 13:10:21
【问题描述】:

我有一本格式如下的剧本:

---
- hosts: myIP
  tasks:
  - name: Install a yum package in Ansible example
    yum:
      name: ThePackageIWantToInstall
      state: present

其中myIPThePackageIWantToInstall 是变量。

当作业模板运行时,我希望 额外变量 弹出窗口中的用户能够使用:

myIP = 192.168.1.1
ThePackageIWantToInstall = nano

由于文档没有提供通过作业模板提供变量的示例,这可能吗?

【问题讨论】:

    标签: ansible yaml ansible-template ansible-tower


    【解决方案1】:

    是的。

    - name: Do The Thing
      hosts: "{{ foo }}"
      roles:
       - "{{ role }}"
    

    需要小胡子和引号。


    从弹出窗口运行

    (我不使用这个,但建议作为编辑,谢谢...)

    foo: 值

    【讨论】:

    • 对,然后当我在弹出的额外变量中分配它们时,它是不是 -foo: 192.188.1.1?
    • 我使用ansible-playbook -i Jenkins.sh site.yml --extra-vars='foo=each bar=test' 执行了测试(我使用动态主机脚本,但这与这里无关。)我不使用弹出窗口。请参阅文档并进行一些测试以获取正确的语法。
    【解决方案2】:

    我已经用 add_hosts 完成了类似的事情。这里我不是安装包,而是使用从命令行传递的名称创建文件。任意数量的主机(用逗号分隔可以从命令行传递)。

    # cat addhost2.yml
    - hosts: localhost
      gather_facts: no
      tasks:
        - add_host:
            name: "{{ item }}"
            groups: hosts_from_commandline
          with_items: "{{ new_hosts_passed.split(',') }}"
    
    
    - hosts: hosts_from_commandline
      tasks:
        - name: Ansible create file with name passed from commandline
          file:
            path: "/tmp/{{ filename_from_commandline }}"
            state: touch
    # ansible-playbook -i hosts addhost2.yml --extra-vars='new_hosts_passed=192.168.3.104,192.168.3.113 filename_from_commandline=lathamdkv'
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2018-09-21
      • 1970-01-01
      • 2017-12-22
      相关资源
      最近更新 更多