当前位置: 首页 > news >正文

ansible中配置并行以及包含和导入

ansible中配置并行以及包含和导入

一、引用主机清单

在playbook中引用hosts时,如果对应的主机清单中没有配置该主机,是无法执行的

如果主机清单中配置的是主机名称,那么在playbook中hosts字段后写的是ip或者主机名,那么也是无法执行的

示例如下:
[student@master ansible]$ vim inventory 
[student@master ansible]$ vim a.yml
[student@master ansible]$ ansible-playbook a.yml
[WARNING]: Could not match supplied host pattern, ignoring: 192.168.122.10
[WARNING]: Could not match supplied host pattern, ignoring: node2.example.comPLAY [test] ****************************************************************************
skipping: no hosts matchedPLAY RECAP *****************************************************************************
主机清单:
[student@master ansible]$ cat inventory 
node1
node2
node3
node4
node5[test01]
node1[test02]
node2[web]
node3
node4[test05]
node5[webtest:children]
web
a.yml:
---
- name: testhosts: 192.168.122.10,node2.example.comtasks:- name: debug1debug:msg: 123
执行a.yml这个playbook的时候,就会发现有问题了,直接跳过该任务,无法执行
所以在引用主机清单时,一定要注意playbook里面hosts字段后写的内容一定只能时主机清单里面编辑的内容

二、使用playbook引用主机清单的方式有很多种

Hosts: node1

Hosts: node1.example.com

Hosts: 172.16.30.10

Hosts: all ----所有的受控主机

Hosts: net ----主机组net

Hosts: ‘*’ ----所有的主机

Hosts: ‘*.example.com’

Hosts: ‘172.16.30.*’

Hosts: ’ web* ’ —通过匹配符*来匹配(所有以web开头的组里面的主机)

Hosts: net:webserver ----取net组和webserver组的并集
Hosts: net:&webserver —取交集
Hosts: net:!node1 —net组所有的主机,但是除了node1

Hosts: node[1-5]

Hosts: node[a-d]

三、配置并行(forks)

当ansible处理playbook时,会按顺序运行每个play。确定play的主机列表后,ansible将按顺序运行每个任务。通常,所有主机必须在任何主机在play中启动下一个任务之前完成任务。

理论上,ansible可以连接到play中的所有主机以执行每项任务。这非常适用于小型主机列表。但如果该play以数百台主机为目标,则可能会给控制节点带来沉重的负担。Ansible所进行的最大同时连接数由ansible配置文件的forks参数控制。默认值为5.

比如一个play具有10台受控主机,我们forks的值为5,那么,首先前5台主机,同时运行第一个play,当这5台主机运行完成第一个play后,后5台主机同时运行第一个play,等到10台主机运行完成第一个play时,才开始运行第二个play,以此类推

以三台主机和两个任务为例:
先主机node1、node2、node3先完成任务debug1,再主机node1、node2、node3完成任务debug2
[student@master ansible]$ vim a.yml
[student@master ansible]$ ansible-playbook a.ymlPLAY [test] ****************************************************************************TASK [Gathering Facts] *****************************************************************
ok: [node1]
ok: [node3]
ok: [node2]TASK [debug1] **************************************************************************
ok: [node1] => {"msg": 123
}
ok: [node2] => {"msg": 123
}
ok: [node3] => {"msg": 123
}TASK [debug2] **************************************************************************
ok: [node1] => {"msg": 234
}
ok: [node2] => {"msg": 234
}
ok: [node3] => {"msg": 234
}PLAY RECAP *****************************************************************************
node1                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
---
- name: testhosts: node1,node2,node3tasks:- name: debug1debug:msg: 123- name: debug2debug:msg: 234

当受控主机是linux主机时,我们执行play的时候,大多数的任务是在受控主机上运行的,ansible控制节点得负载就少了,这种情况下呢,我们可以把forks的值设置得更高一些。

