Ansible自动运维工具之playbook

一.inventory主机清单

1.定义

Inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机组内。

2.变量

(1)主机变量
复制代码
[webservers]
192.168.10.14 ansible_port=22 ansible_user=root ansible_password=abc1234
(2)组变量
复制代码
[webservers:vars]			#表示为 webservers 组内所有主机定义变量
ansible_user=root
ansible_password=abc1234

[all:vars]					#表示为所有组内的所有主机定义变量
ansible_port=22
(3)组嵌套
复制代码
[nginx]
192.168.10.20
192.168.10.21
192.168.10.22

[apache]
192.168.10.3[0:3]

[webs:children]		#表示为 webs 主机组中包含了 nginx 组和 apache 组内的所有主机
nginx
apache

二.playbook基本内容

1.组成

(1)Tasks: 任务,即调用模块完成的某操作
(2)Variables: 变量
(3)Templates: 模板
(4)Handlers: 处理器,当某条件满足时,触发执行的操作
(5)Roles: 角色

2.基本语法

(1)大小写敏感
(2)使用缩进表示层级关系
(3)缩进时不允许使用tab键、只允许使用空格
(4)缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

|--------------------|----------------------|
| hosts | 定义节点,可以是组 |
| remote_user | 是你以什么用户身份进行登陆 |
| tasks | 是你的任务 |
| become:yes | 表示切换用户 |
| become_user: mysql | 表示切换到mysql用户,配合上一条使用 |
| - name: | 为下面执行的操作起名 |

3.数据结构

**(1)对象:**键值对的集合,又称为映射(mapping)/ 哈希(hashes)/ 字典(dictionary)
**(2)数组:**一组按次序排列的值,又称为序列(sequence)/ 列表(list)
**(3)纯量:**单个的、不可再分的值

三.playbook示例

复制代码
ansible-playbook xxx.yaml --syntax-check   			   		 #检查yaml文件的语法是否正确
ansible-playbook xxx.yaml --list-task     					 #检查tasks任务
ansible-playbook xxx.yaml --list-hosts     					 #检查生效的主机
ansible-playbook xxx.yaml --start-at-task='xxx'			     #指定从某个task开始运行
 
- hosts: webserver   #指定主机组,可以是一个或多个组
 
remote_user: root 	 #指定远程主机执行的用户名

|----------------------|--------------|
| 参数 | 说明 |
| -k(-ask-pass) | 用来交互输入ssh密码 |
| -K(-ask-become-pass) | 用来交互输入sudo密码 |
| -u | 指定用户 |
| -e | 引入变量值 |

1.为每个任务定义远程执行用户

复制代码
cd /opt
vim 1.yaml
 
- hosts: mysql
  remote_user: root
  tasks:
  - name: test connection
    ping:
    remote_user: mysql  
	
ansible mysql -m user -a 'name=mysql'
ansible mysql -m shell -a 'echo 123123 | passwd --stdin mysql'
ansible-playbook 1.yaml -k
123123

2.指定远程主机切换用户执行剧本

复制代码
vim 2.yaml
 
- hosts: mysql
  remote_user: root
  become: yes         
  become_user: mysql   
  tasks:
  - name: copy text
    copy: src=/etc/fstab dest=/home/mysql/fstab.bak
 
ansible-playbook 2.yaml

3.tasks忽略错误,强制返回成功

(1)Play的主体部分是task列表,task列表中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始。在运行playbook时 (从上到下执行),如果一个host执行task失败, 整个tasks都会停止。
(2)每一个task必须有一个名称 name,这样在运行playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。

错误示例:遇到错误task自动停止,apache服务不会继续安装

复制代码
vim 3.yaml
 
- hosts: webserver
  remote_user: root
  tasks:
  - name: stop selinux
    command: '/usr/sbin/setenforc 0'
  - name: install httpd
    yum: name=httpd
  - name: start httpd
    service: name=httpd state=started
 
ansible-playbook 3.yaml

加入ignore_errors: True 忽略错误,报错后继续执行

复制代码
vim 3.yaml
 
- hosts: webserver
  remote_user: root
  tasks:
  - name: stop selinux
    command: '/usr/sbin/setenforc 0'
    ignore_errors: True
  - name: install httpd
    yum: name=httpd
  - name: start httpd
    service: name=httpd state=started
                                                   
ansible-playbook 3.yaml                       

4.针对多个主机节点执行剧本

复制代码
vim 4.yaml
  
- hosts: webserver
  remote_user: root
  tasks:
  - name: remove httpd
    yum: name=httpd state=absent
 
- hosts: mysql
  remote_user: root
  tasks:
  - name: copy file
    copy: src=/etc/fstab dest=/opt/haha.txt

5.Handlers概述

Handlers也是一些task的列表, 和一般的task并没有什么区别。

是由通知者进行的notify,如果没有被notify,则Handlers不会执行,假如被notify了 ,则Handlers被执行不管有多少个通知者进行了notify,等到play中的所有task执行完成之后,handlers也只会被执行一次

相关推荐
有毒的教程2 天前
Ansible批量操作自动化完整教程:批量部署服务、配置同步、软件更新实战
运维·自动化·ansible
Hy行者勇哥7 天前
用Cursor智能编写Ansible/Terraform脚本,打通CI/CD链路
ci/cd·ansible·terraform
芷栀夏9 天前
飞牛NAS怎么部署Immich?家庭照片自动备份与远程访问教程
服务器·nginx·ansible
悠然南风20 天前
Ansible常见模块总结及LDAP Role 编写与调试
ansible
祺风挽楠1 个月前
ansible编辑
网络·ansible
芳心粽伙饭1 个月前
Ansible课后作业
ansible
烁3471 个月前
Ansible初识
ansible
烁3471 个月前
Ansible安装部署调试
ansible
烁3471 个月前
Ansible命令
ansible
小义_1 个月前
【Ansible】(三)基础配置与连接设置
云原生·ansible