ansible——管理大项目(匹配主机、管理动态清单、配置并行、包含导入文件)

文章目录

  • 一、利用主机模式选择主机
    • 1. 使用通配符匹配主机
    • 2. 通过列表匹配主机或主机组
  • 二、管理动态清单
  • 三、配置并行
    • 1. 使用 forks 在 ansible 中配置并行
    • 2. 管理滚动更新
  • 四、包含和导入文件
  • 五、管理大项目综合实验

一、利用主机模式选择主机

1. 使用通配符匹配主机

- hosts: '*'			#匹配所有主机
- hosts: '*.example.com'	#匹配以.example.com结尾的主机
- hosts: '172.25.254.*'		#匹配指定IP网段的主机

2. 通过列表匹配主机或主机组

- hosts: www1.example.com,www2.example.com,172.25.254.250
- hosts: webservers,westos

也可以将通配符和列表等一起使用:

- hosts: webservers,&westos 			#即属于 webserver 组,也属于 westos 组
- hosts: westos,!servera.lab.example.com	#匹配 westos 组中所有主机,但是servera.lab.example.com 除外
- hosts: all,!servera.lab.example.com 		#所有主机除了servera.lab.example.com

二、管理动态清单

编写动态清单程序,将 INI 格式的清单转换为 JSON 格式
命令:ansible-inventory -i inventory --list
示例:
ansible——管理大项目(匹配主机、管理动态清单、配置并行、包含导入文件)_第1张图片
ansible——管理大项目(匹配主机、管理动态清单、配置并行、包含导入文件)_第2张图片

三、配置并行

1. 使用 forks 在 ansible 中配置并行

  1. ansible 最大同时连接数由 ansible 配置文件中 forks参数 控制
  2. 默认并行数为5:
    在这里插入图片描述
  3. 可以在命令行使用 -f 或者 --forks 参数来指定并行数

2. 管理滚动更新

  1. 如果更新发生在负载均衡服务器,更新完成会重启,可能导致后端所有 web 服务器停止服务,可以使用 serial 关键字来分批运行。
  2. serial 参数的优点:
    在更新时如果出现问题,那么在前 2 台发生问题时 playbook 就会停止运行,后面的服务器不会执行,那么也就保证了服务的高可用。
  3. 例如:
---
- name: Rolling update
  hosts: webservers
  serial: 2
  tasks:
    - name: Install apache
      yum:
	name: httpd
	state: latest
      notify: restart apache
  handlers:
    - name: restart apache
      service:
	name: httpd
	state: restarted
...	

四、包含和导入文件

大型 playbook 管理起来比较复杂,可以用模块化的方式管理;
两种方法:包含、导入。


(1)导入playbook:

- name: configure webserver
  import_playbook: web.yml	#web.yml是已经写好的playbook

(2)导入和包含任务的playbook
示例:
ansible——管理大项目(匹配主机、管理动态清单、配置并行、包含导入文件)_第3张图片
导入任务:使用关键词 import_playbook

- name: Install web
  hosts: web
  tasks:
    - import_tasks: task.yml		#导入任务playbook

ansible——管理大项目(匹配主机、管理动态清单、配置并行、包含导入文件)_第4张图片
使用导入时,when 等条件语句应用于导入的每个任务;循环不能作用于导入的任务
包含任务:使用关键词 import_playbook

- name: Install web
  hosts: web
  tasks:
    - include_tasks: task.yml

(3)为外部 play 和任务定义变量,提高复用性:
示例:
ansible——管理大项目(匹配主机、管理动态清单、配置并行、包含导入文件)_第5张图片
用于导入:

---
- name: Install web
  hosts: web
  tasks:
    - name: Import task
      import_tasks: task.yml
      vars:
        package: httpd
      service: httpd
...   

五、管理大项目综合实验

(1)编辑配置文件和清单
ansible——管理大项目(匹配主机、管理动态清单、配置并行、包含导入文件)_第6张图片
(2)编写只有任务的playbook:
安装并启动服务的任务名称为: install_and_enabled.yml
ansible——管理大项目(匹配主机、管理动态清单、配置并行、包含导入文件)_第7张图片
apache 配置任务名称为:web_tasks.yml
ansible——管理大项目(匹配主机、管理动态清单、配置并行、包含导入文件)_第8张图片
在当前目录中新建目录files,编辑example.conf配置文件:
ansible——管理大项目(匹配主机、管理动态清单、配置并行、包含导入文件)_第9张图片

firewalld配置任务名称为: firewall_tasks.yml
ansible——管理大项目(匹配主机、管理动态清单、配置并行、包含导入文件)_第10张图片
(3)编写主playbook:导入上述任务
在这里插入图片描述

---
- name: Install and Configure web service
  hosts: server*.lab.example.com
  serial: 2
  tasks:
    - name: Import web_tasks.yml
      import_tasks: web_tasks.yml		#导入Apache配置任务
    - name: Import the firewall_tasks.yml
      import_tasks: firewall_tasks.yml		#导入firewall配置任务
  handlers:
    - name: restart httpd
      service:
        name: httpd
        state: restarted

你可能感兴趣的:(ansible)