当受控主机是网络设备时,比如路由器交换机时,大多数得模块是在控制节点中运行的,这时控制节点的负载就会很高,这个时候我们就不能去提高forks的值了。

四、notify handlers用法(当完成….任务时,则进行….任务)

通常情况下,ansible运行play时,它会确保所有的受控主机在启动任何进行下一项任务之前已完成了每个任务。在所有受控主机完成所有任务后,将运行任何通知的处理器

比如说,给所有webserver主机组安装httpd软件包时,安装成功后会重启服务,那么我们使用触发器进行配置

注:已经配置了yum仓库
[student@master ansible]$ vim httpd.yml
[student@master ansible]$ ansible-playbook httpd.yml PLAY [install httpd] *******************************************************************TASK [Gathering Facts] *****************************************************************
ok: [node1]
ok: [node3]
ok: [node2]TASK [install httpd1] ******************************************************************
changed: [node1]
changed: [node3]
changed: [node2]RUNNING HANDLER [restart httpd] ********************************************************
changed: [node3]
changed: [node2]
changed: [node1]PLAY RECAP *****************************************************************************
node1                      : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  
---
- name: install httpdhosts: node1,node2,node3tasks:- name: install httpd1yum:name: httpdstate: presentnotify:- restart httpdhandlers:- name: restart httpdservice:name: httpdstate: restarted

那么如果此时有非常非常多的主机,当我们中间某个安装httpd失败时,那么handlers还会执行吗?我们都知道,handlers它是在我们执行完所有的play之后,才会去执行的,但是node1、node2都更新成功了,node3这里失败了,那么整个play就直接中断了,不会去执行handlers了。那么就有问题了,那我们如何来解决这个问题呢?

就可以用到serial参数,加入给该参数设置为2,那么意思就是先node1、node2这2台主机进行运行play,当我这两台主机全部运行play完成后,再从设置的hosts中,未执行play的主机中选择2台进行执行play,以此类推。

五、serial参数

例1:
[student@master ansible]$ vim httpd.yml
[student@master ansible]$ ansible-playbook httpd.yml PLAY [install httpd] *******************************************************************TASK [Gathering Facts] *****************************************************************
ok: [node2]
ok: [node1]TASK [install httpd1] ******************************************************************
ok: [node2]
ok: [node1]PLAY [install httpd] *******************************************************************TASK [Gathering Facts] *****************************************************************
ok: [node3]TASK [install httpd1] ******************************************************************
ok: [node3]PLAY RECAP *****************************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
---
- name: install httpdhosts: node1,node2,node3serial: 2tasks:- name: install httpd1yum:name: httpdstate: presentnotify:- restart httpdhandlers:- name: restart httpdservice:name: httpdstate: restarted
例2:
[student@master ansible]$ vim a.yml 
[student@master ansible]$ ansible-playbook a.yml PLAY [test] ****************************************************************************TASK [Gathering Facts] *****************************************************************
ok: [node1]
ok: [node2]TASK [debug1] **************************************************************************
ok: [node1] => {"msg": 123
}
ok: [node2] => {"msg": 123
}TASK [debug2] **************************************************************************
ok: [node1] => {"msg": 234
}
ok: [node2] => {"msg": 234
}PLAY [test] ****************************************************************************TASK [Gathering Facts] *****************************************************************
ok: [node3]TASK [debug1] **************************************************************************
ok: [node3] => {"msg": 123
}TASK [debug2] **************************************************************************
ok: [node3] => {"msg": 234
}PLAY RECAP *****************************************************************************
node1                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
---
- name: testhosts: node1,node2,node3serial: 2tasks:- name: debug1debug:msg: 123- name: debug2debug:msg: 234

六、包含与导入

