栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

自动化运维利器-Ansible-Playbook

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

自动化运维利器-Ansible-Playbook

一、 Ad-Hoc 的问题

通过对 AD-HOC 的学习,我们发现 AD-HOC 每次只能在被管理节点上执行简单的命令。

而日常工作中,我们往往面临的是一系列的复杂操作,例如我们有可能需要安装软件、更新配置、启动服务等等一系列操作的结合。此时再通过 AD-HOC 去完成任务就有些力不从心了。

在这种场景下,Ansible引进了 PLAYBOOK 来帮忙我们解决这样复杂问题。

二、 PlayBook是什么

Playbook 也通常被大家翻译成剧本。可以认为它是Ansible 自定义的一⻔语言(可以将 Playbook 比作Linux 中的 shell,而 Ansible 中的 Module 可以比作为 Linux 中的各种命令。)

三、 YAML 学习

PlayBook遵循YAML 的语法格式。因此在学习PlayBook之前,我们必须要先弄明白YAML 相关知识点。

1、YAML特点

YAML 文件

  • 以 # 为注释符
  • 以 .yml 或者.yaml 结尾
  • 以 - - - 开始 , 以 … 结束, 但开始和结束标志都是可选的
2、基本语法
  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时是使用Tab键还是使用空格一定要达到统一,建议使用空格。
  • 相同层级的元素必须左侧对⻬即可

YAML 支持的数据结构有三种

  • 字符串
  • 列表
  • 字典
2.1、字符串
---
# YAML 中的字符串可以不使用引号,即使里面存在空格的时候,当然了使用单引号和双引号也没有错。

this is a string
'this is a string'
"this is a string"

# YAML 中若一行写不完你要表述的内容的时候,可以进行折行。写法如下:
long_line: |
			Example 1
			Example 2
			Example 3
# 或者
long_line: >
		Example 1
		Example 2
		Example 3
...
2.2、列表
---
# 若熟悉 Python 的话,可以认为它就是Python中的List ,若熟悉 C 语言的话,可以认为它是 C 中的数组。
# 如何定义: 以短横线开头 + 空格 + 具体的值
- red
- green
- blue
- # 以上的值假如转换成 python 的 List 会是这样:# ['red', 'green', 'blue']
2.3、字典
---
# 若熟悉 Python 的话,可以认为它就是 Python 中的 Dict
# 如何定义: key + 冒号(:) + 空格 + 值(value), 即 key:value

name: Using Ansible
code: D1234

# 转换为 python 的 Dict# {'name': 'Using Ansibel', 'code': 'D1234'}...
2.4、混合结构
---class:  
		- name: stu1    
		  num: 001  
		- name: stu2    
		  num: 002  
		- name: stu3    
		  num: 003

# {'class': [{'name': 'stu1', 'num': 1},{'name':'stu2', 'num': 2},...]}
2.5、验证YAML 语法
//将YAML文件,通过Python的YAML模块验证,若不正确则报错。若正确则会输出YAML里的内容。

//注意使用时,一定确保安装了yaml软件包。

python -c 'import yaml,sys; printyaml.load(sys.stdin)' 
四、 Playbook 的编写 
4.1、常用属性 
  • name 属性,每个play的名字
  • hosts 属性, 每个play 涉及的被管理服务器,同ad-hoc 中的资产选择器
  • tasks 属性, 每个play 中具体要完成的任务,以列表的形式表达
  • become 属性,如果需要提权,则加上become 相关属性
  • become_user 属性, 若提权的话,提权到哪个用户上
  • remote_user属性,指定连接到远程节点的用户,就是在远程服务器上执行具体操作的用户。若不指定,则默认使用当前执行 ansible Playbook 的用户
4.2、一个完整剧本

根据上一小节中介绍的真实的属性,一个含有一个Play 的Playbook 应该是如下的样子

---
- name: the first play example  
  hosts: webservers  
  remote_user: root  
  tasks:
    - name: install nginx package      
      yum: name=nginx state=present    
    - name: copy nginx.conf to remote server      
      copy: src=nginx.conf dest=/etc/nginx/nginx.conf
    - name start nginx server
      service:
        name: nginx
        enabled:true
        state:started
4.3、tasks 属性中任务的多种写法
# 以启动 nginx 服务,并增加开机启动为例
# 一行的形式:
service: name=nginx enabled=true state=started
# 多行的形式:
service: name=nginx         
         enabled=true         
         state=started
# 多行写成字典的形式:
service:
   name: nginx  
   enabled: true  
   state: started
4.4、具有多个Play 的Playbook
---
- name: manage web servers  
  hosts: webservers  
  remote_user: root  
  tasks:    
    - name: install nginx package      
      yum: name=nginx state=present    
    - name: copy nginx.conf to remote server      
      copy: src=nginx.con fdest=/etc/nginx/nginx.conf    
    - name: start nginx server      
        service:        
          name: nginx        
          enabled: true        
          state: started
- name: manager db servers  
  hosts: db_servers  
  tasks:    
     - name: update database confg      
       copy: src=my.cnf dest=/etc/my.cnf
4.5、如何对Playbook 进行语法校验

下面校验的方法,只能校验PlayBook是否正确,而不能校验YAML文件是否语法正确。

[root@ansible ~]# ansible-playbook -i hosts myymal.yml --syntax-check

因为PlayBook 属于YAML 格式,我们同样可以使用检查YAML的语法格式的方法进行检查PlayBook的语法正确性。

[root@ansible ~]# python -c 'import yaml,sys; print yaml.safe_load(sys.stdin)' < myymal.yml
4.6、如何运行PlayBook
# ansible-playbook -i hosts myplaybook.yml
4.7、如何单步跟从调试PlayBook
// 执行Task中的任务,需要手动确认是否往下执行。
# ansible-playbook -i hosts myplaybook.yml --step
4.8、如何测试运行PlayBook

测试运行就是会执行完整个PlayBook ,但是所有Ta s k中的行为都不会在远程服务器上执行,所有执行都是模拟行为。

# ansible-playbook -i hosts myplaybook.yml -C
// -C为大写的字母 C
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/974352.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号