我负责配置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获取价值。知道我们该怎么做吗?
答案 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