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. 复制文件 |

相关推荐
baihb102432 分钟前
Jenkins 构建流水线
运维·jenkins
BUG 40437 分钟前
LINUX--shell
linux·运维·服务器
菜鸟小白:长岛icetea43 分钟前
Linux零基础速成篇一(理论+实操)
linux·运维·服务器
深海的鲸同学 luvi44 分钟前
【HarmonyOS NEXT】hdc环境变量配置
linux·windows·harmonyos
dowhileprogramming1 小时前
Python 中的迭代器
linux·数据库·python
过过过呀Glik1 小时前
在 Ubuntu 服务器上添加和删除用户
linux·服务器·ubuntu
Tesseract_95273 小时前
ioctl回顾
linux
Java小白中的菜鸟3 小时前
centos7的磁盘扩容
linux·运维·服务器
黑客老陈4 小时前
面试经验分享 | 北京渗透测试岗位
运维·服务器·经验分享·安全·web安全·面试·职场和发展
橘子师兄4 小时前
如何在自己的云服务器上部署mysql
运维·服务器·mysql