Ansible自动运维工具之playbook

发布于:2024-05-08 ⋅ 阅读:(28) ⋅ 点赞:(0)

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