ansible tower 实战使用详解

kionf

ansible tower 3.3.1 实战使用,此文档为进阶使用不是网上烂大街的安装部署,如需安装配置介绍移步ansible-tower安装及破解前几年就了解过tower那时使用感觉他的点子骚,但使用不是特别方便。经过3.0大改版后,用着很舒坦!!


0x00 介绍

关于Ansible Tower 这里不多介绍,属于发布配置管理系统,支持Api及界面操作,Django编写。☝️字屌

实验环境
CentOS Linux release 7.4.1708
Ansible Tower 3.3.1
下载地址: https://releases.ansible.com/ansible-tower/setup/
参考文档:https://docs.ansible.com/ansible-tower/latest/html/

关于新版导航栏介绍

# viewes
Dashboard 仪表盘展示信息的
Jobs 跑过的任务记录
Schedules 计划任务
My View 查看用户的工作模版,和任务记录
# resources
Templates 任务模版,配置调用playbook执行时的各种参数,从此处添加计划任务
Credentials 配置连接 机器/云主机api Key/自定义的凭证类型 的账号密码等信息
Projects 这里配置项目对应的playbook,可以从Git上拉取或从本地文件夹读取playbook
Inventories 资产清单
Inventory Scripts 自定义获取资产清单的脚本
# access
Organizations 组织管理
Users 用户管理
Teams 用户组管理
# Administration
Credential Types 自定义凭证类型,添加后可在Credentials中使用
Notifications 配置任务通知,支持电子邮件,Twillio电话等
Management Jobs 计划任务管理
Instance Groups 资产组管理
Applications 自定义应用
Settings 设置

初始流程:从Inventories添加主机 > Credentials添加连接机器密码/添加git账号(用来Projects从Git拉取Playbook) > Projects配置playbook获取方式 > Templates指定那些机器跑Playbook,和运行时的参数


0x01 如何批量导入资产

新版本的ansible-tower非常强大,笔者相信他一定能站起来。关于资产的导入ansible tower内部支持从云厂商或者私有虚拟化云直接导入机器,如果你使用的云厂商不支持,还可自己编写python/shell脚本来调用云厂商API添加到ansible tower资产中。抓紧 Let’s Go

1. 通过UI界面导入

点击Inventories点击添加按钮,会提示出两种InventoryInventory 正常的资产Smart Inventory 根据从Inventory筛选条件变化的

1)添加Inventory

Inventory

保存后在点击HOSTS添加主机

2)添加Smart Inventory

smart Inventory

Smart Inventory 是通过筛选IP/主机名称/id范围 来定义的主机清单

2. 通过命令行tower-manage批量添加主机

通过Tower自带的命令行工具tower-manage来批量导入主机,可以从主机的/etc/ansible/hosts中直接导入

示例文件
[test:children]
test-signal
test-mysql
test-rtc
test-tomcat
[test-rtc]
172.16.8.193 ansible_ssh_port=52330 ansible_ssh_user=root
172.16.8.189 ansible_ssh_port=52330 ansible_ssh_user=root
172.16.8.187 ansible_ssh_port=52330 ansible_ssh_user=root
[test-mysql]
172.16.8.186 ansible_ssh_port=52330 ansible_ssh_user=root
172.16.8.185 ansible_ssh_port=52330 ansible_ssh_user=root
[test-signal]
172.16.8.190 ansible_ssh_port=52330 ansible_ssh_user=root
172.16.8.191 ansible_ssh_port=52330 ansible_ssh_user=root
172.16.8.197 ansible_ssh_port=52330 ansible_ssh_user=root
172.16.8.198 ansible_ssh_port=52330 ansible_ssh_user=root
[test-tomcat]
172.16.8.184 ansible_ssh_user=root
172.16.8.188 ansible_ssh_user=root
[test-nginx]
172.16.8.191 ansible_ssh_port=52330 ansible_ssh_user=root
172.16.8.190 ansible_ssh_port=52330 ansible_ssh_user=root
命令导入到资产清单
tower-manage inventory_import --source=/etc/ansible/hosts --group-filter=test --inventory-name=测试环境 --keep-vars
1.569 INFO Updating inventory 7: 测试环境
1.674 INFO Reading Ansible inventory source: /etc/ansible/hosts
3.003 INFO Processing JSON output...
3.004 INFO Loaded 7 groups, 11 hosts
3.292 INFO Inventory import completed for (测试环境 - 17) in 1.7s

选项介绍:

--source 指定inventory文件
--group-filter 从文件中通过组名过滤
--host-filter 通过host name过滤
--inventory-name 导入到指定名称资产清单
--inventory-id 导入到指定ID的资产清单
# name 和 id 选一个
--overwrite 覆盖主机和组,默认不覆盖
--overwrite-vars 覆盖主机变量
--keep-vars 保持主机变量
--enabled-value 导入的主机状态是否激活默认激活

导入结果

tower-manage

3. 导入云厂商主机

暂未使用😂


0x02 创建凭证

可以创建各种各样的凭证,连接云厂商Api的凭证/连接gitlab的凭证/连接Linux主机的凭证/自定义的凭证等等。。我们先创建一个Gitlab认证用来拉取我们的Playbook

1. 创建版本控制凭证

tower-manage

Credential Type选择Source Control

2. 创建登陆机器凭证

tower-manage

Credential Type 选择 Machine


0x03 创建项目

playbook拉取的方式主要有:

- Manual 从本地目录读取
- Git 从Git拉取
- Mercurial 从mer
- SVN
- RedHatInsights

这里选用Git从Gitlab上拉取

tower-manage

Options选项配置:

- Clean
在从gitlab拉取前清除本地修改的playbook
- Delete on Update
当更新时删除所有本地储存playbook
- Update Revision on Launch
当Templates任务运行时,自动从git拉取更新

tower 测试playbook地址:tower-example


0x04 创建任务模板

最后一步来了,创建Templates

tower-templates

Options选项配置:

- Enable Privilege Escalation
# 默认脚本以awx用户执行playbook,开启后使用管理员身份
- Allow Provisioning Callbacks
# 运行通过url回调来启动这个任务
- Enable Concurrent Jobs
# 允许相同任务一起运行
- Use Fact Cache
# 使用缓存

点击SCHEDULES可以添加计划任务


0x05 完结

tower-templates

我相信Tower会站起来😂,后续再补充。

参考:

https://docs.ansible.com/ansible-tower/latest/html/