Ansible-palybook学习

目录

一.playbook介绍

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

二.playbook格式

1.书写格式

  1. 文件的第一行应该以 "---" (三个连字符)开始,表明 YMAL 文件的开始。
  2. 在同一行中,# 之后的内容表示注释,类似于 shell,python 和 ruby。
  3. YMAL 中的列表元素以 "-" 开头然后紧跟着一个空格,后面为元素内容。
  4. 同一个列表中的元素应该保持相同的缩进。否则会被当做错误处理。
  5. play 中 hosts,variables,roles,tasks 等对象的表示方法都是键值中间以 ":"
    分隔表示,":" 后面还要增加一个空格

举例 安装挂载nfs服务

复制代码
[root@tdm1 playbook]# cat nfs.yml 
---
- hosts: web
  remote_user: root
  tasks: 
    - name: install nfs
      yum:  name=rpcbind,nfs-utils state=present
    - name: nfs configure file
      copy: src=./export.j2 dest=/etc/exports backup=yes
    - name: mkdir share dir
      file: path=/data state=directory owner=nfsnobody group=nfsnobody
    - name: start rpcbind
      service: name=rpcbind state=started enabled=yes  
    - name: start nfs
      service: name=nfs  state=started enabled=yes  
    - name: mount local
      mount: src=47.93.98.117:/data path=/mnt fstype=nfs state=mounted

文件名称应该以.yml结尾

hosts :使用 hosts 指示使用哪个主机或主机组来运行下面的 tasks ,每个 playbook 都必须指定 hosts ,hosts 也可以使用通配符格式。主机或主机组在 inventory 清单中指定,可以使用系统默认的 /etc/ansible/hosts,也可以自己编辑,在运行的时候加上 -i 选项,指定清单的位置即可。在运行清单文件的时候,--list-hosts 选项会显示那些主机将会参与执行 task 的过程中。
remote_user:指定远端主机中的哪个用户来登录远端系统,在远端系统执行 task 的用户,可以任意指定,也可以使用 sudo,但是用户必须要有执行相应 task 的权限。
tasks:指定远端主机将要执行的一系列动作。tasks 的核心为 ansible 的模块,前面已经提到模块的用法。tasks 包含 name 和要执行的模块,name 是可选的,只是为了便于用户阅读,不过还是建议加上去,模块是必须的,同时也要给予模块相应的参数。

使用ansible-playbook运行playbook文件,得到以下输出信息,输出内容为json格式,由不同颜色组成
绿色代表执行成功,系统保持原样
黄色代表系统状态发生改变
红色代表失败,显示错误输出

执行有三个步骤:

1.收集facts

  1. 执行tasks

  2. 报告结果

2.notify介绍

Ansible提供了notify 指令和handlers 功能。如果在某个task中定义了notify指令,当Ansible在监控到该任务 changed=1时,会触发该notify指令所定义的handler,然后去执行handler。所谓handler ,其实就是task ,无论在写法上还是作用上它和task都没有区别,唯一的区别在于hander是被触发而被动执行的,不像普通task一样会按流程正常执行

测试1
当检测到nfs的配置发生变化是,会重启nfs服务和重新挂载
notify和handlers中定义的名称必须一致

复制代码
[root@tdm1 playbook]# cat nfs.yml 
---
- hosts: web
  tasks: 
    - name: install nfs
      yum:  name=rpcbind,nfs-utils state=present
    - name: nfs configure file
      copy: src=./export.j2 dest=/etc/exports backup=yes
      notify: restart nfs   #当export.j2文件发生变化,就会由handlers来执行。
    - name: mkdir share dir
      file: path=/data state=directory owner=nfsnobody group=nfsnobody
    - name: start rpcbind
      service: name=rpcbind state=started enabled=yes  
    - name: start nfs
      service: name=nfs  state=started enabled=yes  
    - name: mount local
      mount: src=47.93.98.117:/data path=/mnt fstype=nfs state=mounted
      notify: client remount
  handlers: 
    - name: restart nfs     #名称和notify中的一致
      service: name=nfs  state=restarted 
    - name: client remount
      service: src=47.93.98.117:/data path=/mnt fstype=nfs state=remounted

#修改export.j2的内容
vim export.j2
/data 47.93.98.0/24(rw,all_squash)

执行剧本,观察

复制代码
#查看文件是否更改
[root@tdm1 playbook]# ansible web -m shell -a 'cat /etc/exports'
47.93.98.117 | CHANGED | rc=0 >>
/data 47.93.98.0/24(rw,all_squash)

测试2
修改nginx的文件,检测到文件被修改,handlers下面任务会被执行

复制代码
[root@tdm1 playbook]# cat nginx.yml 
---
- hosts: web
  tasks: 
    - name: install  nginx 
      yum:
        name: nginx
        state: installed
    - name: index file
      copy:
        content: "This is ansible test"
        dest: /usr/share/nginx/html/index.html
    - name: nginx configure file
      copy:
        src: ./nginx.conf.j2
        dest: /etc/nginx/conf.d/default.conf
        backup: yes
      notify: restart nginx    #文件被修改,重启nginx
    - name: start nginx
      service: 
        name: nginx
        state: started
  handlers:
    - name: restart nginx     #重启nginx
      service: 
        name: nginx
        state: restarted

#修改nginx.conf.j2的文件
vim nginx.conf.j2
server {
    listen       81;
    server_name  localhost;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

参考:https://blog.csdn.net/u012562943/category_6298590.html

相关推荐
七夜zippoe7 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy6488 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满8 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠8 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey9039 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技10 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀10 小时前
Linux环境变量
linux·运维·服务器
zzzsde10 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º12 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~12 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化