将变量从--extra-vars传递到角色

时间:2019-12-04 12:52:42

标签: azure ansible

我负责配置Azure vm,我的主要目标是通过--extra var将vm映像名称作为参数传递

我的剧本的定义如下:

- hosts: localhosts
  gather_facts:yes
  roles: 
    -azurevm

角色的定义如下(在azurevm.yml中)

  - name: create a vm
    azure_rm_virtualmachine:
      name: "{{vm_name}}"

默认值为

vm_name : imagevm

在这种情况下,我想覆盖vm_name以从cli获取价值。知道我们该怎么做吗?

1 个答案:

答案 0 :(得分:0)

您只需要将该var用作额外的var,它将覆盖角色中的默认var。

请注意,根据ansible variable precedence角色,默认var是仅次于命令行选项的第二大可覆盖var(不要与总是赢的extra_var混淆)。因此,该示例是按要求使用extra_vars的,但这也可以覆盖任何地方的var(机器/组库存var,playbook ...)

以下是quickNdirty POC来向您显示方法:

文件结构

.
├── playbook.yml
└── roles
    └── test
        ├── defaults
        │   └── main.yml
        └── tasks
            └── main.yml

roles/test/tasks/main.yml

---
- name: Show value of vm_name
  debug:
    var: vm_name

roles/test/defaults/main.yml

---
vm_name: imagevm

playbook.yml

---
- name: demonstrate overriding role default
  hosts: localhost
  gather_facts: false

  roles:
    - role: test

结果

默认值

$ ansible-playbook playbook.yml 

PLAY [demonstrate overriding role default] ******************************************************************************************************************************************************************************************************************************

TASK [test : Show value of vm_name] *************************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "vm_name": "imagevm"
}

PLAY RECAP **************************************************************************************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

使用extra_vars覆盖值

$ ansible-playbook playbook.yml -e vm_name=overrideName

PLAY [demonstrate overriding role default] ******************************************************************************************************************************************************************************************************************************

TASK [test : Show value of vm_name] *************************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "vm_name": "overrideName"
}

PLAY RECAP **************************************************************************************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0