Ansible-Playbook
剧本编写规范: pyyaml ——三点要求
- 合理的信息缩进 两个空格表示一个缩进关系
标题一
标题二
标题三
PS: 在ansible中一定不能用tab进行缩进
- 冒号的使用方法
hosts: 172.16.1.41
tasks:
yum: name=xx
PS: 使用冒号时后面要有空格信息
以冒号结尾,冒号信息出现在注释说明中,后面不需要加上空格
执行剧本:
第一个步骤: 检查剧本的语法格式
ansible-playbook –syntax-check rsync_server.yaml
第二个步骤: 模拟执行剧本
ansible-playbook -C rsync_server.yaml
第三个步骤: 直接执行剧本
ansible-playbook rsync_server.yaml
配置主机清单
第一种方式: 分组配置主机信息
[web]
172.16.1.7
172.16.1.8
172.16.1.9
[data]
172.16.1.31
172.16.1.41
操作过程
[root@m01 ansible-playbook]# ansible data -a “hostname”
172.16.1.31 | CHANGED | rc=0 >>
nfs01
172.16.1.41 | CHANGED | rc=0 >>
backup
[root@m01 ansible-playbook]# ansible web -a “hostname”
172.16.1.7 | CHANGED | rc=0 >>
web01
第二种方式: 主机名符号匹配配置
[web]
172.16.1.[7:9]
[web]
web[01:03]
第三种方式: 跟上非标准远程端口
[web]
web01:52113
172.16.1.7:52113
第四种方式: 主机使用特殊的变量
[web]
172.16.1.7 ansible_ssh_port=52113 ansible_ssh_user=root ansible_ssh_pass=123456
[web]
web01 ansible_ssh_host=172.16.1.7 ansible_ssh_port=52113 ansible_ssh_user=root ansible_ssh_pass=123456
第五种方式: 主机组名嵌入配置
[rsync:children] — 嵌入子组信息
rsync_server
rsync_client
[rsync_server]
172.16.1.41
[rsync_client]
172.16.1.31
172.16.1.7
[web]
web01
[web:vars] — 嵌入式变量信息
ansible_ssh_host=172.16.1.7
ansible_ssh_port=52113
ansible_ssh_user=root
ansible_ssh_pass=123456
变量
方式一:直接在剧本文件编写
vars:
test01: data01
test02: data02
方式二:在命令行中进行指定
ansible-playbook rsync.yaml -e test01=/data01,test02=/data02
方式三:在主机清单文件编写
[test]
test01=data01
test02=data02
在剧本中设置注册信息
– hosts: test
tasks:
– name: check server port
shell: netstat -lntup — 端口信息
register: get_server_port<–端口信息
– name: display port info
debug: msg={{ get_server_port.stdout_lines }}
显示进程信息,表示服务已经正常启动
PS: 设置变量不能有空格信息
获取内置变量方法:
ansible test -m setup -a “filter=ansible_hostname”
常见主机信息:
ansible_all_ipv4_addresses: 仅显示ipv4的信息。
ansible_devices: 仅显示磁盘设备信息。
ansible_distribution: 显示是什么系统。
ansible_distribution_major_version: 显示是系统主版本。
ansible_distribution_version: 仅显示系统版本。
ansible_machine: 显示系统类型,例:32位,还是64位
ansible_eth0: 仅显示eth0的信息。
ansible_hostname: 仅显示主机名。
ansible_kernel: 仅显示内核版本。
ansible_lvm: 显示lvm相关信息。
ansible_memtotal_mb: 显示系统总内存。
ansible_memfree_mb: 显示可用系统内存。
ansible_memory_mb: 详细显示内存情况。
ansible_swaptotal_mb: 显示总的swap内存。
ansible_swapfree_mb: 显示swap内存的可用内存。
ansible_mounts: 显示系统磁盘挂载情况。
ansible_processor: 显示cpu个数(具体显示每个cpu的型号)。
ansible_processor_vcpus: 显示cpu个数(只显示总的个数)。
循环
– name: create user
gather_facts: false
hosts: rsync_client
tasks:
– name: copy01
copy: src=/etc/{{ item.src }} dest={{ item.dest }} mode={{ item.mode }}
with_items:
– { src: ‘hosts’, dest: ‘/tmp/’, mode: ‘600’ }
– { src: ‘hostname’, dest: ‘/tmp/’, mode: ‘600’ }
– name: create user
hosts: rsync_client
vars:
createuser:
– www01
– www02
– www03
tasks:
– name: create user
user: name={{ item }} state=present
with_items: “{{ createuser }}”
错误忽略
默认playbook会检查命令和模块的返回状态,如遇到错误就中断playbook的执行
可以加入ignore_errors: yes忽略错误
#vim test06.yml
– hosts: rsync
remote_user: root
tasks:
– name: Ignore False
command: /bin/false
ignore_errors: yes
– name: touch new file
file: path=/tmp/test_ignore state=touch
标签
– hosts: rsync
ignore_errors: yes
remote_user: root
tasks:
– name: bad thing
command: ech 123
#ignore_errors: yes
tags: t1
– name: useradd
user: name=alice state=present
tags: t2
指定执行哪个标签任务:
ansible-playbook –tags=t2 xxx.yml
跳过指定标签任务:
ansible-playbook –skip-tags=t1 xxx.yml
触发器
– hosts: 172.16.1.41
remote_user: root
tasks:
– name: 01 Install rsync
yum: name=rsync state=present
– name: 02 push config file
copy: src=./file/{{ item.src }} dest=/etc/{{ item.dest }} mode={{ item.mode }}
with_items:
– { src: “rsyncd.conf”, dest: “rsyncd.conf”, mode: “0644” }
– { src: “rsync.password”, dest: “rsync.password”, mode: “0600” }
notify: restart rsync server
#当这两个文件发生了改变notify就会通知下面的handlers
handlers:
– name: restart rsync server
service: name=rsyncd state=restarted
#当handlers收到了notify的通知信息就会执行重启服务的操作
判断
指定判断条件:
(ansible_hostname == “nfs01”)
(ansible_hostname == “web01”)
setup模块中显示被管理主机系统的详细信息
– hosts: test
remote_user: root
tasks:
– name: Check File
file: path=/tmp/this_is_{{ ansible_hostname }}_file state=touch
when: (ansible_hostname == “nfs”) or (ansible_hostname == “backup”)
– name: install httpd
yum: name=httpd state=installed
when: (系统情况 == “CentOS”)
– name: install httpd2
yum: name=httpd2 state=installed
when: (系统情况 == “ubuntu”)
剧本整合
方式一:include_tasks: f1.yml
– hosts: all
remote_user: root
tasks:
– include_tasks: f1.yml
– include_tasks: f2.yml
方式二:include: f1.yml
– include:f1.yml
– include:f2.yml
方式三:- import_playbook:
[root@m01 ansible-playbook]# cat main.yml
– import_playbook: base.yml
– import_playbook: rsync.yml
– import_playbook: nfs.yml
– import_playbook: oxxx.yml
– import_playbook: rsync.yml
– import_playbook: nfs.yml