环境
- 管理节点:Ubuntu 22.04
- 控制节点:CentOS 8
- Ansible:2.15.6
module_defaults
如果某个module被多次调用,且每次调用时的参数也一样,则可以通过 module_defaults
为该module指定缺省参数,以简化操作。
---
- hosts: allmodule_defaults:debug:msg: "Default message"tasks:- name: task1debug:- name: task2debug:
运行结果如下:
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: task3debug:msg: "task3 message"
运行结果如下:
TASK [task3] ***************************************************************************************
ok: [192.168.1.55] => {"msg": "task3 message"
}
如果不想使用缺省参数,可以通过 <module>: {}
显式指明不使用缺省参数:
- name: task4debug: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: allvars:var1: "Tom"module_defaults:debug:msg: "Hello {{ var1 }}"tasks:- name: task1debug:- name: task2set_fact:var1: "Jerry"- name: task3debug:
运行结果如下:
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