环境
- 管理节点:Ubuntu 22.04
- 控制节点:CentOS 8
- Ansible:2.15.6
module_defaults
如果某个module被多次调用,且每次调用时的参数也一样,则可以通过 module_defaults
为该module指定缺省参数,以简化操作。
---
- hosts: all
module_defaults:
debug:
msg: "Default message"
tasks:
- name: task1
debug:
- name: task2
debug:
运行结果如下:
TASK [task1] ***************************************************************************************
ok: [192.168.1.55] => {
"msg": "Default message"
}
TASK [task2] ***************************************************************************************
ok: [192.168.1.55] => {
"msg": "Default message"
}
注:对于 debug
,即使没有 msg
,也不会报错,默认会输出 Hello world!
。
module_defaults
可用在play、block、task级别。
当然,即使已有默认参数,也可以显式指定参数:
- name: task3
debug:
msg: "task3 message"
运行结果如下:
TASK [task3] ***************************************************************************************
ok: [192.168.1.55] => {
"msg": "task3 message"
}
如果不想使用缺省参数,可以通过 <module>: {}
显式指明不使用缺省参数:
- name: task4
debug:
module_defaults:
debug: {}
运行结果如下:
TASK [task4] ***************************************************************************************
ok: [192.168.1.55] => {
"msg": "Hello world!"
}
注意:设置在play级别(以及使用了 include_role
或 import_role
的block/task级别)的module default会作用到role里面。
另:在 module_defaults
中可以使用变量:
---
- hosts: all
vars:
var1: "Tom"
module_defaults:
debug:
msg: "Hello {{ var1 }}"
tasks:
- name: task1
debug:
- name: task2
set_fact:
var1: "Jerry"
- name: task3
debug:
运行结果如下:
TASK [task1] ***************************************************************************************
ok: [192.168.1.55] => {
"msg": "Hello Tom"
}
TASK [task2] ***************************************************************************************
ok: [192.168.1.55]
TASK [task3] ***************************************************************************************
ok: [192.168.1.55] => {
"msg": "Hello Jerry"
}
参考
https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_module_defaults.html