文章目录
- 前言
- 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 内容。
- 环境配置 前置环境配置在 Ansible的原理与配置 有详细描述,包括 IP 、DNS 解析、免密SSH、免密sudo等本文只对清单、配置文件、Playbook做以详细描述 以 class 的身份创建工作目录:mkdir /home/class/web
- 编写清单:vim inventory
- 编写配置文件:vim ansible.cfg
- 编写 Playbook:vim web.yml(文件名随便起)文末的 ~ 是 vim 特色,表示空行,与 Playbook 无关httpd 服务需要重启(restarted)而不是开启(started),因为每次修改完服务配置后需要重启,新增能加的 PHP 配置即应如此。started 不能达到重启的效果
- 检查语法: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