ansible-playbook去掉特定主机组或主机

本文介绍了如何使用Ansible Playbook来排除特定主机组或IP地址进行任务执行的方法。通过两个案例展示了排除web1主机组及指定IP(192.168.100.102)的具体配置步骤与执行结果。
方法:all:!xxx
 
当前hosts文件配置:
 
1 [root@localhost playbooks]# cat ../hosts 
2 [web] 192.168.100.100 
3 
4 [web1] 192.168.100.102
 
案列1:将某主机组从all中剔除
playbook内容:
1 [root@localhost playbooks]# cat ping1.yml 
2 - hosts: all:!web1
3   remote_user: root
4   tasks:
5     - name: test connecion
6       ping:

 

执行结果:

 1 [root@localhost playbooks]# ansible-playbook ping.yml 
 2  
 3 PLAY [all:!192.168.100.102] **************************************************************************************************************************************************************************************************************************************************
 4  
 5 TASK [Gathering Facts] *******************************************************************************************************************************************************************************************************************************************************
 6 ok: [192.168.100.100]
 7  
 8 TASK [test connecion] ********************************************************************************************************************************************************************************************************************************************************
 9 ok: [192.168.100.100]
10  
11 PLAY RECAP *******************************************************************************************************************************************************************************************************************************************************************
12  
13  
14 192.168.100.100            : ok=2    changed=0    unreachable=0    failed=0  
 
案列2:将指定IP的机器从all中剔除
1 [root@localhost playbooks]# cat ping.yml 
2 - hosts: all:!192.168.100.102
3   remote_user: root
4   tasks:
5     - name: test connecion
6       ping:
 
执行结果:
 1 [root@localhost playbooks]# ansible-playbook ping1.yml 
 2  
 3 PLAY [all:!web1] *************************************************************************************************************************************************************************************************************************************************************
 4  
 5 TASK [Gathering Facts] *******************************************************************************************************************************************************************************************************************************************************
 6 ok: [192.168.100.100]
 7  
 8 TASK [test connecion] ********************************************************************************************************************************************************************************************************************************************************
 9 ok: [192.168.100.100]
10  
11 PLAY RECAP *******************************************************************************************************************************************************************************************************************************************************************
12  
13  
14 192.168.100.100            : ok=2    changed=0    unreachable=0    failed=0

 

 

转载于:https://www.cnblogs.com/cangyuefeng/p/8534566.html

在使用 Ansible Playbook 时,若出现主机无法匹配的问题,通常是因为 Ansible 无法在当前的主机清单中找到与 playbook 中指定的主机模式相匹配的主机。以下是详细的解决方法和注意事项: --- ### 主机无法匹配的常见原因及解决方法 1. **主机未在清单中定义** Ansible主机匹配完全依赖于 inventory 清单文件。如果 playbook 中指定的主机主机名未在 inventory 中定义,就会导致匹配失败。 - **解决方法**:确保在 inventory 文件中正确定义了主机主机。例如: ```ini [web_servers] web1.example.com web2.example.com ``` 然后在 playbook 中使用: ```yaml - hosts: web_servers tasks: - name: Ensure Apache is running service: name: httpd state: started ``` 2. **主机模式语法错误** 如果 playbook 中的主机模式使用了不正确的语法通配符,也可能导致无法匹配。 - **解决方法**:检查 playbook 中的 `hosts` 字段是否使用了正确的语法。例如,使用通配符时应确保匹配的主机存在: ```yaml - hosts: "*.example.com" tasks: - name: Ensure Nginx is running service: name: nginx state: started ``` 3. **未正确指定 inventory 文件** 如果未指定正确的 inventory 文件,Ansible 将使用默认的 `/etc/ansible/hosts`,可能导致主机无法匹配。 - **解决方法**:在执行 playbook 时显式指定 inventory 文件: ```bash ansible-playbook -i custom_inventory.ini playbook.yml ``` 者在 `ansible.cfg` 中设置默认的 inventory 文件: ```ini [defaults] inventory = /path/to/custom_inventory.ini ``` 4. **动态清单问题** 如果使用的是动态清单脚本,可能由于脚本权限输出格式问题导致主机无法正确加载。 - **解决方法**:确保动态清单脚本具有可执行权限,并且输出格式符合 Ansible 的要求: ```bash chmod +x /path/to/dynamic_inventory.py /path/to/dynamic_inventory.py --list ``` 5. **调试主机模式匹配** 可以使用 `ansible` 命令测试主机模式是否能够正确匹配到主机: ```bash ansible -i inventory.ini "web_servers" --list-hosts ``` 如果输出为空,则说明当前的主机模式无法匹配到任何主机,需修正模式清单。 --- ### 示例:修复主机无法匹配的问题 假设 playbook 文件 `Create_Nginx.yml` 中指定了主机 `nginx_servers`,但执行时报错无法匹配: ```yaml - hosts: nginx_servers tasks: - name: Install Nginx package: name: nginx state: present ``` **修复步骤**: 1. 在 inventory 文件中添加主机 `nginx_servers`: ```ini [nginx_servers] nginx-node1 ansible_host=192.168.1.101 nginx-node2 ansible_host=192.168.1.102 ``` 2. 验证主机是否被正确加载: ```bash ansible-inventory -i inventory.ini --graph ``` 3. 执行 playbook 时指定 inventory 文件: ```bash ansible-playbook -i inventory.ini Create_Nginx.yml ``` --- ### 预防措施 - **清单版本控制**:将 inventory 文件纳入版本控制系统(如 Git),确保清单文件的变更可追溯。 - **预执行检查**:在执行 playbook 前使用以下命令检查语法和清单: ```bash ansible-playbook --syntax-check playbook.yml ansible-inventory --list ``` - **使用静态检查工具**:如 `ansible-lint`,可帮助发现潜在的语法逻辑错误。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值