目录
原文: http://blog.gqylpy.com/gqy/374
@(Ansible之playbook剧本)
ymal:
- 列表:-
- 字典:key-value
- 文件后缀名:yml
ansible-playbook 命令格式:
- -C:--check 干跑,不会执行
- -f:FORKS 并发执行
- --syntax-check:语法检查
- --list-hosts:列出主机列表
基本用法
test.yml剧本文件内容如下:
sts: db # 指定主机
remote_user: root # 指定用户
tasks: # 任务列表
- name: create_user # 任务1
user: name=user01
- name: create_group # 任务2
group: name=group01
运行命令:ansible-playbook test.yml
当所有的机器都执行完第一个任务后才会执行第二个任务。
一个文件内可以有多个剧本,剧本与剧本之间用空格隔开。
传参使用
- hosts: db
remote_user: root
tasks:
- name: create_user{{ user }} # !
user: name={{ user }} # !
指定命令:ansible-playbook -e user=user01 test.yml
其它传参方式
在/etc/ansible/hosts文件中传参,如下示例:
[db] 9.0.0.2 user=user02 # user=user02指定参数 9.0.0.3 user=user03
在 hosts 文件中这样写 [groupname:vars]
在 playbook 文件中通过 vars 来指定参数
通过 register 注册传参,使用的时候要用参数的 .stdout 值
条件判断 when
只在满足某个条件后才执行某个任务,基本格式如下:
- hosts: db
remote_user: root
tasks:
- name: 任务1
动作:动作1
when: 条件1
- name: 任务2
动作: 动作2
when: 条件2
示例
test.yml剧本如下:
- hosts: db remote_user: root tasks: - name: create_user user: name=user01 when: num == '1' - name: create_group group: name=group01 when: num == '2'
执行命令:
# 当指定num='1'时,则执行create_user任务 ansible-playbook -e num='1' test.yml # 当指定num='2'时,则执行create_group任务 ansible-playbook -e num='1' test.yml
我们一般都使用收集到的信息变量来做判断,很少使用变量做判断,见下面。
收集被管控机信息
收集命令:
ansible db -m setup
- ansible_all_ipv4_addresses: 所有ipv4的地址
- ansible_all_ipv6_addresses: 所有ipv6的地址
- ansible_architecture: 系统架构
- ansible_data_time: 系统时间
- LANG: 系统语言
- ansible_default_ipv4: 默认的ipv4的地址
- sda: 磁盘信息
- ansible_distribution_file_path: 系统的家族
- ansible_distribution_major_version: 系统版本
- ansible_domain: 所在的域
- ansible_env: 环境变量
- ansible_hostname: 主机名,简写
- ansible_lvm: 磁盘lvm信息
- ansible_os_family: 系统的家族信息
- ansible_processor_cores: CPU核心数
- ansible_processor_count: CPU的颗数
- ansible_processor_vcpus: CPU的个数
- ansible_python: Python信息
根据被管控机的信息来做判断
test.yml文件如下:
- hosts: db remote_user: root tasks: - name: create_user user: name=user01 when: ansible_processor_vcpus==1 - name: create_group group: name=group01 when: ansible_processor_vcpus==2
执行命令:
ansible-playbook test.yml
还可以像这样取字典内的值:when ansible_python.version.major==1
标签 tags
- hosts: db
remote_user: root
tasks:
- name: start_firewalld
service: name=firewalld state=started
tags: start
模板 template
- hosts: db
remote_user: root
tasks:
- name: copy_file
template: dest=/etc/yum.conf src=yum.conf.j2
# src可以使用相对路径,在当前目录的templates目录里面
循环 with_item
基本用法如下:
- hosts: db
remote_user: root
tasks:
- name: create_user
user: name={{ item }}
with_items:
- user001
- user002
- user003
# 这里将创建3个用户
循环嵌套:
- hosts: db
remote_user: root
tasks:
- name: create_user
user: name={{ item.name }} group={{ item.group }}
with_items:
- {name: user001, group: group001}
- {name: user002, group: group002}
- {name: user003, group: group003}
handlers
如果 tasks 下的任务执行成功,则执行 handlers 下的任务,否则不执行:
- hosts: db
remote_user: root
tasks:
- name: create_user
user: name=user03
handlers:
- name: test_handlers
shell: echo "create user is ok." > /tmp/text.txt