ansible -playbook运维工具、语法、数据结构、命令用法、触发器、角色

目录

配置文件

基本语法规则:

YAML支持的数据结构

playbook核心元素

ansible-playbook用法:

触发器

特点:

角色:

习题:


配置文件

playbook配置文件使用yaml语法,YAML 是一门标记性语言,专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。yaml格式文件用于保存针对特定需求的任务列表。(应为逐条输入命令效率非常的低下,更有效的方案是在playbook配置文件中放置所有的任务代码,可以实现自动化运维)yaml文件的扩展名为.yaml或.yml。

基本语法规则:

yaml语法和其他高级语言类似,其结构缩进来展示,通过 " - " 来代表项,通过冒号" :"来分隔键和值,整个文件以 "---"开始并以" ..."结束(开始结束符号可以不写,只是表明一个文件的开始。可以直接以 - hosts:开头)

列表中的所有成员都开始于相同的缩进级别, 并且使用一个 "- " 作为开头(一个横杠和一个空格):

1.大小写敏感

2.使用缩进表示层级关系(每个任务之间的缩进必须严格要求,务必对齐!语法没有问题,缩进有问题一样不能执行。缩进问题ansible-playbook --syntax-check 命令检测不出来。)

3.不允许使用TAB键来缩进,只允许使用空格键来缩进!!!

4.缩进的空格数量不重要,空格数量要一致,建议使用两个空格

5.使用"#"来表示注释

YAML支持的数据结构

对象(字典):键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

数组(列表):一组按次序排列的值,又称为序列(sequence) / 列表(list)

纯量(scalars):单个的、不可再分的值

bash 复制代码
- hosts: noe-group                     #对noe-group组的操作
   remote_user: root                   #远端执行用户身份为root
   tasks:                              #任务列表
    - name: adduser user               #任务名称
      user: name=user2 state=present   #执行user模块,创建用户
      tags:                            #创建tag标签
      - a                              #tag标签为a

所有的"一"和":"后面均有空格,而且要注意缩进和对齐

playbook核心元素

|----------------------------|----------------------------------------------------------------------------------------------------------------------------|
| hosts: | 任务的目标主机,多个主机用冒号分隔, 一般调用/etc/ansible/hosts 中的分组信息。 |
| remote_user: | 远程主机上,运行此任务的身份默认为root。 |
| tasks: | 任务,即定义的具体任务,由模块定义的操作列表。 |
| handlers : | 触发器,类似 tasks , 只是在特定的条件下才会触发的任务。某任务的状态在运行 后为 changed 时,可通过"notify" 通知给相应的 handlers 进行触发执行。 |
| roles: | 角色,将hosts剥离出去,由 tasks、handlers 等所组成的一种特定的结构集合。 |

ansible-playbook用法:

|-------------------------------------------|---------------------------------------------------|
| --syntax-check | 检测 yaml文件的语法。 |
| -C(--check) | 预测试,不会改变目标主机的任何设置。 |
| --list-hosts | 列出 yaml 文件影响的主机列表。 |
| -list-tasks | 列出 yaml 文件的任务 列表。 |
| --list-tegs | 列出 yaml 文件中的标签。 |
| -t TAGS(--tags=TAGS) | 表示只执行指定标签的任务。 |
| --skip-tags=SKIP_T AGS | 表示除了指定标签的任务,执行其他任务。 |
| --start-at-task=START_ AT | 从指定的任务开始往下运行。 |

触发器

需要条件触发才能执行的任务,之前定义在 tasks 中的任务执行成功后,在此基础上触发其他的任务继续执行,就需要定义handlers。

特点:

|----------|-----------------------------------------------------------------|
| handlers | 是 Ansible提供的条件机制之一。handlers 和 task 很类似,但是它只在被task 通知的 时候才会触发执行。 |
| handlers | 只会在所有任务执行完后执行。而且即使被通知了多次,它也只会执行一次。handlers 按照定义的顺序依次执行。 |

例如:

bash 复制代码
- hosts:not-group                    #针对not-group组进行的操作
  remote_user: root                   #远程执行身份为root
  tasks:                              #任务列表
    - name: modify port               #任务名称
      shell: sed -i 's/Listen\80/Listen\8080/g'  /etc/httpd/conf/httpd.conf
                                      #使用shell模块执行操作,修改端口
      notify:                        #配置触发条件
    - restart httpd server            #完成该任务后调用名为"restart httpd server"的触发器
   handlers:                          #配置触发器
   - name: restart httpd server       #指定触发器名称
     service:name=httpd state=restarted    #触发任务为重启httpd服务

