文章目录

  • 前言
  • Playbook
  • 实验
  • 源码

前言

Playbook 是 Ansible “任务书”,它采用了 YAML 语法,学习 Ansible 以及前置配置请移步:Ansible的原理与配置

Playbook

扩展名:.yml / .yaml 格式:严格的缩进语法,两个空格(建议不用 Tab);采用键值对格式 开头:--- 正文:(以 play 列表的形式定义 Playbook)         项目:- 项目         一个 play 下可以对应多个任务(tasks)         键值对之间需要有空格隔开 末尾:...(一般不写)若有任务执行失败,其后任务不再执行每个 play 前会默认加一条任务:收集事实(Gathering Facks)

最简单的 Playbook 的正文部分包括的键有:play名(name)、主机或主机组(hosts)、任务列表(tasks); 一个任务列表包括:任务名(name)、模块名、模块相关参数。 play名、任务名、列表前必须加-+空格

下面以装包为例写一个Playbook:

---
- name: install packages	# 名字随便起
  hosts: WebServers			# 这个主机(组)必须写在清单里(inventory)
  tasks:					# 任务列表,一个键对应多个值
    - name: install httpd and firewalld packages
      yum:					# yum 是一个 ansible 模块
        name:				# 这里的 name 是 yum 模块的一个参数(包名)
          - httpd			# 这里有两个包,可以以列表形式列出,也可以分别写两个任务(其他模块不一定可以如此列出)
          - firewalld
        state: latest		# yum 的参数,指定软件包的状态(最新)

查看包相关信息:ansible-doc 包名 检查Playbook语法:ansible-playbook 文件名.yml --syntax-check 空执行:ansible-playbook 文件名.yml -C / ansible-playbook 文件名.yml -check 执行Playbook:ansible-playbook 文件名.yml

实验

任务: 给 web主机组 写一个 Playbook,该 Playbook 有两个 play,第一个 play 可以保证在 web主机组 上安装 httpd 和 php,确保 web主机组 的 /var/www/html/ 目录下面有一个文件为 index.php,内容显示 phpinfo 界面; 该 Playbook 里面的第二个 play 用于测试该 web 主机组的 web 服务能否被成功访问 index.php 内容。

  1. 环境配置 前置环境配置在 Ansible的原理与配置 有详细描述,包括 IP 、DNS 解析、免密SSH、免密sudo等本文只对清单、配置文件、Playbook做以详细描述 以 class 的身份创建工作目录:mkdir /home/class/web
  2. ansible playbook 向文件写入内容 ansible playbook的格式_php

  3. 编写清单:vim inventory
  4. ansible playbook 向文件写入内容 ansible playbook的格式_php_02

  5. 编写配置文件:vim ansible.cfg
  6. ansible playbook 向文件写入内容 ansible playbook的格式_centos_03

  7. 编写 Playbook:vim web.yml(文件名随便起)文末的 ~ 是 vim 特色,表示空行,与 Playbook 无关httpd 服务需要重启(restarted)而不是开启(started),因为每次修改完服务配置后需要重启,新增能加的 PHP 配置即应如此。started 不能达到重启的效果
  8. 检查语法:ansible-playbook web.yml --syntax-check 执行:ansible-playbook web.yml 可以用命令行来访问一下:curl node12

源码

Ansible清单:

master

[web]
node12
node13

Ansible配置文件:

[defaults]
inventory=./inventory
remote_user=student
ask_pass=false

[privilege_escalation]
become=true
become_method=sudo
become_user=root
become_ask_pass=false

Playbook:

---
# The first play
- name: Build a Web site
  hosts: web
  tasks:
    - name: Install the httpd php package
      yum:
        name:
          - httpd
          - php
        state: latest
    - name: Create an index.php page
      copy:
        content: "<?php\nphpinfo();\n"
        dest: /var/www/html/index.php
    - name: Delete the index.html page
      file:
        path: /var/www/html/index.html
        state: absent
    - name: Add a firewall rule
      firewalld:
        service: http
        state: enabled
        permanent: true
        immediate: true
    - name: Restart on the httpd service
      service:
        name: httpd
        state: restarted
        enabled: yes

# The second play
- name: URL testing
  hosts: master
  tasks:
    - name: Connect to node12 web server
      uri:
        url: http://node12
    - name: Connect to node13 web server
      uri:
        url: http://node13