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也只会被执行一次

相关推荐
风清再凯1 天前
自动化工具ansible,以及playbook剧本
运维·自动化·ansible
IT乌鸦坐飞机1 天前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7
遇见火星14 天前
如何使用Ansible一键部署MinIO集群?
ansible
粥周粥14 天前
ANSIBLE
ansible
码农101号14 天前
Linux中ansible模块补充和playbook讲解
linux·运维·ansible
码农101号14 天前
Linux的Ansible软件基础使用讲解和ssh远程连接
ansible
烟雨书信15 天前
ANSIBLE运维自动化管理端部署
运维·自动化·ansible
碎碎-li15 天前
ANSIBLE(运维自动化)
运维·自动化·ansible
@donshu@18 天前
Linux运维-ansible-python开发-获取inventroy信息
linux·运维·ansible
Kendra91921 天前
Ansible
ansible