模块默认值
如果你经常使用相同的参数调用同一个模块,那么使用 module_defaults
关键字为该特定模块定义默认参数会很有用。
这是一个基本示例
- hosts: localhost
module_defaults:
ansible.builtin.file:
owner: root
group: root
mode: 0755
tasks:
- name: Create file1
ansible.builtin.file:
state: touch
path: /tmp/file1
- name: Create file2
ansible.builtin.file:
state: touch
path: /tmp/file2
- name: Create file3
ansible.builtin.file:
state: touch
path: /tmp/file3
module_defaults
关键字可以在剧本、块和任务级别使用。在任务中显式指定的任何模块参数都会覆盖为该模块参数建立的任何默认值。
- block:
- name: Print a message
ansible.builtin.debug:
msg: "Different message"
module_defaults:
ansible.builtin.debug:
msg: "Default message"
可以通过指定一个空字典来删除为模块建立的任何先前默认值。
- name: Create file1
ansible.builtin.file:
state: touch
path: /tmp/file1
module_defaults:
file: {}
注意
在剧本级别设置的任何模块默认值(以及在使用 include_role
或 import_role
时在块/任务级别设置的默认值)将应用于使用的任何角色,这可能会导致角色中的意外行为。
以下是一些更现实的用例。
与需要身份验证的 API 交互。
- hosts: localhost
module_defaults:
ansible.builtin.uri:
force_basic_auth: true
user: some_user
password: some_password
tasks:
- name: Interact with a web service
ansible.builtin.uri:
url: http://some.api.host/v1/whatever1
- name: Interact with a web service
ansible.builtin.uri:
url: http://some.api.host/v1/whatever2
- name: Interact with a web service
ansible.builtin.uri:
url: http://some.api.host/v1/whatever3
为特定与 EC2 相关的模块设置默认的 AWS 区域。
- hosts: localhost
vars:
my_region: us-west-2
module_defaults:
amazon.aws.ec2:
region: '{{ my_region }}'
community.aws.ec2_instance_info:
region: '{{ my_region }}'
amazon.aws.ec2_vpc_net_info:
region: '{{ my_region }}'
模块默认值组
模块默认值组允许为属于一起的模块组提供通用参数。集合可以在其 meta/runtime.yml
文件中定义这样的组。
注意
module_defaults
不会考虑 collections
关键字,因此必须在 module_defaults
中使用完全限定的组名称来表示新组。
以下是一个用于 ns.coll
集合的 runtime.yml
文件示例。该文件定义了一个名为 ns.coll.my_group
的操作组,并将 sample_module
(来自 ns.coll
)和 another_module
(来自 another.collection
)放入该组。
# collections/ansible_collections/ns/coll/meta/runtime.yml
action_groups:
my_group:
- sample_module
- another.collection.another_module
现在,可以在剧本中像这样使用该组
- hosts: localhost
module_defaults:
group/ns.coll.my_group:
option_name: option_value
tasks:
- ns.coll.sample_module:
- another.collection.another_module:
出于历史原因以及向后兼容性,有一些特殊组
组 |
扩展模块组 |
---|---|
aws |
amazon.aws.aws 和 community.aws.aws |
azure |
azure.azcollection.azure |
gcp |
google.cloud.gcp |
k8s |
community.kubernetes.k8s、community.general.k8s、community.kubevirt.k8s、community.okd.k8s 和 kubernetes.core.k8s |
os |
openstack.cloud.os |
acme |
community.crypto.acme |
docker* |
community.general.docker 和 community.docker.docker |
ovirt |
ovirt.ovirt.ovirt 和 community.general.ovirt |
vmware |
community.vmware.vmware |
查看集合或其 meta/runtime.yml 的文档,以了解哪些操作插件和模块包含在该组中。
通过在组名前面添加 group/
(例如 group/aws
)来使用 module_defaults
中的组。
在剧本中,可以为整个模块组设置模块默认值,例如设置通用的 AWS 区域。
# example_play.yml
- hosts: localhost
module_defaults:
group/aws:
region: us-west-2
tasks:
- name: Get info
aws_s3_bucket_info:
# now the region is shared between both info modules
- name: Get info
ec2_ami_info:
filters:
name: 'RHEL*7.5*'
有关 meta/runtime.yml 的更多信息,包括 action_groups 的完整格式,请参阅 runtime.yml。