ansible自动化运维工具——playbook

编写基本的 ansible playbook

1、playbook 介绍

playbook简介
playbook是ansible用于配置,部署,和管理被控节点的剧本。通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态。playbook就像Ansible控制器给被控节点列出的的一系列要做的事情,而被控节点必须要完成。
也可以这么理解,playbook 字面意思,即剧本,现实中由演员按照剧本表演,在Ansible中,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情。

Playbook使用场景
执行一些简单的任务,使用ad-hoc(调用各种模块,通过命令行来执行命令)命令可以方便的解决问题,但是有时一个设施过于复杂,需要大量的操作时候,执行的ad-hoc命令是不适合的,这时最好使用playbook,就像执行shell命令与写shell脚本一样,也可以理解为批处理任务,不过playbook有自己的语法格式。

playbook和shell脚本的不同:
ansinle的playbook在执行的过程中需要读取inventory清单并且读取配置文件,并且playbook有自己的语法格式。shell命令在执行的过程中不会读取清单。并且两者要完成的任务也是不一样的。

2.编写和运行 playbook

playbook由YAML(另一种标记语言,yet another markup language)语言编写。

yaml 格式通常以 yml 为扩展名,yaml 对于缩进量没有严格要求,但有两个基本原则:
1.处于同一层次结构中同一级别的数据元素必须具有相同的缩进量
2.如果项目属于其他项目的子项,其缩进量必须大于父项

下面是一些playbook编写的示例:

<1> 实施一个play

示例一:查看用户是否在目标主机上存在

1、查看指定用户westos的临时命令(在命令行中写):
ansible -m user -a "name=westos uid=1000 state=present" 192.168.0.109

2、将1中的命令改写为 playbook的模式:

 ---							#文档的开始标记
 - name: Configure User
   hosts: 192.168.0.109			#可选,但是建议使用 
   tasks: 
   		- name: Westos User
   		  user:
   		  		name:westos
   		  		uid:1000
   		  		state:present
...								 #结束标记(通常省略) 


 play 本身是一个键值对集合,同一 play 中的键应当使用相同的缩进量
 运行剧本:ansible-playbook user.yml

剧本内容:
在这里插入图片描述
运行结果:
在这里插入图片描述

示例二:安装 Apache

剧本内容:
---
- name: Setup Webserver 
  hosts: 192.168.0.109 
  tasks: 
  		- name: http installe
  	 	  yum: 
  	 	  		name: httpd 
  	 	  		state: latest 
...

剧本内容:
在这里插入图片描述
运行结果:
在这里插入图片描述

示例三:确保Apache和ftp服务开机启动

剧本内容:
--- 
- name: Enable Webserver 
  hosts: 192.168.0.109
  tasks: 
  	- name: Apache is enabled 
  	  service: 
  	  	name: httpd 
  	  	enabled: true 

	- name: Vsftpd is enabled 
	  service: 
	  	name: vsftpd 
	  	enabled: true 
... 

剧本内容:
在这里插入图片描述
运行结果:
在这里插入图片描述

示例四:安装、开启并修改apache的默认发布页面

剧本内容:

---
- name: Install and Start Apache
  hosts: 192.168.0.109
  tasks: 
    - name: Apache is present
      yum:
        name: httpd
        state: present

    - name: Change index.html
      copy:
        src: files/index.html			#apache的发布页面的来源文件(自己写的)
        dest: /var/www/html/index.html

    - name: Start Apache
      service:
        name: httpd
        state: started
        enabled: true
...

剧本内容:
在这里插入图片描述
运行结果:
在这里插入图片描述
playbook中的默认发布页面的来源文件:自己新建的文件
在这里插入图片描述
查看apache的默认发布页面时记得关闭192.168.0.109的防火墙:
在这里插入图片描述

实施playbook时一些注意事项

1、提高输出详细程度 :

ansible-playbook 默认输出不提供详细任务执行信息

-v参数提供详细过程,共四个级别:
 -v 	#显示任务结果 
 -vv 	#显示任务结果和任务配置
 -vvv 	#包含关于与受管主机的连接信息 
 -vvvv  #增加连接插件相关的额外详细程度选项(包括受管主机上用于执行脚本的用户及所执行的脚本) 

2、执行 playbool 前最好先进行语法检测

检测xxxxx.yml剧本是否有语法错误的命令:
ansible-playbook --syntax-check xxxxx.yml

在这里插入图片描述
3、执行空运行
空运行会报告执行这个 playbook 将会发生什么,但不会改变目标主机

ansible-playbook -C xxxxx.yml

<2> 实施多个 play

模板:

---
- name: first play
  hosts: 192.168.0.109
  tasks: 
    - name: first task
      yum:
        name: httpd
        status: present

    - name: second task
      service:
        name: httpd
        enabled: true

- name: second play
  hosts: 192.168.0.109
  tasks: 
    - name: first task
      service:
        name: maridb
        enabled: true
...

示例:

1、剧本内容:

---
- name: Enabled Firewalld		#第一个play,配置apache服务
 hosts: 192.168.0.109
 become: yes
 tasks: 					
   - name: apache and firewalld installed
     yum: 					#检测 httpd 是否安装和是否是最新版本
       name:
         - httpd 
         - firewalld
       state: latest

   - name: configure index.html
     copy:					#更改apache的默认发布页面
       content: "Welcome to apache!\n"
       dest: /var/www/html/index.html

   - name: firewalld enabled and running
     service:  				#检测防火墙是否开启并处于开机自启状态
       name: firewalld
       enabled: true
       state: started
       
   - name: firewalld permits httpd
     firewalld:				#检测防火墙是否允许apache服务
       service: http
       permanent: true
       state: enabled
       immediate: yes

   - name: httpd enabled and running
     service: 				#检测 httpd 是否开启和设置开机启动
       name: httpd
       enabled: true
       state: started


- name: test webserver				#第二个play,检测play是否配置正确
 hosts: 192.168.0.109
 become: yes			#下放权利
 tasks: 
   - name: connect web server
     uri:				#使用url命令去获取apache服务的链接
       url: http://192.168.0.109
       return_content: yes
       status_code: 200

2、检测该剧本是否有语法错误的命令:
ansible-playbook --syntax-check multi-play.yml

3、空运行
ansible-playbook -C multi-play.yml

4、运行
ansible-playbook multi-play.yml
ansible-playbook -v multi-play.yml	#显示细节

剧本内容:
在这里插入图片描述
执行结果:
在这里插入图片描述
在这里插入图片描述

3. playbook 语法变化

<1> yaml 注释

# This is a YAML comment 
some data # This is also a YAML comment

在这里插入图片描述

<2> yaml 字符串的定义

三种表达方式:
this is a string		#直接写字符串
'this is a string'		#单引号
"this is a string"		#双引号

结束!!!

猜你喜欢

转载自blog.csdn.net/weixin_46138661/article/details/105603048