Ansible playbook 示例说明- hosts: ta# 指定执行指定任务的主机 , 可以通过一个或多个由冒号分隔主机组remote_user: vipxf# 指定在远程主机执行任务的用户 , 也能用在task中gather_facts: novars:- package: vimtasks:# 任务列表,在指定主机上按顺序执行各任务- name: install vim# 每个任务的名称,用于输出执行结果yum: name={{ package }} state=latest- name: install configuration filebecome: yesbecome_method: subecome_flags: "-"become_user: roottemplate: src=https://www.huyubaike.com/root/ansible-test/conf/httpd.conf dest=/root/test-template.confnotify:# 此任务状态为changed时采取的操作,在handlers中定义- check-hostname-date- name: copy filecopy: src=/root/ansible-test/conf/httpd.conf dest=/home/vipxf/test-copy.confhandlers:# 触发器,在被指定任务通知和所有任务完成的情况下只执行一次,实质上也是按序执行的任务列表- name: check-hostname-dateshell: hostname && dateignore_errors: True# 如果命令或脚本的退出码不为零,使用ignore_errors来忽略错误信息- hosts: ta# playbook文件可以有多个playremote_user: vipxfgather_facts: nobecome: yesbecome_method: subecome_flags:"-"become_user: rootvars:- newgroup: testgroup- newuser: testusertasks:- name: create new groupgroup: name={{ newgroup }} system=yes- name: create new useruser: name={{ newuser }} group=testgroup system=yes
相关命令
# Ansible具有幂等性,会自动跳过没有变化的部分# 建议使用绝对路径来执行playbook的yaml文件# 语法检查 和 预测试 不能保证结果绝对正确,实际的运行测试是有必要的# 特别注意yml文件的内容格式(空格、缩进)、特殊字符等 , 必要时重写重建--------------------------------------------------------------------------------## 列出主机列表、任务列表和标签列表ansible-playbook --list-hosts --list-tasks --list-tags sample.yaml--------------------------------------------------------------------------------## 检查内容语法错误ansible-playbook --syntax-check sample.yaml## 预测试(不改变目标主机的任何设置)ansible-playbook --check sample.yaml --ask-become-passansible-playbook -C sample.yaml --ask-become-pass--------------------------------------------------------------------------------## 选择playbook开始执行的任务ansible-playbook sample.yaml --start-at-task="common"# 从名称为common的任务开始执行playbook## 详细模式下执行playbook,根据提示输入root密码ansible-playbook -v sample.yaml --ask-become-pass## verbose mode (-vvv for more, -vvvv to enable connection debugging)ansible-playbook -vvv sample.yaml --ask-become-pass
返回结果
# 一般以红色、黄色、绿色来表示执行结果- 绿色:执行成功,未更改目标主机状态- 黄色:执行成功 , 对目标主机完成变更,目标主机状态有变化- 紫色:执行结果出现警告或提示信息- 红色:执行失败 , 结果出现异常# 在playbook执行后,会明确列出任务执行状态的汇总信息# 任务执行状态包括:ok、changed、unreachable、failed、skipped、rescued、ignored
结果示例
[root@test02 ~]# ip addr show1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:50:56:a1:07:78 brd ff:ff:ff:ff:ff:ffinet 172.20.8.247/24 brd 172.20.8.255 scope global noprefixroute ens192valid_lft forever preferred_lft foreverinet6 fe80::250:56ff:fea1:778/64 scope linkvalid_lft forever preferred_lft forever[root@test02 ~]#[root@test02 ~]# vim -h | head -n 1VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 14 2019 10:43:10)[root@test02 ~]#[root@test02 ~]# pwd/root[root@test02 ~]# ll test-template.conf-rw-r--r-- 1 root root 38 Oct 17 18:18 test-template.conf[root@test02 ~]#[root@test02 ~]# ll /home/vipxf/test-copy.conf-rw-rw-r-- 1 vipxf vipxf 66 Oct 17 18:18 /home/vipxf/test-copy.conf[root@test02 ~]#[root@test02 ~]# cat /etc/group |grep testtestgroup:x:995:testuser:x:994:[root@test02 ~]# cat /etc/passwd |grep testtestuser:x:997:995::/home/testuser:/bin/bash[root@test02 ~]#
Ansible Playbook 条件判断(When)when语句可以将变量、facts或此前任务的执行结果作为指定task是否执行的前提条件,也可以判断变量是否被定义 。
示例-1:when
- hosts: taremote_user: vipxfgather_facts: yestasks:- name: testshell: echo "test"when: ansible_os_family == "RedHat" and ansible_distribution_version == "7.8" # 可以使用facts、playbook 或Inventory中定义的变量- name: test1shell: echo "step1"register: result# 将执行结果定义为变量- name: test2shell: echo "step2"when: result.rc == 0# 基于先前任务的结果来执行- name: test3shell: echo "step3"when: result.stderr != ""- name: test4shell: echo "step4"when: result.changed == "true"
推荐阅读
- Web自动化---解决登录页面随机验证码问题
- 小样本利器4. 正则化+数据增强 Mixup Family代码实现
- 从0搭建vue3组件库:自动化发布、管理版本号、生成 changelog、tag
- ansible使用临时命令通过模块来执行任务
- Ansible 批处理实战
- ansible应用之安装elk框架
- app自动化测试环境安装
- reportportal 集成 robotframework 自动化执行及结果可视化
- Android自动化测试工具调研
- 五 微软出品自动化神器【Playwright+Java】系列 之常见点击事件操作