导入:1、导入任务 2、导入playbook
包含:只包含任务
1、导入playbook:(repo.yml导入到httpd.yml中)
repo.yml:
---
- name: repohosts: alltasks:- name: repo1yum_repository:name: aadescription: aa1baseurl: http://ansible.example.com/rhel9/BaseOSenabled: yesgpgcheck: no- name: repo2yum_repository:name: bbdescription: aa2baseurl: http://ansible.example.com/rhel9/AppStreamenabled: yesgpgcheck: no
httpd.yml:
---
- name: import repoimport_playbook: repo.yml
- name: install httpdhosts: node4tasks:- name: install httpd1yum:name: httpdstate: present- name: restart httpdservice:name: httpdstate: restarted
运行httpd.yml剧本
[student@master ansible]$ ansible-playbook httpd.yml PLAY [repo] ****************************************************************************TASK [Gathering Facts] *****************************************************************
ok: [node2]
ok: [node1]
ok: [node3]
ok: [node5]
ok: [node4]TASK [repo1] ***************************************************************************
ok: [node4]
ok: [node1]
ok: [node5]
ok: [node3]
ok: [node2]TASK [repo2] ***************************************************************************
ok: [node2]
ok: [node1]
ok: [node3]
ok: [node5]
ok: [node4]PLAY [install httpd] *******************************************************************TASK [Gathering Facts] *****************************************************************
ok: [node4]TASK [install httpd1] ******************************************************************
changed: [node4]TASK [restart httpd] *******************************************************************
changed: [node4]PLAY RECAP *****************************************************************************
node1                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node4                      : ok=6    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node5                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
2、导入任务(将vsftpd.yml导入到httpd.yml中)
vsftpd.yml:
---
- name: install vsftpdyum:name: vsftpdstate: present- name: restarted vsftpdservice:name: vsftpdstate: restarted
httpd.yml:
---
- name: import repoimport_playbook: repo.yml
- name: install httpdhosts: node4tasks:- name: install httpd1yum:name: httpdstate: present- name: restart httpdservice:name: httpdstate: restarted- import_tasks: vsftpd.yml
运行httpd.yml剧本
[student@master ansible]$ ansible-playbook httpd.yml PLAY [repo] ****************************************************************************TASK [Gathering Facts] *****************************************************************
ok: [node5]
ok: [node3]
ok: [node1]
ok: [node2]
ok: [node4]TASK [repo1] ***************************************************************************
ok: [node5]
ok: [node4]
ok: [node3]
ok: [node2]
ok: [node1]TASK [repo2] ***************************************************************************
ok: [node1]
ok: [node5]
ok: [node3]
ok: [node4]
ok: [node2]PLAY [install httpd] *******************************************************************TASK [Gathering Facts] *****************************************************************
ok: [node4]TASK [install httpd1] ******************************************************************
ok: [node4]TASK [restart httpd] *******************************************************************
changed: [node4]TASK [install vsftpd] ******************************************************************
changed: [node4]TASK [restarted vsftpd] ****************************************************************
changed: [node4]PLAY RECAP *****************************************************************************
node1                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node4                      : ok=8    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node5                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  
3、包含任务
[student@master ansible]$ ansible-playbook httpd.yml PLAY [repo] ****************************************************************************TASK [Gathering Facts] *****************************************************************
ok: [node4]
ok: [node5]
ok: [node1]
ok: [node2]
ok: [node3]TASK [repo1] ***************************************************************************
ok: [node5]
ok: [node4]
ok: [node2]
ok: [node3]
ok: [node1]TASK [repo2] ***************************************************************************
ok: [node2]
ok: [node1]
ok: [node4]
ok: [node5]
ok: [node3]PLAY [install httpd] *******************************************************************TASK [Gathering Facts] *****************************************************************
ok: [node4]TASK [install httpd1] ******************************************************************
ok: [node4]TASK [restart httpd] *******************************************************************
changed: [node4]TASK [include_tasks] *******************************************************************
included: /home/student/ansible/vsftpd.yml for node4TASK [install vsftpd] ******************************************************************
ok: [node4]TASK [restarted vsftpd] ****************************************************************
changed: [node4]PLAY RECAP *****************************************************************************
node1                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node4                      : ok=9    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node5                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 
---
- name: import repoimport_playbook: repo.yml
- name: install httpdhosts: node4tasks:- name: install httpd1yum:name: httpdstate: present- name: restart httpdservice:name: httpdstate: restarted- include_tasks: vsftpd.yml

