Ansible之playbook剧本-1

简介: Ansible之playbook剧本

一、playbook概述


1.1 playbook 介绍

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


1.2 playbook 组成部分

  • Tasks:任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行
  • Variables:变量
  • Templates:模板
  • Handlers:处理器,当changed状态条件满足时,(notify)触发执行的操作
  • Roles:角色;将任务分类执行,彼此之间互不干扰


二、playbook 示例


2.1 playbook 启动及检测

//运行playbook
ansible-playbook 文件名.yaml
//补充参数:
-k(–ask-pass):用来交互输入ssh密码
-K(-ask-become-pass):用来交互输入sudo密码
-u:指定用户
ansible-playbook 文件名.yaml --syntax-check    #检查yaml文件的语法是否正确
ansible-playbook 文件名.yaml --list-task       #检查tasks任务
ansible-playbook 文件名.yaml --list-hosts      #检查生效的主机
ansible-playbook 文件名.yaml --start-at-task='install httpd'     #指定从某个task开始运行

2.2 实例一

vim test1.yaml
---
#yaml文件以---开头,以表明这是一个yaml文件,可省略
- name: first playbook
#定义一个play的名称,可省略
  gather_facts: false    
  #设置不进行facts信息收集,这可以加快执行速度,可省略
  hosts: webservers    
  #指定要执行任务的被管理主机组,如多个主机组用冒号分隔
  remote_user: root    
  #指定被管理主机上执行任务的用户
  tasks:     
  #定义任务列表,任务列表中的各任务按次序逐个在hosts中指定的主机上执行
   - name: test connection    
   #自定义任务名称
     ping:     
     #使用 module: [options] 格式来定义一个任务
   - name: disable selinux
     command: '/sbin/setenforce 0'    
     #command模块和shell模块无需使用key=value格式
     ignore_errors: True     
     #如执行命令的返回值不为0,就会报错,tasks停止,可使用ignore_errors忽略失败的任务
   - name: disable firewalld
     service: name=firewalld state=stopped    
     #使用 module: options 格式来定义任务,option使用key=value格式
   - name: install httpd
     yum: name=httpd state=latest
   - name: install configuration file for httpd
     copy: src=/opt/http.conf dest=/etc/httpd/conf/http.conf    
     #这里需要一个事先准备好的/opt/http.conf文件
     notify: "restart httpd"    
     #如以上操作后为changed的状态时,会通过notify指定的名称触发对应名称的handlers操作
   - name: start httpd service
     service: enabled=true name=httpd state=started
  handlers:     
  #handlers中定义的就是任务,此处handlers中的任务使用的是service模块
   - name: restart httpd    
   #notify和handlers中任务的名称必须一致
     service: name=httpd state=restarted
##Ansible在执行完某个任务之后并不会立即去执行对应的handler,而是在当前play中所有普通任务都执行完后再去执行handler,这样的好处是可以多次触发notify,但最后只执行一次对应的handler,从而避免多次重启。

0328eddaa3af48f4bc053cf3f4e0cca2.png

e9f2ef8fe74b467eaa0d3a2dad271ac7.png


playbook检测


eac9fe3d5be840eca8dc2152af667a6b.png

c0de5a8d3ac14686893d364b81f5822a.png


2.3 vars 定义、引用变量

vim test2.yaml
- name: second playbook
  hosts: dbservers
  remote_user: root
  vars:                 #定义变量
   - groupname: mysql   #格式为 key: value
   - username: nginx
  tasks:
   - name: create group
     group: name={{groupname}} system=yes gid=306    #使用 {{key}} 引用变量的值
   - name: create user
     user: name={{username}} uid=306 group={{groupname}} 
   - name: copy file
     copy: content="{{ansible_default_ipv4}}" dest=/opt/vars.txt    #在setup模块中可以获取facts变量信息
ansible-playbook test1.yaml -e "username=nginx"     #在命令行里定义变量

e4d296f3c8004190937eb1a0753a2e7f.png

6335871bd5dc46c195fb54146eee7d45.pngbd45994510ee4287a92d4b4b044055fc.png


2.4 指定远程主机sudo切换用户

- hosts: dbservers
  remote_user: zhangsan            
  become: yes                  #2.6版本以后的参数,之前是sudo,意思为切换用户运行
  become_user: root              #指定sudo用户为root
执行playbook时:ansible-playbook test1.yml -K <密码>

2.5 when条件判断

在Ansible中,提供的唯一一个通用的条件判断是when指令,当when指令的值为true时,则该任务执行,否则不执行该任务。


when一个比较常见的应用场景是实现跳过某个主机不执行任务或者只有满足条件的主机执行任务


vim test3.yaml
- hosts: all
  remote_user: root
  tasks:
   - name: shutdown host 
     command: /sbin/shutdown -r now
     when: ansible_default_ipv4.address == "192.168.147.106"      #when指令中的变量名不需要手动加上 {{}}
     when: inventory_hostname == "<主机名>"
ansible-playbook test3.yaml

10d1f0e19ca840fd9f45e0865ea00251.png1cca68d26db744bbbb9719d1aeff3df7.png

d7d89919cdbd4b99ae8dbf074944b4c5.png


55f699cd28ed431aaa8d1f5a98631370.png


目录
相关文章
|
8月前
Ansible之playbook剧本-3
Ansible之playbook剧本
47 0
|
8月前
|
Python
Ansible之playbook剧本-2
Ansible之playbook剧本
33 0
|
9月前
|
运维 关系型数据库 应用服务中间件
【运维知识进阶篇】Ansible自动化运维-PlayBook详解
【运维知识进阶篇】Ansible自动化运维-PlayBook详解
128 0
|
10月前
|
应用服务中间件 Linux 数据安全/隐私保护
ansible:playbook学习笔记
ansible:playbook学习笔记
98 0
|
11月前
|
Shell 网络安全 开发工具
|
12月前
|
运维 监控 应用服务中间件
自动化运维工具-Ansible的Playbook的使用
自动化运维工具-Ansible的Playbook的使用
170 0
|
应用服务中间件 nginx
Ansible之Playbook(二)
Ansible之Playbook(二)
79 0
|
Shell Linux Python
Ansible之Playbook(一)
Ansible之Playbook
90 0
Ansible之Playbook(一)
|
7月前
|
运维 Shell Linux
Ansible自动化运维工具之常用模块使用实战(5)
Ansible自动化运维工具之常用模块使用实战(5)
|
9月前
|
网络协议 网络安全
Ansible模块介绍——防火墙模块
Ansible模块介绍——防火墙模块
145 0