RedHat9 | Ansible 编写和运行Playbook

环境版本说明

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

1. Playbook简介

  • play是针对清单中选定的主机运行的一组有序任务
  • Playbook是一个文本文件,其中包含由一个或多个按特定顺序运行的play组成的列表
  • 临时命令可以作为一次性命令对一组主机运行一项简单的任务
  • Playbook可以通过轻松重复的方式对一组目标主机执行多项复杂的任务
    在这里插入图片描述

2. Playbook-yaml语法

  • playbook是使用YAML语法编写的文本文件,后缀名为[.yml]
  • 严格缩进和空格
  • YAML文件以---开头,以...结束(结束可以省略不写)
  • 使用-(减号加一个或多个空格)作为列表项
  • 注释符为:#

调整Tab键缩进

  • 永久调整缩进:vim ~/.vimrc --> set tabstop=2
  • 当前调整缩进:set tabstop=2

整体缩进(视图模式)

  • Ctrl+v 进入视图模式
  • 通过 j 选择行,或者 G 直接选中剩余所有行
  • I 进入编辑模式
  • 在调整完后,按 Esc 键应用

yaml示例

---							# yaml语法:开头 
- name: install httpd		# paly任务的描述:描述部分可选
  hosts: node1				# 指定目标主机
  tasks:					# 任务列表,下面为任务模块
  - name: Install Apache	# 任务模块,与tasks有两个字符缩进
    ansible.builtin.yumL	# 模块名
      name: httpd			# 模块参数、模块选项
      state: latest			# 模块参数、模块选项
...							# yaml语法:结尾(可省略)

3. 查找用于任务的模块

使用Ansible进行部署任务时,可针对管理员任务需求,选择对应功能模块,通过以下方法可以查询模块帮助,以便编写临时命令及playbook。

查询命令

# RHEL8以前的版本查询方式
ansible-doc -l

# RHEL9版本查询方式
ansible-navigator collections
ansible-navigator doc ansible.posix.firewalld -m stdout

示例:查询YUM模块

ansible-doc -l | grep yum

在这里插入图片描述

4. 编写playbook

  • 安装Apache软件包。
  • 网站根目录为默认目录。
  • index.html 内容使用 Welcome to 2023!
  • 将Apache服务设置为开机自启,并调整防火墙规则

[Step1]:分析题目

# 如果按照平时的配置步骤,分别为以下内容
dnf install -y httpd
echo Welcome to 2023! > /var/www/html/index.html
systemctl enable --now httpd.service
firewalld-cmd --add-service=http --permanent
firewalld-cmd --reload

[Step2]:进入工作目录,创建yml文件

cd /home/student/ansible
vim web.yml

[Step3]:在yml文件中写入下列内容

---
- name: Install Apache Service
  hosts: servera,serverb
  tasks:

[Step4]:查找有关YUM的模板,进入后搜索EXAMPLE

ansible-doc yum

在这里插入图片描述

[Step5]:将YUM模板示例内容复制到yml文件中

- name: Install Apache
  ansible.builtin.yum:
  name: httpd				# 安装的服务名
  state: latest				# 版本信息:latest最新的

[Step6]:查找有关文本复制的模板,进入后搜索EXAMPLE

ansible-navigator doc copy -m stdout

在这里插入图片描述

[Step7]:将copy模板内容复制到yml文件中

- name: Build index.html
  ansible.builtin.copy:
    content: 'Welcome to 2023!'			# 文本
    dest: /var/www/html/index.html		# 重定向到该文件中

[Step8]:查找有关服务启停的模板,进入后搜索EXAMPLE

ansible-navigator doc service -m

在这里插入图片描述

[Step9]:将service模板内容复制到yml文件中

- name: Start service http
  ansible.builtin.service:
    name: httpd
    state: started
    enabled: yes

[Step10]:查找有关防火墙的模板,进入后搜索EXAMPLE

- name: permit traffic in default zone for http service
  ansible.posix.firewalld:
    service: http				# 指定服务
    permanent: yes				# 等同于 --permanent
    immediate: yes				# 等同于 firewalld-cmd --reload
    state: enabled				# 等同于 add-service

在这里插入图片描述

[Step11]:将service模板内容复制到yml文件中

- name: permit traffic in default zone for http service
  ansible.posix.firewalld:
    service: http
    permanent: yes
    immediate: yes
    state: enabled

[Step12]:调整格式后的yml文件如下

---
- name: Install Apache Service.
  hosts: servera,serverb
  tasks:
  - name: Install Apache
    ansible.builtin.yum:
      name: httpd
      state: latest
  - name: Build index.html
    ansible.builtin.copy:
      content: 'Welcome to 2023!'
      dest: /var/www/html/index.html
  - name: Start service http
    ansible.builtin.service:
      name: httpd
      state: started
      enabled: yes
  - name: permit traffic in default zone for http service
    ansible.posix.firewalld:
      service: http
      permanent: yes
      immediate: yes
      state: enabled

