云计算自动化运维——Playbook语法讲解

本实验是基于前篇《云计算自动化运维——Ansible详解及inventory文件配置》实验环境下进行的,其中普通用户devops已经创建好,授权、免密都配置好了。实验在/home/devops/ansible目录下执行。
赋前篇链接:https://blog.csdn.net/CapejasmineY/article/details/103113503

一、认识playbook

1、playbook是什么?

playbooks是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。值得注意的是playbook是通过YAML格式来进行描述定义的。

2、playbook的核心元素

Tasks:任务,由模板定义的操作列表
Variables:变量
Templates:模板,即使用模板语法的文件
Handlers:处理器 ,当某条件满足时,触发执行的操作
Roles:角色

一、playbook语法

playbook由YMAL语言编写,以下为playbook常用到的YMAL格式:

  • 文件的第一行应该以"—"三个连字符开始,表明YMAL文件的开始。
  • 在同一行中,#之后的内容表示注释,类似于shell,python和ruby。
  • 大小写敏感
  • 使用缩进表示层级关系(只能空格不能使用tab),我一般使用两个空格分层。

YAML支持的数据结构:

  • YMAL中的列表元素以"-"开头然后紧跟着一个空格,同一个列表中的元素应该保持相同的缩进
    例:
---
#一个水果列表
- Apple
- Orange
- Mango
  • 一个字典是由一个简单的键:值的形式组成(这个冒号后面必须是一个空格):
---
#一位职工的信息
name: Example Develope
job: Developer
skill: Elite
  • 字典也可以使用缩进形式来表示
---
#一位职工的信息
{name: Example Develope,job: Developer,skill: Elite}

三、Playbook编写实例

实验环境:

虚拟机名称 ip 版本 角色
server1 172.25.1.1 7.5 ansible
server2 172.25.1.2 7.5 远程主机hosts
server3 172.25.1.3 7.5 远程主机hosts

设置编写环境:
yml文件对缩进格式要求比较严格,不得使用tab键,所有我们在devops用户家目录下编辑 .vimrc 文件,设置在yml文件中使用tab键时,tab键功能变为:缩进两个空格。方便文件中分离层级关系。

cd /home/devops
vim .vimrc
autocmd FileType  yaml  setlocal ai ts=2
apache服务

1、编写inventory主机文件

vim /home/devops/ansible/hosts

[localhost]
172.25.1.1

[test]
172.25.1.2

[db]
172.25.1.3

[webserver:children]
test
db

[webserver:vars]
http_port=80

2、编写install.yml文件,实现apache自动安装,及状态设置,在防火墙上添加服务,并测试。

mkdir /home/devops/ansible/apache  #创建一个目录,将所有文件放到一起
cd apache
vim install.yml  #编辑yml文件

---
- hosts: test
  vars:    #定义变量,只有次文件中test主机可使用
    - http_port:  80
  tasks:
    - name: install apache  #安装apache
      yum:
        name: httpd
        state:  present
    - name: config apache  #复制配置文件
      template:
        src:  /home/devops/ansible/apache/httpd.conf.j2   #j2模板
        dest: /etc/httpd/conf/httpd.conf
      notify: restart apache

    - name: start apache  #开启apache服务
      service:
        name: httpd
        state:  started
        
    - name: create index.html   #复制默认发布文件到指定路径
      copy:
        src:  /home/devops/ansible/apache/index.html
        dest: /var/www/html/index.html

    - name: start firewalld  #开启防火墙
      service:
        name: firewalld
        state:  started

    - name: config firewalld   #防火墙配置,添加服务
      firewalld:
        service:  http
        state: enabled
        permanent:  yes
        immediate:  yes
  handlers:   #触发器
    - name: restart apache
      service:
        name: httpd
        state:  restarted

- hosts: localhost  #测试
  vars:
      - http_port:  80  #重新定义变量
  become: false
  tasks:
    - name:  test apache
      uri:
        url: http://172.25.1.2:{{ http_port }}
        return_content: yes

3、提前在某台主机上安装httpd(为选择为的server1主机),复制需要的文件到yml文件中指定的路径,并修改格式。编写默认发布文件index.html。
在这里插入图片描述
在这里插入图片描述
修改配置文件httpd.conf.j2中的监听端口,设置变量更容易修改。
在这里插入图片描述
4、运行并测试
在这里插入图片描述
测试:
在这里插入图片描述
5、此时yml文件及hosts文件中都定义了端口变量,并且80,那么到底是哪个起作用呢?判断优先级?

去掉文件中后边的测试语句(对实验无影响)

(1)修改install.yml文件中的变量值,设置apache监听端口为8080,并在防火墙上添加端口。
修改ia监听端口后,防火墙不能识别httpd服务,必须在防火墙上添加。
在这里插入图片描述
在这里插入图片描述
(2)运行文件并测试
在这里插入图片描述在这里插入图片描述(3)注释掉install.yml文件中的端口变量
在这里插入图片描述(4)运行并测试结果
在这里插入图片描述在这里插入图片描述

由上边实验可以得出结论:ansible执行yml文件时,默认会读取yml文件及hosts文件中的变量。但是yml文件中定义的变量优先级高于hosts文件,只有当yml文件中未找到变量时,才会去读取hosts文件。

发布了170 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/CapejasmineY/article/details/103218902