第三节:Ansible剧本

Ansible 的 Playbook模式

一、playbook 概述

1.1、什么是playbook

playbook 称之为剧本,故名思意,就是将要做的事/流程实现编排好,要具体执行任务的就是,就照着剧本排练好的流程执行就行了
剧本是ansible的精髓所在。

1.2 为何要用playbook

简单的任务用ad-hoc命令行模式就行,复杂的任务还是要用playbook,playbook还有很多命令行模式没有的高级功能,接下来我们来一一介绍

1.3 playbook的构成

一个playbook需要按照yaml格式组织到文件中,playbook是由一个或多个 play 组成的列表。
play由以下部分构成

file

  • 1、Target Section:
    • hosts:用于指定在哪些主机上运行 play
    • name:当前play的名字/描述,可以省略
    • remote_user:用于指定在远程主机上,以哪个用户的身份执行任务
    • 其他…
  • 2、Variable Section:定义运行 play 时,使用的变量
  • 3、Task Section:定义要在远程主机上运行的任务列表,可以包含多个task
    • name:任务的名字。用来描述任务是做什么的
    • ‘module: options’:调用的 module 和传递给 module 的参数
    • notify:用于指定通知哪些 handler
      • 需要注意的是:默认情况下,仅在任务执行成功,并且远程主机发生变动的情况下,才会执行 notify
    • 其他…

执行剧本

ansible-playbook --syntax-check  a.yaml # 检查语法
ansible-playbook -C a.yaml  # 通过-C选项可以测试playbook的执行情况,但不会真的执行:
ansible-playbook a.yaml -vv # 执行并打印任务运行结果以及任务的配置信息

打印详细信息

-v:打印任务运行结果
-vv:打印任务运行结果以及任务的配置信息
-vvv:包含了远程连接的一些信息

二、YAML 语法

语法 描述
缩进 YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成, 不能使用TAB
冒号 以冒号结尾的除外,其他所有冒号后面所有必须有空格
短横线 表示列表项,使用一个短横杠加一个空格,多个项使用同样的缩进级别作为同一列表
- 中国:
  上海:
  北京:
    - 朝阳
    - 昌平
    - 海淀

三、playbook实战

3.1、环境准备

准备环境,后续试验就以其作为背景展开

主机 IP 身份
m01 192.168.71.11 控制端
lb01 192.168.71.12 受控端
nfs 192.168.71.13 受控端
web01 192.168.71.14 受控端
web02 192.168.71.15 受控端
db01 192.168.71.16 受控端

在控制端添加/etc/hosts

192.168.71.12 lb01
192.168.71.13 nfs
192.168.71.14 web01
192.168.71.15 web02
192.168.71.16 db01

3.2.配置主机清单

[root@m01 ~]# cat /etc/ansible/hosts 
[lb]
lb01 ansible_ssh_pass='1'

[nfs_server]
nfs ansible_ssh_pass='1'

[web_group]
web01 ansible_ssh_pass='1'
web02 ansible_ssh_pass='1'

[db_server]
db01 ansible_ssh_pass='1'

[www:children]
lb
nfs_server
web_group
db_server

[nginx:children]
lb
web_group

3.3 创建并切入工作目录

mkdir /workspace
cd /workspace

3.4.编写base.yml

[root@m01 workspace]# cat base.yml 
- hosts: all
  tasks:
    - name: Stop Selinux
      selinux:
        state: disabled

    - name: Stop Firewalld
      systemd:
        name: firewalld
        state: stopped

    - name: Create www Group
      group:
        name: www
        gid: 1666
        state: present

    - name: Create www User
      user:
        name: www
        uid: 1666
        group: www
        shell: /sbin/nologin
        create_home: false
        state: present

执行剧本

[root@m01 workspace]# ansible-playbook base.yml 

3.5 部署nfs剧本

[root@lb workspace]# cat nfs.yaml 
- hosts: nfs_server
  tasks:
    - name: Install nfs-util
      yum:
        name: nfs*
        state: present

    - name: mkdir /data
      file:
        path: "/data"
        state: directory

    - name: Config nfs
      copy:
        content: "/data 192.168.71.0/24(rw,sync,all_squash)"
        dest: /etc/exports

    - name: Start nfs-server
      systemd:
        name: nfs-server
        state: restarted
        enabled: true

执行剧本

[root@m01 lnmp]# ansible-playbook nfs.yml 

联系管理员微信tutu19192010,注册账号

上一篇
下一篇
Copyright © 2022 Egon的技术星球 egonlin.com 版权所有 帮助IT小伙伴学到真正的技术