有一个可以在所有主机上运行的ansible剧本,包括基于Debian和RedHat的服务器,这将在基于RHEL的服务器上安装mariadb,只做一些配置更改,一旦服务启动的处理程序被用于更改根密码,就启动服务,但问题是处理程序似乎应用在所有主机上,而不是只应用在基于RHEL的服务器上,当语句不与处理程序一起工作时,检查以下代码:
---
- name: "Install & Configure MariaDB server on RHEL8"
hosts: all
vars:
required_distribution: "RedHat"
required_version: "8"
my_packages:
- mariadb-server
- python3-PyMySQL
tasks:
- name: "check & install MariaDB on RHEL 8 only"
yum:
name: "{{ item }}"
state: present
loop: "{{ my_packages }}"
when: "ansible_distribution == required_distribution and ansible_distribution_major_version == required_version"
- name: "start & enable MariaDb service"
service:
name: mariadb
state: started
enabled: true
when: "ansible_distribution == required_distribution and ansible_distribution_major_version == required_version"
notify:
- root_password
handlers:
- name: root_password
mysql_user:
name: root
password: password
when: "ansible_distribution == required_distribution and ansible_distribution_major_version == required_version"
收到此警告:
RUNNING HANDLER [root_password] ****************************************************************************************************************************************************
task path: /home/student/labs/lab6/lab6.yaml:29
[WARNING]: Module did not set no_log for update_********
changed: [server-b] => {"changed": true, "msg": "Password updated (new style)", "user": "root"}
changed: [server-a] => {"changed": true, "msg": "Password updated (new style)", "user": "root"}
changed: [server-d] => {"changed": true, "msg": "Password updated (new style)", "user": "root"}
changed: [server-c] => {"changed": true, "msg": "Password updated (new style)", "user": "root"}
META: ran handlers
META: ran handlers
我在这里考虑的是处理程序也应用在ubuntu-a服务器上&给我***"[警告]:模块未设置更新的no_log_*****"*
如果这个警告不是来自ubuntu-a服务器,那么如何删除它,我的剧本中有什么问题,这只适用于基于RHEL的服务器上的处理程序吗?
我还在寻找编写行动手册的某种有效方法,以便每次不必编写when block来筛选出托管主机时,都必须检查一次(可能在行动级别),并将其应用于所有任务
2条答案
按热度按时间vxbzzdmp1#
根据存货清单
问:***"编写行动手册以筛选出托管主机的有效方法。"***
答:使用库存插件 * 构造 *。请参见
1.缓存事实。配置缓存,例如
然后按计划行事
这将创建缓存
1.创建清单
测试库存
你可以看到这个插件 * constructed * 创建了组 * centos_8 * 和 * ubuntu_20 *。
1.在戏剧中使用小组。例如,
给予
问:***"这个处理程序也适用于Ubuntu。"***
答:在您的代码中,没有这样做的理由。例如,给定数据
任务
Give
你的病情如预期般好转
给予
你不必引用条件
您可以设置格式
,甚至更好
所有选项都给出相同的结果。
测试处理程序。如果条件位于将触发处理程序的任务中,则没有理由将该条件放入处理程序
以下任务将仅触发 * required_distribution * 和 * required_version * 的处理程序
给予
laik7k3q2#
我不认为这条消息表明处理程序正在Ubuntu上运行,但如果没有看到您的清单和其他更多信息,很难说。
不管怎么说,如果你想只适用当“当”一次(好冲动,你有两个选择:
1.把所有的任务放在一个“块”中,并把when应用到块中,如果所有的任务都使用相同的when跳过,那么你甚至不需要在处理程序中使用then when。
1.如果您真正想要的是在非RedHat 8主机上完全放弃这个剧本,那么您可以像这样使用end_host,作为剧本中的第一个任务。