3.自动化运维工具Ansible 之PlayBook

2022-03-07 分类:ansible 阅读(206) 评论(0)

孙富阳, 江湖人称没人称。多年互联网运维工作经验,曾负责过孙布斯大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型博客网站运维工作。

1.Ansible Playbook基本概述

1.什么是playbook

PlayBook 即”剧本”,”兵书”之意,PlayBook是由以下部分组成的
play : 定义的是主机的角色。(主角还是配角,找哪个明星)
task : 定义的是具体执行的任务。(角色的台词和动作)
playbook : 由一个或多个play(角色)组成,一个play(角色)可以包含多个task(台词,动作,大腕每集拍什么)。
简单理解为: 使用不同的模块完成一件事情
在 Ansible 中”剧本文件”是以yml结尾的文件。 在 SaltStack 中”剧本文件”是以sls结尾的文件。 但是语法,使用的都是 yaml 语法**

2.Ansible playbook与AD-Hoc的关系

1.PlayBook 功能比 ad‐hoc 更全,是对 ad‐hoc 的一种编排.
2.PlayBook 能很好的控制先后执行顺序, 以及依赖关系
3.PlayBook 语法展现更加的直观.
4.playbook 可以持久使用, ad‐hoc 无法持久使用.

2.Ansible Playbook语法书写格式

playbook是由yaml语法书写,结构清晰,可读性强,所以必须掌握yml基础语法

语法描述
缩进YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成, 不能使用tabs
冒号以冒号结尾的除外,其他所有冒号后面所有必须有空格。
短横线表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一列表。

1.下面我们一起来编写一个playbook文件

playbook起步
host: 对哪些主机进行操作
remote_user: 我要使用什么用户执行
tasks: 具体执行什么任务
###人生中第1个剧本 查询所有主机的主机
[root@mb01 ~]# vim /server/playbook/01_playbook.yml 
---
- name: shosh
  hosts: all
  tasks:
  - name: show
    command: hostname

2.执行playbook,注意观察执行返回的状态颜色

红色:表示有task执行失败,通常都会提示错误信息。
黄色:表示远程主机按照编排的任务执行且进行了改变。
绿色:表示该主机已经是描述后的状态,无需在次运行

3.Ansible Playbook练习实验

1.使用ansible搭建nfs服务

[root@mb01 ~]# cat /server/playbook/host.yml
---
- name: 服务端搭建nfs服务
  hosts: 172.16.1.51
  remote_user: root
  tasks:
    - name: 服务端安装nfs服务
      yum:
        name: nfs-utils
        state: installed
    - name: 书写配置文件
      copy:
        content: /data/ 172.16.1.0/24(rw,no_all_squash)
        dest: /etc/exports
        backup: yes
      notify:
        - nfs变化,重启nfs
    - name: 创建共享目录
      file:
        path: /data/
        state: directory
        owner: nfsnobody
        group: nfsnobody
        mode: 0755
    - name: 启动服务
      systemd:
        name: nfs
        state: started
        enabled: yes
    - name: 启动rcp
      systemd:
        name: rpcbind
        state: started
        enabled: yes
  handlers:
    - name: nfs变化,重启nfs
      systemd:
        name: nfs
        state: restarted
        enabled: yes
- name: 客户端挂载
  hosts: webs 
  remote_user: root
  tasks:
    - name: 安装nfs服务
      yum:
        name: nfs-utils
        state: installed
    - name: 执行挂载操作
      mount:
        src: 172.16.1.51:/data
        path: /mnt
        state: mounted
        fstype: nfs

2.使用ansible搭建rsyncd

编写剧本
[root@mb01 ~]# cat /server/playbook/rsync.yml 
---
- name: backup服务器搭建rsync服务
  hosts: backup
  tasks:
    - name: 安装rsync
      yum:
        name: rsync
        state: installed
    - name: 拷贝配置文件至backup服务端
      copy:
        src: /opt/rsyncd.conf
        dest: /etc/rsyncd.conf
        backup: yes
    - name: 创建用户组
      group:
        name: rsync
        gid: "666"
    - name: 创建用户
      user:
       name: rsync
       uid: "666"
       create_home: no
       shell: /sbin/nologin
       group: "666"
    - name: 创建配置文件指定的目录
      file:
        path: /backup
        state: directory
        owner: rsync
        group: rsync
    - name: 创建密码文件
      copy:
        content: rsync_backup:123456
        dest: /etc/rsync.pass
        mode: 0600
    - name: 启动rsync服务
      systemd:
        name: rsyncd
        state: started
        enabled: yes
- name: 客户端验证
  hosts: webs
  tasks:
    - name: 推送密码文件至rsync客户端
      copy:
        content: 123456
        dest: /etc/rsync.pass
        mode: 0600
    - name: 测试是否可以执行
      command: rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.pass
###在ansible管理端编写被管理端的配置文件
[root@mb01 ~]# cat /opt/rsyncd.conf 
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 300
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.pass
[backup]
comment = "backup dir by oldboy"
path = /backup

PS:ansibel-playbook命令

#检查语法
[root@mb01 ~]# ansible-playbook --syntax-check /server/playbook/rsync.yml
#测试执行
[root@mb01 ~]# ansible-playbook /server/playbook/rsync.yml -C
#执行
[root@mb01 ~]# ansible-playbook /server/playbook/rsync.yml

评论已关闭

登录

忘记密码 ?

切换登录

注册

鲁ICP备2021019243号-1