3. 实施 playbook#########

本章目标:编写基本的 ansible playbook

3.1 编写和运行 playbook

3.1.1 查看指定用户的临时命令

‘yaml 格式通常以 yml 为扩展名,yaml 对于缩进量没有严格要求,但是有两个基本原则’
‘1.处于同一层次结构中同一级别的数据元素必须具有相同的缩进量’
‘2.如果项目属于其他项目的子项,其缩进量必须大于父项’

ansible -m user -a "name=student uid=1000state=present" servera.lab.example.com

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_变量


改写为 playbook

[root@workstation ~]# cat user.yml

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_ansible_02

---                                     开头三个破折号,文档的开始标记
- name: Configure User            可写可不写,但是建议使用

...                      结尾三个省略号,结束标记(通常省略)

play 本身是一个键.值对集合,同一 play 中的键应当使用相同的缩进量
hosts 就是一个键, 后面的内容就是值。这是一个嵌套的集合。

playbook 执行:

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_vim_03

3.1.2 安装 apache

新建一个目录方便操作

mkdir /demo
vim webserver.yml

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_运维_04

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_运维_05


ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_变量_06


可见已经安装上了httpd服务。

3.1.3 确保 httpd 服务开机启动

vim service.yml

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_ansible_07


ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_vim_08


效果:

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_python_09

3.1.4提高输出详细程度

ansible-playbook 默认输出不提供详细任务执行信息。-v 参数提供,共四个级别:

  1. -v             #显示任务结果
  2. -vv            #显示任务结果和任务配置
  3. -vvv            #包含关于与受管主机的连接信息
  4. -vvvv           #增加连接插件相关的额外详细程度选项(包括受管主机上用于执行脚本             的用户及所 执行的脚本)

#执行 playbook 前最好进行语法验证

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_变量_10


#无语法错误

更改一下playbook:

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_vim_11

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_变量_12


有语法错误,会提示错误位置。

3.1.5执行空运行,只是预览结果

我们先移除71主机上的httpd服务:

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_vim_13


然后执行playbook;

ansible-playbook -C webserver.yml

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_python_14


ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_python_15


还是没有安装。可以看出。

‘空运行会报告执行这个 playbook 将会发生什么,但不会改变目标主机’

3.1.6安装、配置默认发布页并启动 apache

vim site.yml

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_vim_16

检测语法

ansible-playbook --syntax-check site.yml

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_vim_17


没有问题。

#创建配置文件和清单

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_python_18


#建立默认发布页面

cat files/index.html

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_运维_19


执行playbook:

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_vim_20


ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_运维_21


服务安装并且启用。

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_python_22


ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_vim_23


发布页面更改成功。#测试

curl 获取远程浏览器内容。

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_ansible_24

3.2 实施多个 play

模板:

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_变量_25


ansible-doc -l              #列出所有模块

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_变量_26


ansible-doc yum            #列出 yum 的用法和示例

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_变量_27


ansible-doc -s yum            #终端中输出 yum 模块中各参数的用法

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_运维_28

3.3 PLAYBOOK yaml语法变化

  1. yaml 的注释
  2. yaml 字符串
    直接输入
    this is a string
    单引号
    ‘this is a string’
    多引号
    “this is a string”

#练习
不关闭火墙更改远程主机页面并访问:

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_vim_29

vim webserver.yml
---
- name: Enable internet service
  hosts: web
  become: yes
  tasks:
          - name: apache and firewalld installed   # 检测firewalld和httpd是否为最新版  
            yum:
                    name:
                            - httpd
                            - firewalld
                    state: latest          

          - name: Configure index.html    # 配置默认发布页面
            copy:
                    content: "welcome to westos!\n"
                    dest: /var/www/html/index.html
                    
          - name: firewalld enabled and runing    # 检测firewalld是否开机自启并启用
            service:
                    name: firewalld
                    enabled: true
                    state: started
                    
          - name: firewald primits http           # 检测firewalld是否添加http服务
            firewalld:
                    service: http
                    permanent: true
                    state: enabled
                    immediate: yes
                    
          - name: httpd enabled and runing            # 检测httpd服务是否自启并运行
            service:
                    name: httpd
                    enabled: true
                    state: started
                    
- name: test webserver					本地主机测试访问
  hosts: localhost
  become: no
  tasks:
          - name: connect web server
            uri:
                    url: http://rhel71.com
                    return_content: yes
                    status_code: 200

#检测语法

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_ansible_30


#运行

ansible-playbook -v webserver.yml

ansible playbook 登录主机 执行shell 在ansible -playbook 调用shell 脚本_变量_31


可以看到返回了内容 welcome to westos

和状态码 200