首页 文章

Ansible:使用变量来定义playbook主机

提问于
浏览
7

我安装了以下版本: ansible 2.3.0 (devel 2131eaba0c)

我想将主变量指定为外部变量,然后在_1590969中使用它,类似于:

hosts: "{{integration}}"

在我的 group_vars/all 文件中,我有以下定义的变量:

integration: "int60"

host file 看起来像这样:

[int60] 
hostA

[int61]
hostB

不幸的是,这不起作用 . 我还尝试以下列方式定义 host var

[integration]
127.0.0.1 ansible_host="{{ integration_env }}"

并在我的 group_vars/all 文件中指定了integration_env . 在这种情况下,它似乎在本地运行任务而不是在所需的环境中运行 .

可以这样做吗?我会接受全新的做法 . 主要目标是在var文件中定义主变量 .

1 回答

  • 8

    如果您将 integration 变量作为额外变量传递,这将起作用:

    ansible-playbook -e integration=int60 myplaybook.yml
    

    播放“ Headers ”中使用的任何变量都应该在Ansible分析剧本之前定义 .

    在您的示例中,您将 integration 定义为主机事实 . 事实只在任务级别定义,而不是在游戏级别 .

    Update: 并且您可以使用其他方式传递变量,而不仅仅是额外的变量 . 例如:

    - hosts: "{{ lookup('env','DYN_HOSTS') }}"
    

    也会工作 .

相关问题