Ansible-PlayBook剧本详细操作过程(格式 变量 命令模块操作)

Ansible-PlayBook简介

playbook是一个非常简单的配置管理和多主机部署系统。可作为一个适合部署复杂应用程序的基础

playbook可以定制配置,可以按指定的操作步骤有序执行,支持同步和异步方式

playbook配置文件使用YAML语法,YAML文件的扩展名通常为.yaml或.yml。具有简洁明了、结构清晰等特点。playbook配置文件类似于shell脚本,是一个YAML格式的文件,用于保存针对特定需求的任务列表。上面介绍的ansible命令虽然可以完成各种任务,但是当配置一些复杂任务时,逐条输入就显得效率非常低下了。更有效的方案是在playbook配置文件中放置所有的任务代码,利用ansible-playbook命令执行该文件,可以实现自动化运维

Ansible-PlayBook-核心元素

  • hosts:任务的目标主机,多个主机用冒号分隔,一般调用/etclansible/hosts中的分组信息
  • remote_user:远程主机上,运行此任务的默认身份为root
  • tasks:任务,即定义的具体任务,由模块定义的操作列表
  • handlers:触发器,类似tasks,只是在特定的条件下才会触发的任务。某任务的状态在运行后为changed时,可通过“notify"通知给相应的handlers进行触发执行
  • roles:角色,将hosts剥离出去,由tasks、handlers等所组成的—种特定的结构集合

Ansible-PlayBook格式注意事项

  • playbook由YMAL语言编写。YAML参考了其他多种语言,包括: XML、C语言、Python、Perl等。MAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写
  • 通过"来代表项,通过冒号“:“来分隔键和值,整个文件以”—“开始并以”.…."结束
  • 所有的"-"和“:"后面均由空格,而且要严格注意缩进和对齐,否则语法可能能会报错
  • 每次在执行playbook文件之前,一定要使用"-C"选项来进行预测试。该选项会执行一遍playbook文件,但不会对目标主机进行任何更改,若语法有错或目标主机缺少某个文件,都将报错提示

关于 YAML

  • YAML是一种非标记语言。是用来写配置文件的语言,非常简洁和强大
  • YAML语法和其他语言类似,也可以表达散列表、标量等数据结构
  • 结构通过空格来展示;序列里配置项通过 - 来代表;Map里键值用:来分隔;YAML的扩展名为yaml

基本语法规则

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格
  • 缩进时不允许使用Tab键,只允许使用空格

YAML支持的数据结构

  • 对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence)/列表((list)
  • 纯量:单个的、不可再分的值

Ansible-PlayBook示例

Ansible 自动化运维原理介绍+命令模块详细操作过程
安装nginx服务,安装完成后并启动nginx 自启操作

[root@master ~]# vi bbb.yml 
- hosts: master
  remote_user: root
  tasks:
    - name: nginx
      yum: name=nginx
    - name: started nginx
      service: enabled=true name=nginx state=started

检查语法

[root@master ~]# ansible-playbook --syntax-check bbb.yml 

playbook: bbb.yml

重启bbb.yml

[root@master ~]# ansible-playbook  bbb.yml 
PLAY [master] ************************

TASK [Gathering Facts] ************************************************************
ok: [20.0.0.3]

TASK [nginx] **********************************************************************
changed: [20.0.0.3]

TASK [started nginx] **************************************************************
changed: [20.0.0.3]

PLAY RECAP ************************************************************************
20.0.0.3                   : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

注:切记不要用Ted键,用空格符 ,格式特别重要
在这里插入图片描述
查看master的nginx安装没有与运行中?

[root@master ~]# ansible master  -a "systemctl status nginx"
20.0.0.3 | CHANGED | rc=0 >>
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since 四 2021-01-14 09:31:09 CST; 1 day 2h ago

Handlers案例

介绍

  • Handlers也是一些task的列表,和一般的task并没有什么区别
  • 是由通知者进行的notify,如果没有被notify,则Handlers不会执行,假如被notify了,则Handlers被执行

注:不管有多少个通知者进行了notify,等到play中的所有task执行完成之后,handlers也只会被执行一次

跟node节点安装httpd服务,handlers下发任务notify执行任务重启服务


- hosts: node
  remote_user: root
  tasks:
   - name: httpd
     yum: name=httpd state=latest
     notify:
     - restart httpd
  handlers:
   - name: restart httpd
     service: name=httpd state=restarted

在这里插入图片描述

引入变量案例

给20.0.0.4删除httpd服务

- hosts: 20.0.0.4
  remote_user: root
  vars:
    - aaa: httpd
  tasks:
    - name: remove httpd
      yum: name={{aaa}} state=absent

在这里插入图片描述
查看node节点httpd服务开启没有?在这里插入图片描述
通过 ansible 命令传递变量值案例

给20.0.0.4设置用户user=lisi

- hosts: 20.0.0.4
  remote_user: root
  vars:
    - aaa:
  tasks:
    - name: add new user
      user: name={{aaa}}

在这里插入图片描述
ansible 命令传递变量值

ansible-playbook aaa.yml -e "aaa=lisi"

在这里插入图片描述
直接引用一些变量案例

[root@master ~]# vi o.yaml
 - hosts: all
   remote_user: root
   tasks:
    - name: copy file
      copy: content="{{ansible_all_ipv4_addresses}}" dest=/opt/addr.txt
[root@master ~]# ansible 20.0.0.4 -a "cat /opt/addr.txt"
20.0.0.4 | CHANGED | rc=0 >>
["192.168.122.1", "20.0.0.4"]

引用主机变量案例

[root@master ~]# vi /etc/ansible/hosts
[node]
20.0.0.4 number="66666"      # number 的值为 66666
- hosts: 20.0.0.4
  remote_user: root
  tasks:
    - name: vopy  number
      copy: content="{{number}}" dest=/opt/a.txt
~                                                 

在这里插入图片描述
验证

[root@master ~]# ansible 20.0.0.4 -a "cat /opt/a.txt"
20.0.0.4 | CHANGED | rc=0 >>
66666
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值