PLAYBOOK basis (b)

About a playbook

Using bivariate

Three Tags (tag)

Four flip-flop in conjunction with label tags handlers

Five conditional

Six cycle

七 include and roles

About a playbook

1.playbook是什么
	– playbook是ansible用于配置,部署和管理托管主机剧本,通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期状态
	– 也可以说,playbook字面意思即剧本,现实中由演员按剧本表演,在ansible中由计算机进行安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情
2.为什么要使用playbook
	– 执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但有时一个设施过于复杂时,执行ad-hoc命令是不合适的,最好使用playbook
	– playbook可以反复使用编写的代码,可以放到不同的机器上面,像函数一样,最大化利用代码,在使用ansible的过程中,处理的大部分操作都是在编写playbook
3.playbook语法格式
	– playbook由YAML语言编写,遵循YAML标准
	– 在同一行中,#之后的内容表示注释
	– 同一个列表中的元素应该保持相同的缩进
	– playbook由一个或多个play组成
	– play中hosts,variables,roles,tasks等对象的表示方法都是键值中间以": "分隔表示
	– YAML还有一个小的怪癖,它的文件开始行都应该是 ---,这是YAML格式的一部分,表明一个文件的开始
4.playbook构成
	– hosts: 定义将要执行playbook的远程主机组
	– vars: 定义playbook运行时需要使用的变量
	– tasks: 定义将要在远程主机上执行的任务列表
	– handlers: 定义task执行完成以后需要调用的任务
5.playbook执行结果
使用ansible-playbook运行playbook文件,输出内容为JSON格式,由不同颜色组成便于识别
	– 绿色代表执行成功
	– ***代表系统代表系统状态发生改变
	– 红色代表执行失败

Using bivariate

(1)变量的使用之直接调用变量
	vim user01.yml
	---
	- hosts: db
	  remote_user: root
	  vars:
	    username: lisi
	  tasks:               #task下的-name是说明
	    - name: useradd "{{username}}"
	      user:
		name: "{{username}}"
	    - name: change password       
	      shell: echo 456|passwd --stdin "{{username}}"
(2)变量的使用(密码变量+过滤器的用法)----解决密码明文的问题
	vim user01.yml
	---
	- hosts: db
	  remote_user: root
	  vars:
	    username: lisi
	  tasks:
	    - name: useradd "{{username}}"
	      user:
		name: "{{username}}"
		password: "{{'123'|password_hash('sha512')}}"

(3)变量的使用之变量参数
	(3.1)参数用json格式)
		#ansible-playbook user01.yml -e '{"username":"plj","pwd":"123qqq...A"}'
	(3.2)一个文件  传参yaml格式)
		---
		- hosts: cache
		  remote_user: root
		  vars:
		    username: lisi
		    pwd: 123
		  tasks:
		    - name: useradd "{{username}}"
		      user:
			name: "{{username}}"
			password: "{{pwd|password_hash('sha512')}}"
		#编写yaml格式语句             
		vim args.yaml
		---
		username: plj
		pwd: 123qqq...A                    
		ansible-playbook user01.yml -e @args.yaml

Three Tags (tag)

To the task definition specifies a call to a function module identifies just want to use them

修改Apache默认网页/端口及开机自启
vim user01.yml
	---
	- hosts: web
	  remote_user: root
	  tasks:
	    - name: install httpd
	      yum:
		name: httpd
		state: installed
	    - name: 更改默认端口
	      lineinfile:
		path: /etc/httpd/conf/httpd.conf
		regexp: '^Listen'
		line: 'Listen 8080'
	    - name: 修改默认首页
	      copy:
		src: /index.html
		dest: /var/www/html/
	      tags: defindex       
	    - name: 启动服务
	      service:
		name: httpd
		state: started
		enabled: yes
	#ansible-playbook httpd.yml -t defindex

Four flip-flop in conjunction with label tags handlers

更改配置文件重启服务
vim web.yml
	---
	- hosts: web
	  remote_user: root
	  tasks:
	    - copy:
		src: httpd.conf
		dest: /etc/httpd/conf/httpd.conf
		owner: root
		group: root
		mode: 0644
	      tags: httpconf   #标签
	      notify:           #触发
		- restart httpd
	  handlers:
	     - name: restart httpd
	       service:
		 name: httpd
		 state: restarted   

Five conditional

(1)when
	有些时候需要在满足特定的条件后再触发某一项操作,或在特定的条件下终止某个行为,这个时候需要进行条件判断,when正是解决这个问题的最佳选择,远程中的系统变量facts作为when的条件,可以通过setup模块查看
(2)register(保存一个操作的执行结果)
	有时候我们还需要更复杂的例子,如判断前一个命令的执行结果去处理后面的操作,这时候就需要register模块来保存前一个命令的返回状态,在后面进行调用
############
	vim load.yml
	---
	- hosts: web
	  remote_user: root
	  tasks:
	    - shell: uptime |awk '{printf("%.2f",$(NF-2))}'  #打印一分钟的负载
	      register: result  #保存上一条命令的执行结果到result中
	    - service:
		name: httpd
		state: stopped
	      when: result.stdout|float > 0.7   #stdout屏幕标准输出,转换成小数进行比较,当负载大于0.7时停止apache服务
##########测试效果
	(1)web主机上执行awk 'BEGIN{while(1){}}'
	(2)watch -n 1 uptime  #查看负载
	(3)管理主机上curl进行访问测试查看效果
######################################

Six cycle

##########with_items
	with_items是playbook标准循环,可以用于迭代一个列表或字典,通过{{ item }}获取每次迭代的值
#批量添加用户,设备不同的密码,并添加到不同的组
	vim user01.yml
	---
	- hosts: cache
	  remote_user: root
	  tasks:
	    - name: add user
	      user:
		name: "{{item.name}}"
		group: "{{item.group}}"
		password: "{{item.pwd|password_hash('sha512')}}"
	      with_items:
		-
		  name: zhangsan
		  group: ftp
		  pwd: zhd
		-
		  name: lisi
		  group: man
		  pwd: xj
		-
		  name: wangwu
		  group: daemon
		  pwd: 82hs
		-
		  name: sunxiao
		  group: adm
		  pwd: kj
		-
		  name: xx
		  group: root
		  pwd: a
####################################

七 include and roles

(1)include(包含的是文件)
	在编写playbook的时候随着项目越来越大,playbook越来越复杂,修改也很麻烦。这时可以把一些play、task 或handler放到其他文件中,通过include指令包含进来是一个不错的选择
(2)rules(包含的是文件夹)
	– ars:变量层
	– tasks:任务层
	– handlers:触发条件
	– files:文件
	– template:模板
	– default:默认,优先级最低

Guess you like

Origin blog.csdn.net/qq_44839276/article/details/91947188