RedHat9 | Ansible 管理大项目

环境版本说明

  • RedHat9 [Red Hat Enterprise Linux release 9.0]
  • Ansible [core 2.13.3]
  • Python [3.9.10]
  • jinja [3.1.2]

1. 主机管理

主机模式的常用方式

  • ad-hoc 方式
ansible node1 -m ping
  • Playbook中的hosts字段
---
- name:
  hosts: node1

清单中的主机匹配方式

[192.168.1.[1:100]		# 表示 182.168.1.1--192.168.1.100
server[a:d].example.com	# 表示 servera.example.com---serverd.example.com
all					# 代表清单中的所有主机
ungrouped			# 不属于任何主机组的主机

Playbook中的hosts字段

  • 使用特殊字符,必须添加单引号
  • &代表与的意思
  • !代表非的意思
hosts: '*'			# 代表清单中的所有主机,必须添加单引号
hosts: '*.example.com'	# 代表example.com域中的所有主机
hosts: all			# 代表清单中的所有主机

hosts: servera,serverb		# 代表主机servera和serverb
hosts: group1,&group2		# 匹配同时属于group1和group2的主机
hosts: group1,!group2		# 匹配属于group1但是不属于group2的主机

2. 并发数设置

在Ansible的配置文件中,存在forks字段,默认值为5,可以同时并发处理5台主机
在这里插入图片描述

可以通过将值修改为2台主机,然后运行一个简单的基本,看到细微的效果

forks=2

[Step1]:编写playbook文件,文件内容如下:

vim forks.yml

# 文件内容如下
---
- name: play1
  hosts: all
  tasks:
  - name: forks2
    ansible.builtin.debug:
      msg: "forks=2"

[Step2]:运行playbook,可以看到两台主机两台主机的运行

ansible-navigator run forks.yml -m stdout

请添加图片描述

3. 滚动更新

实现效果:将serial设置为2,两台主机运行完整运行完成后,后续主机再接着完成

例如:清单文件有servera、serverb、serverc、serverd;在设置滚动更新为2时,会先在servera和serverb上运行完所有Play,然后才在serverc、serverd上运行。

[Step1]:编写playbook文件,文件内容如下:

vim serial.yml

# 文件内容如下
---
- name: play1
  hosts: node1,node2,node3,node4
  serial: 2							# 设置滚动更新
  tasks:
    - name: debug msg
      ansible.builtin.debug:
        msg: debug {{ inventory_hostname }}		# 打印信息

[Step2]:运行playbook,可以看到先在node1和node2上完整执行完Play后,再在node3和node4上执行

ansible-navigator run serial.yml -m stdout

在这里插入图片描述

4. 导入playbook

当一个playbook很长很复杂时,可以拆分为较小的文件以便于管理,通过模块化管理,可以将多个不功能的Play,组合成一个主要的playbook,在文件中的人物列表插入Play,这样可以将这种模块化的Play应用到不同的场景。

[Step1]:编写子playbook文件install_apache.yml,文件内容如下:

vim install_apache.yml

# 文件内容如下
---
- name:
  hosts: node1
  tasks:
  - name: Install the latest version of Apache
    ansible.builtin.dnf:			# 安装Apache服务
      name: httpd
      state: latest

[Step2]:编写子playbook文件start_httpd.yml,文件内容如下:

vim start_httpd.yml

# 文件内容如下
---
- name:
  hosts: node1
  tasks:
  - name: Start service httpd, if not started
    ansible.builtin.service:		# 启动Apache服务
      name: httpd
      state: started

[Step3]:编写子playbook文件mode_index.yml,文件内容如下:

vim mode_index.yml

# 文件内容如下
---
- name:
  hosts: node1
  tasks:
  - name: Index
    ansible.builtin.copy:			# 添加索引页
      content: 'Hello World'
      dest: /var/www/html/index.hmtl

[Step4]:编写主playbook文件master.yml,文件内容如下:

vim master.yml

# 文件内容如下
---
- name: play1
  hosts: node1
  tasks:

- name: import install_apache			# 可以不写	
  import_playbook: install_apache.yml	# 导入playbook

- name: import mode_index
  import_playbook: mode_index.yml

- name: import start_httpd
  import_playbook: start_httpd.yml

[Step5]:验证playbook语法

ansible-navigator run master.yml -m stdout --syntax-check

在这里插入图片描述

[Step6]:运行playbook

ansible-navigator run master.yml -m stdout

在这里插入图片描述

5. 包含与导入

包含和导入只是单纯的将任务导入,而非整个playbook导入。Ansible有两种方法可以将文件放入playbook中

  • 包含:内容是一个动态操作。在playbook运行期间,Ansible会在内容到达时处理所包含的内容
  • 导入:内容是一个静态操作。在运行开始之前,Ansible会在最初解析playbook时预处理导入的内容。

包含和导入的书写方式

---
- name:
  hosts: node1
  tasks:
  - include_tasks: tasks.yml
  - import_tasks: tasks.yml
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Meaauf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值