角色:

将多种不同的 tasks 的文件集中存储在某个目录下,则该目录就是角色。角色一般存放在 /etc/ansible/roles/目录,可通过 ansible 的配置文件来调整默认的角色目录,/etc/ansible/roles/目 录下有很多子目录,其中每一个子目录对应一个角色,每个角色也有自己的目录结构。

/etc/ansible/roles/为角色集合,该目录下有自定义的各个子目录:

1、mariadb:mysql 角色。

2、Apache:httpd 角色。

3、nginx:nginx 角色。

每个角色的定义,以特定的层级目录结构进行组织。以Mariadb(mysql角色)为例

  1. 1、files, 存放由 copy script 等模块调用的文件。
  2. 2、templates: 存放 template 模块查找所需要的模板 文件的目录,如 mysql 配置文件等模板。
  3. 3、tasks: 任务存放的目录
  4. 4、handlers: 存放相关触发执行器的目录
  5. 5、vars:变量存放的目录。
  6. 6、meta: 用于存放此角色元数据。
  7. 7、default: 默认变量存放的目录,文件中定义了此角色使用的默 认变量。

上述目录中,tasks、handlers、vars、meta、default 至少应该包含一个 main.yml 文件,该目录下也可以有其他.yml 文件,但是需要在main.yml 文件中用 include 指令将其他.yml 文件包含进来。 有了角色之后,可以直接在 yaml文件 (playbook 配置文件)中调用角色。

例如:

bash 复制代码
- hosts:not-group
  remote_user: root
   rolse:
   - mysql:                        #调用角色名
   - httpd:                        #调用角色名
  1. 可以只调用一个角色.也可以调用多个角色。当定义了角色后,用 ansible-playbook PLAYBBOOK 文件执行即可。此时 ansible会到角色集合的目录(/etc/ansible/roles)去找 mysql 和 httpd 目录,然后 依次运行 mysql 目录和 httpd目录下的所有代码。
  2. 下面通过一个实例配置数据库角色,要求被管理主机上自动安装 Mariadb,安装完成之后上传提 前准备好的配置文件至远端主机,重启服务,然后新建 testdb 数据库,并允许 test 用户对其拥有所有权限。

习题:

|---|-------------------------------------------------------------------------------------------------------|
| | 1.Ansible 根据角色划分为( )三个部分。 |
| | A. 使用者 BAnsible 脚本 C.Ansible 工具集 D. 作用对象. |
| | 2. 下面属于Ansible 工具集的有( ). |
| | A.Inventory B.Modules C.Plugins D.API |
| | 3.Ansible 中, Inventory 文件的默认路径是( ). |
| | A./etc/ansible/Inventory B./etc/ansible/Inventory.conf C./etc/ansible/hosts D./etc/ansible/hosts.conf |
| | 4.Ansible 中,角色默认位于( )目录中. |
| | A./var/ansible/roles B./etc/ansible/roles C./etc/roles D./opt/ansible/roles |
| | 5.Ansible 中, command 模块的作用是( ) |
| | A. 执行 linux 命令 B. 修改文件权限 C. 安装软件 D. 复制文件 |

相关推荐
Elias不吃糖21 小时前
第四天学习总结:C++ 文件系统 × Linux 自动化 × Makefile 工程化
linux·c++·学习
噜啦噜啦嘞好21 小时前
Linux进程信号
linux·运维·服务器
REDcker1 天前
Linux 进程资源占用分析指南
linux·运维·chrome
samroom1 天前
Linux系统管理与常用命令详解
linux·运维·服务器
PKNLP1 天前
07.docker介绍与常用命令
运维·docker·容器
Mxsoft6191 天前
电力系统AR远程运维与数字孪生交互技术
运维·ar
一叶之秋14121 天前
Linux基本指令
linux·运维·服务器
码割机1 天前
Linux服务器安装jdk和maven详解
java·linux·maven
亚林瓜子1 天前
在amazon linux 2023上面源码手动安装tesseract5.5.1
linux·运维·服务器·ocr·aws·ec2
爱学习的大牛1231 天前
Ubuntu 24.04 安装 FreeSWITCH 完整教程
linux·freeswitch