在这里插入图片描述

[Step13]:验证playbook语法

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

在这里插入图片描述

5. 执行playbook

[Step1]:执行playbook,在控制台中输出

ansible-navigator run web.yml -m stdout

在这里插入图片描述

[Step2]:再次执行,查看执行效果

ansible-navigator run web.yml -m stdout

在这里插入图片描述

6. 包含多play的playbook

编写包含多个play的playbook非常简单。playbook中的各个play编写为playbook中的顶级列表项。

简单的多play示例:给servera和serverb分别安装不同的软件

[Step1]:编辑palybook,文件名为more.yml

---
- name: for servera
  hosts: servera
  tasks:
    - name: Install Samba
      ansible.builtin.yum:
        name: samba
        state: latest
- name: for serverb
  hosts: serverb
  tasks:
    - name: Install FTP
      ansible.builtin.yum:
        name: vsftpd
        state: latest

[Step2]:运行more.yml

ansible-navigator run more.yml -m stdout

在这里插入图片描述

7. 综合练习

案例需求

  • 创建一个名为 inventory 的主机清单
  • 创建主机组 dev,包含servera
  • 创建主机组 test,包含serverb
  • 创建主机组 prod,包含serverc、serverd
  • 创建一个名为 /home/student/ansible/packages.yml 的palybook
  • 将 php 和 mariadb 软件包安装到 dev、test、prod 主机组中
  • RPM Development Tools 软件包组 安装到 dev 主机组中的主机上
  • dev 主机组中的主机上的所有软件包更新为最新版本

[Step1]:安装ansible

dnf install -y ansible-navigator ansible-core

[Step2]:远程登录workstation,新建并进入工作目录ansible

ssh student@workstation
mkdir ~/ansible
cd ~/ansible

[Step3]:新建清单文件inventory

vim inventory

[dev]
servera

[test]
serverb

[prod]
serverc
serverd

[Step4]:生成Ansible配置文件

ansible-config init --disabled > ansible.cfg
vim ansible.cfg

# 写入下列内容
[defaults]
become_password_file=password.txt		# 指定提权密码存储在password文件中
host_key_checking=False
inventory=/home/student/ansible/inventory

[privilege_escalation]
become=True

在这里插入图片描述

[Step5]:编写提权密码文件password.txt

echo student > password.txt

[Step6]:检索软件包组

dnf group list | grep RPM

在这里插入图片描述

[Step7]:编写playbook

vim packages.yml

# 写入下列内容
---
- name: play1
  hosts: dev,test,prod
  tasks:
    - name: Install php and mariadb			# 安装php和mariadb
      ansible.builtin.yum:
        name:
          - mariadb
          - php
        state: latest


- name: play2
  hosts: dev
  tasks:
    - name: Install the 'RPM Development tools' package group
      ansible.builtin.yum:					# 安装软件包组
        name: "@RPM Development Tools"
        state: present
    - name: Upgrade all packages
      ansible.builtin.yum:					# 更新所有软件包
        name: '*'
        state: latest

[Step8]:验证palybook语法

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

在这里插入图片描述

[Step9]:空运行,使Ansible报告在执行palybook时会发生什么更改,但不会对客户机发生更改

ansible-navigator run packages.yml --check -m stdout

在这里插入图片描述

[Step10]:运行playbook

ansible-navigator run packages.yml -m stdout

在这里插入图片描述

[Step11]:验证:查看dev,test,prod主机组的php、mariadb软件安装情况

ansible all -m shell -a 'rpm -q php; rpm -q mariadb'
  • ansible all:执行对象为清单文件中的所有主机
  • -m shell:使用shell模块
  • -a:执行的命令
    在这里插入图片描述

[Step12]:验证:查看dev,test,prod主机组的软件包组安装情况

ansible all -m shell -a 'dnf grouplist "RPM Development Tools"'

在这里插入图片描述

8、常用模块

查看当前环境下中可用的模块列表

ansible-navigator doc -l

文件类别

模块解释
ansible.builtin.copy将本地文件复制到受管主机
ansible.builtin.file设置文件权限和其他属性
ansible.builtin.lineinfile确保特定行是否在文件中
ansible.posix.synchronize使用rsync同步内容

软件类型

模块解释
ansible.builtin.package使用操作系统自带的包管理器管理软件包
ansible.builtin.dnf使用DNF软件包管理器管理软件包
ansible.builtin.apt使用APT软件包管理器管理软件包
ansible.builtin.pip从PyPI管理Python软件包

系统类别

模块解释
ansible.posix.firewalld使用Firewalld管理任意端口和服务
ansible.builtin.reboot重启计算机
ansible.builtin.service管理服务
ansible.builtin.user添加、删除和管理用户账户

网络工具

模块解释
ansible.builtin.get_url通过HTTP、HTTPS、FTP下载文件
ansible.builtin.uri与Web服务交互
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Meaauf

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

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

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

打赏作者

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

抵扣说明:

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

余额充值