0%

Ansible Playbook入门篇

playbook 是由一组ansible调用module命令的集合,使用yaml语言编写,执行顺序自上而下;

1
命令格式:ansible-playbook test.yml

Playbook 组成

Target section: 定义将要执行playbook的远程主机组

  • name:执行过程中会打印出来变量的值
  • hosts:定义远程的主机组
  • user:执行该任务组的用户
  • remote_user: 与user一样,任选其一
  • sudo:如果设置为yes,执行该任务组的用户在执行任务的时候获取root权限
  • sudo_user:如果sudo设置为yes,user设置为user1,sudo_user设置为user2,那么user1会获取user2权限
  • connection:通过什么方式连接到远程主机,默认是ssh
  • gather_facts:除非明确定义不需要在远程主机上执行setup模块,否则会默认自动执行;不需要执行setup模块,需False该选项。

Variable section:定义playbook运行时需要使用的变量

  • vars:格式为“变量名称:变量值”
  • vars_files:将变量名称和变量值定义在一个文件中,调用该文件,文件格式为每行一个“变量名称:变量值”
  • vars_prompt:定义一个变量,通过交互方式让用户输入变量值

Task section:定义将要在远程主机上执行的任务列表

  • tasks: #三种写法如下
  1. 调用模块
    name: 定义名称
    action:模块名称 模块参数调用
  2. 直接使用模块
    name: 定义名称
    模块名称:调用方法
  3. 模块使用
    name:定义名称
    模块名称:
    模块参数调用

Handler section:定义task执行完成以后需要调用的任务
满足一下两点才能达到触发的效果,否则会不生效。

  1. 必须在tasks中使用notify调用
  2. 在notify中定义内容一定要和tasks中定义的 - name 内容一样

新建用户的示例

1
2
3
4
5
6
7
8
9
10
11
12
[root@vm00 ~]# cat test.yaml 
- name: "新建用户"
hosts: test
user: root
vars:
user: "user3"
password: "$1$01a9gEpb$nlv.OmSa1c4jDaGgeoDKi0" #加密后的密码,可以参考上篇文章中user模块使用
uid: "700"
tasks:
- name: "新建用户"
user: name="{{user}}" password="{{password}}" uid="{{uid}}"
# user: name="{{user}}" state=absent remove=yes #删除用户的话就使用这行
1
[root@vm00 ~]# ansible-playbook test.yaml

playbook

修改selinux,安装epel扩展包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@vm00 ~]# cat test2.yml
- hosts: test
vars:
packages: "epel-release"
tasks:
- name: "永久关闭selinux"
command: sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
- name: "安装epel扩展包"
yum: name={{packages}} state=present
notify:
- reboot system
handlers:
- name: reboot system
command: reboot

参考链接:http://breezey.blog.51cto.com/2400275/1757624