文章转载自:

http://DkpBngz1.Lnrhk.cn
http://Nf9tECux.Lnrhk.cn
http://pyrboznB.Lnrhk.cn
http://MsLW6lhA.Lnrhk.cn
http://K5PGbHNY.Lnrhk.cn
http://sqbMkqWE.Lnrhk.cn
http://kcxhuugE.Lnrhk.cn
http://iuVLssXe.Lnrhk.cn
http://yf7K8wY8.Lnrhk.cn
http://SgOMO8x2.Lnrhk.cn
http://VMKDANFv.Lnrhk.cn
http://qhcAMPDz.Lnrhk.cn
http://znb9MbRE.Lnrhk.cn
http://Ax2XSh1G.Lnrhk.cn
http://TmgXIS8O.Lnrhk.cn
http://PmoB7pGR.Lnrhk.cn
http://fUhV4dUr.Lnrhk.cn
http://dCpfu5io.Lnrhk.cn
http://afOEnfWv.Lnrhk.cn
http://o2XErcSj.Lnrhk.cn
http://fPed2mT7.Lnrhk.cn
http://66IktDL7.Lnrhk.cn
http://sfxSqywB.Lnrhk.cn
http://vft4Zn8c.Lnrhk.cn
http://9dENbznH.Lnrhk.cn
http://yw8K69UE.Lnrhk.cn
http://IXxvamE6.Lnrhk.cn
http://xhYhjGDA.Lnrhk.cn
http://ZCKRk7SM.Lnrhk.cn
http://hjWBLKZB.Lnrhk.cn
http://www.dtcms.com/a/365085.html

相关文章:

  • iptables 和 ip route
  • 17岁高中生写的“Thinking Claude”提示词在网络上走火。提示词全文,并附高价值解读。
  • GEO优化专家孟庆涛:优质内容是GEO优化的核心
  • 使用sudo命令执行程序不保留父进程
  • 51单片机(按键,外部中断,定时器中断,PWM与蜂鸣器)
  • 【序列晋升】27 Spring Cloud Sleuth给分布式系统装上透视镜
  • Shell 秘典(卷八)—— 万流归宗秘术・AWK 通玄真解
  • GitHub热门AI编程工具推荐:CodeGeeX4+CodeLlama实战教程,程序员高效开发必备
  • etcd的强一致性和redis的最终一致性都是如何实现的?
  • HTML应用指南:利用POST请求获取全国九号电动车体验店服务店位置信息
  • 【GM3568JHF】FPGA+ARM异构开发板 使用指南:WIFI
  • 日用百货新零售小程序设计与开发(代码+数据库+LW)
  • 现代软件栈全景解析,揭示从用户界面到基础设施的层层构建与关键技术
  • c语言程序之魂——算法(练习题,流程图,程序源码)
  • 强化微调:以Swift框架进行GRPO多模态模型强化微调为例
  • MyHeyGen-开源版HeyGen,视频翻译工具
  • 关于修正谷歌搜索垄断的裁决对公司的意义
  • k8s初始化常见问题
  • 第4章 存储系统
  • 【武汉杨某媛事件后续】
  • 【Day 43】Shell-awk
  • 云手机将要面临的挑战有哪些?
  • EasyExcel 基础用法
  • XA 模式依赖关系型数据库
  • IObit Uninstaller 卸载 Windows 便携
  • Networking Concepts
  • 通过卫星WGS84位置矢量计算星下点经纬度
  • 小皮80端口被NT内核系统占用解决办法
  • 《增广贤文》读书笔记(四)
  • Python类型注释