文章插图
Ansible Dynamic Inventory
- 动态Inventory也就是Ansible所有的Inventory文件里面的主机列表和变量信息都支持从外部拉取 , 例如CMDB等 。
- 避免主机列表不准确和频繁大量的手动更新的问题
- 也可以通过设置ansible.cfg文件中的inventory参数为一个可执行脚本,将CMDB等其他系统的主机信息同步至Ansible中 。
- 对动态Inventory脚本的参数和输出必须遵循格式规则
- 按不同业务/系统分割成的多个Inventory文件
- 同时使用常规Inventory文件和动态Inventory脚本
- 配置ansible.cfg文件的hostfile参数,指定放置inventory文件目录作为Inventory,Ansible将合并目录里所有文件为一个完整的Inventory
- 也可以在命令行中使用-i命令来指定特定的Inventory文件
[defaults]hostfile = /etc/ansible/inventory# 指定目录作为Inventory
Ansible 剧本执行Ansible Playbook 基础介绍剧本(Playbook) 是 ansible 用于配置 , 部署,和管理被控节点的剧本 。- playbook类似Linux的shell脚本,用于实现和管理大量的、规律的、复杂的操作任务
- playbook方便代码和配置的重用、移植性好,同时也易于管理
# playbook文件由YMAL语言编写,需遵循yaml格式要求1. 第一行以 "---" 开始 , 表明YMAL文件的开始(非playbook强制要求,没有也能通过语法检查)2. 列表元素以”-”开头 , 后面带有一个空格,然后元素内容3. 对象的键与值以":"和一个空格来分隔4. 相同层次内容必须保持相同的缩进和对齐,否则会报错5. 在同一行中,“#” 之后的内容表示注释6. 文件名应该以.yml或.yaml结尾# 编写完成后可以通过 --syntax-check 子命令检查语法错误ansible-playbook --syntax-check sample.yaml
Playbook组成- 一个Playbook可以包括一个或多个Play 。
- 一个Play由Host的无序集合与Task的有序列表组成 。
- 每一个Task仅由一个模块构成 。
文章插图
# play- 一个Playbook包括一个或多个Play- 一个Play由Host的无序集合与Task的有序列表组成# 目标定义部分:host- 执行playbook的主机信息# 变量定义部分:variable- 执行playbook需要的变量- 设置的ansible配置变量 , 例如gather_facts# 任务定义部分:tasks & module- 在目标主机执行的任务列表和调用的模块- Play的主体部分,Task列表中的各任务按次序逐个在Hosts中的指定主机上执行- 每一个Task仅由一个模块构成- 建议为每一个Task设置一个Name,便于在运行Playbook时从输出结果辨别task信息- Ansible的自带模块Command模块和Shell模块无需使用key=value格式,可以直接编写要执行的命令# 触发器定义部分:handlers- task执行完成后需要调用的任务,通常结合关键字notify- 由通知者进行的Notify,如果没有被Notify,则Handlers不会执行,如果被Notify了 , 则Handlers被执行- 不管有多少个通知者进行了Notify , 等到Play中的所有Task都执行完成之后 , Handlers也只会被执行一次- 实质上也是Task的列表
Ansible Playbook 示例[root@test01 ansible-test]# pwd/root/ansible-test[root@test01 ansible-test]#[root@test01 ansible-test]# lltotal 4drwxr-xr-x 2 root root24 Oct 17 09:47 conf-rw-r--r-- 1 root root 922 Oct 14 11:24 sample.yaml[root@test01 ansible-test]#[root@test01 ansible-test]# tree.├── conf│└── httpd.conf└── sample.yaml1 directory, 2 files[root@test01 ansible-test]#[root@test01 ansible-test]# cat conf/httpd.confMaxClients{{ maxClients }}Listen{{ httpd_port }}[root@test01 ansible-test]#[root@test01 ansible-test]# cat sample.yaml- hosts: taremote_user: vipxfgather_facts: novars:- package: vimtasks:- name: install vimyum: 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:- 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- hosts: taremote_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[root@test01 ansible-test]#[root@test01 ansible-test]# cat /etc/ansible/hosts[ta]172.20.8.247 ansible_ssh_port=2222 ansible_ssh_user=vipxf ansible_ssh_pass=Anliven09![ta:vars]httpd_port=80 maxClients=10[root@test01 ansible-test]#
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Web自动化---解决登录页面随机验证码问题
- 小样本利器4. 正则化+数据增强 Mixup Family代码实现
- 从0搭建vue3组件库:自动化发布、管理版本号、生成 changelog、tag
- ansible使用临时命令通过模块来执行任务
- Ansible 批处理实战
- ansible应用之安装elk框架
- app自动化测试环境安装
- reportportal 集成 robotframework 自动化执行及结果可视化
- Android自动化测试工具调研
- 五 微软出品自动化神器【Playwright+Java】系列 之常见点击事件操作