我亲自体验了用于管理Ansible的GUI工具”AWX”(安装、运行Playbook、设置通知)
因为我觉得很有趣,所以这次我尝试了一下通过GUI界面使用服务器配置管理工具Ansible的AWX,接下来我将写下我的总结。
我希望按照以下顺序来说明这个项目。
-
- AWXの概略
-
- AWXのインストール準備
-
- AWXのインストール
-
- AWXのPlaybook実行手順
- AWXで実行したPlaybookの通知設定
Ansible是什么?
Ansible 是由 RedHat 公司开发的一款开源配置管理工具。
Ansible具有自动化服务器构建以及自动化IT基础设施相关工作的特点。
请查看官方网站以获取更详细的信息。
在Ansible中,有开源的社区版和由RedHat支持的企业版。企业版提供了Ansible Tower,可以通过图形界面进行操作。
Ansible文件的编写方式
使用Ansible,基本上只需编写两行代码就能执行。
第一项是库存文件,用于描述受管理的角色和主机信息的文件。
第二个是Playbook,它是一个以YAML格式编写的文件,用于描述管理目标的配置和配置执行的步骤。
由于本次是关于AWX的文章,所以省略了有关Ansible文件的编写方法等内容。
AWX是什么?
AWX是Red Hat公司提供的Ansible Tower的免费开源版本。
与Ansible Tower相似,可以通过Web GUI或API操作Ansible。
AWX的功能可以与Ansible Tower几乎相同的方式使用,但由于安全性和稳定性较差,实际运营时建议使用Ansible Tower。
因为这次只是为了学习而确认行为,所以我会使用AWX。
AWX不是用于创建Playbook的工具,而是用于指定并执行已创建的Playbook的工具。
在AWX中可以做的事情。
在AWS上可以实现以下功能:
实时的 Playbook 输出
您可以在浏览器上实时查看Playbook的执行情况。
可以通过浏览器执行Playbook。
您可以在浏览器上运行设定的Playbook。
用户管理和访问限制
标准用户、系统管理员和系统审计员都可以创建用户并授予权限。此外,还可以通过组织、团队、项目和库等单位进行访问权限管理。
管理履历
用户执行或修改的历史记录将保存在作业中,可以进行查看和管理。
通知功能
可以使用电子邮件、Slack和Webhook等方式进行通知。
备份和恢复
根据需要,可以备份或复制实例。(对于AWX而言,将使用Docker命令创建Postgres的转储文件)
准备安装AWX。
接下来,为了安装AWX,需要先进行准备工作,逐个安装各个软件包。
执行环境 (shí
- CentOS7.8
安装 Docker CE
由于AWX是由容器构成的,所以需要安装Docker。
因此,我们将安装免费版本的Docker,即Docker CE(社区版)。
[root@awx ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@awx ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[root@awx ~]# yum install -y docker-ce docker-ce-cli containerd.io
安装docker-py
接下来,我们将安装docker-py(一个可以用Python编写docker命令等的软件包)。
[root@awx ~]# yum -y install epel-release
[root@awx ~]# yum -y install python-pip
[root@awx ~]# pip install docker
[root@awx ~]# systemctl enable docker
[root@awx ~]# systemctl start docker
安装Ansible
接下来,将使用yum来安装Ansible。
[root@awx ~]# yum -y install ansible
安装Git
我們需要檢查在CentOS 7.8上是否已經預設安裝了Git。
[root@awx ~]# yum info git
安装Node.js和npm
接下来,我们将安装Node.js。
安装Node.js时,npm也会同时安装。
[root@awx ~]# curl -sL https://rpm.nodesource.com/setup_8.x | bash -
[root@awx ~]# yum install -y nodejs
[root@awx ~]# yum -y install gcc-c++ make
确认npm已经安装。
[root@awx ~]# npm -v
AWX安装
通过在GitHub上找到的Ansible Playbook执行AWX的安装。
克隆存储库
[root@awx ~]# git clone https://github.com/ansible/awx
修改库存
将用于描述目标服务器的inventory文件的IP更改为用于构建AWX的主机服务器的IP。
由于您已经安装了Python3,因此您需要修改Inventory文件以将Python3的环境变量添加到其中。
[root@awx ~]# cd awx/installer/
[root@awx installer]# vi inventory
#localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python"
ホストIP ansible_connection=local ansible_python_interpreter="/usr/bin/python3"
执行playbook
输入执行Ansible Playbook的命令,并安装AWX。
[root@awx ~]# ansible-playbook -i inventory install.yml
当playbook执行完成后,可以使用docker ps -a命令来确认awx_task、awx_web、awx_postgres、awx_redis容器已经启动。
当确认容器已经启动后,我们将输入AWX服务器主机的IP地址来验证AWX的Web用户界面是否已经启动。(默认端口为80号)
接下来,输入默认设置的用户ID:admin,密码:password进行登录。
如果可以成功登录,那么AWX的安装就完成了。
从AWX执行Playbook
接下来,我将简要概述从AWX服务器到目标服务器执行Playbook的步骤。
本次操作将GitLab项目中的Ansible配置文件克隆到AWX服务器,并执行该Ansible配置文件中的Playbook命令到目标服务器。
设定步骤如下:
AWX服务器和GitLab服务器的SSH公钥认证设置
↓
在AWX服务器上克隆GitLab的项目
↓
AWX服务器和目标服务器的SSH公钥认证设置
↓
在AWX服务器上设置清单
↓
在AWX服务器上创建模板(用于Playbook的配置)
↓
执行模板
将会发生这样的情况。
设置AWX服务器和GitLab服务器的SSH公钥认证。
首先,在构建AWX的服务器上,创建SSH密钥对(公钥和私钥)。
[root@awx ~]# cd ~/.ssh
[root@awx .ssh]# ssh-keygen -t rsa -f awx_rsa
[root@awx ~]# cd ~/.ssh
[root@awx .ssh]# cat gitlab_rsa.pub
内容を確認
接下来,打开GitLab的SSH Key选项卡,将先前创建的公钥(gitlab_rsa.pub)的内容粘贴进去。
请给我起一个适当的名字。
请确保可以从AWX服务器成功使用ssh登录到GitLab服务器。
[root@awx ~]# ssh ユーザー名@GitLabサーバのIPアドレス -i ~/.ssh/gitlab_rsa
如果确认了SSH连接,就点击AWX的认证信息,并将刚创建的秘钥信息粘贴到SSH密钥栏中。
另外,这里将名称设定为my-gitlab,组织设定为Default,认证信息类型设定为源代码库。
请在GitLab的ssh登录时指定用户名和密码,并在输入并保存时输入秘钥密码,该密码是在创建SSH密钥对时注册的。
将GitLab项目克隆到AWX服务器中。
接下来,我们将进行GitLab项目的克隆配置。
首先,点击项目选项卡,并输入信息。
在这里,我们将名称设置为ansible-test-lamp,组织设置为默认,版本控制类型设置为Git。
在SCM URL中指定GitLab项目信息,在SCM认证信息中指定先前设置的my-gitlab。
按下保存按钮后,会自动开始进行git clone操作,如果之前注册的项目的左侧指示点变为绿色,则克隆成功。
AWX服务器和目标服务器的SSH公钥认证设置。
接下来,需要进行目标服务器的配置,以便从AWX服务器执行Playbook。
在这里,您需要像在AWX服务器和GitLab服务器上一样创建密钥对,并使用scp命令将公钥发送到目标服务器。
[root@awx ~]# cd ~/.ssh
[root@awx .ssh]# ssh-keygen -t rsa -f awx_rsa
[root@awx ~]# cd ~/.ssh
[root@awx .ssh]# scp ユーザー名@対象サーバーのホスト名:~/.ssh/ target1_rsa.pub
请确保您可以从AWX服务器实际登录到目标服务器的ssh。
[root@awx ~]# ssh ユーザー名@GitLabサーバのIPアドレス -i ~/.ssh/gitlab_rsa
然后,同样地,点击AWX的认证信息,将本次创建的私钥信息粘贴到SSH私钥字段中。
在此处,我将名称设为target-server1,组织设为Default,认证信息类型设为机器。
请提供用于SSH登录目标服务器的用户名和密码,并且如果您在创建SSH密钥对时注册了密钥的密码,请输入该密码。
在AWX服务器上进行库存设置
接下来,将进行库存(目标服务器)的注册。
创建新的清单,并选择名称和组织。
首先,点击详细选项卡,在这里将名称设置为ansible-targets,将组织设置为默认。
请点击主机选项卡,然后进行目标服务器的配置,把它作为主机信息。
主机名应包含目标服务器的IP地址。
在AWX服务器上创建模板(用于Playbook的配置)。
接下来,我们需要注册一个名为模板(Playbook)的作业执行所需的信息。
选择先前设置的模板中的库存(ansible-targets)、项目(ansible-test-lamp)和Playbook(克隆的存储库中的site.yml文件)。
我将名称设置为ansible-lamp-template1,并将作业类型设置为执行检查测试。
按下保存按钮后,准备好执行Playbook了。
执行已设置的playbook
请点击模板选项卡中刚刚设定的ansible-lamp-template1的火箭图标,执行Playbook。
如果执行结果如下成功显示,则Playbook的执行顺利完成。
Playbook结果通知设置
最后,将Playbook的通知设置配置到Microsoft Teams中。
在Teams中创建团队,并从连接器中选择入站Webhook。
从这里开始,获取用于通知的Webhook URL。
然后,点击通知标签来编辑我要通知的模板ansible-lamp-template1。
请在之前设置的”通知设置”中的”Teams”项目中,勾选成功。
这样,通知设置就完成了。
请提供URL以供参考。
以下是一些关于Ansible的链接:
1. Red Hat官方网站提供了有关Ansible的技术信息:[https://www.redhat.com/ja/technologies/management/ansible](https://www.redhat.com/ja/technologies/management/ansible)
2. 在Red Hat官方网站上可以找到有关AWX和Ansible Tower的详细信息:[https://www.redhat.com/ja/resources/awx-and-ansible-tower-datasheet](https://www.redhat.com/ja/resources/awx-and-ansible-tower-datasheet)
3. Qiita上有一篇有关Ansible的文章:[https://qiita.com/matchpon23/items/7442632bd23b3cf0554e](https://qiita.com/matchpon23/items/7442632bd23b3cf0554e)
4. 上面的这个链接是关于AWX的博客文章:[https://blog.1q77.com/2018/03/awx/](https://blog.1q77.com/2018/03/awx/)
5. Qiita上有一篇关于Ansible的文章:[https://qiita.com/tonishy/items/bda02856ccd6d7c1c4b3](https://qiita.com/tonishy/items/bda02856ccd6d7c1c4b3)
6. Qiita上还有一篇文章介绍如何使用Ansible:[https://qiita.com/comefigo/items/8ea716f8cf2510a9c15e](https://qiita.com/comefigo/items/8ea716f8cf2510a9c15e)
7. Qiita上还有一篇关于Ansible Playbook和Ansible Vault的文章:[https://qiita.com/saito_hideki/items/e19f39f792eb7d0e720c](https://qiita.com/saito_hideki/items/e19f39f792eb7d0e720c)
8. Qiita上的这篇文章解释了如何安装和配置Ansible:[https://qiita.com/int_sorarinu/items/97cfe4374f5af30f9b5a](https://qiita.com/int_sorarinu/items/97cfe4374f5af30f9b5a)
9. 上述链接是一篇关于Ansible模块的Qiita文章:[https://qiita.com/hijiri0404/items/19db3b05f30571653876](https://qiita.com/hijiri0404/items/19db3b05f30571653876)
10. 这个链接是一篇关于Ansible自动化工具的Qiita文章:[https://qiita.com/redamoon/items/07e445d1fce360cb5fa3](https://qiita.com/redamoon/items/07e445d1fce360cb5fa3)
11. SCSK网站上提供了关于Ansible的技术指南:[https://www.scsk.jp/product/oss/tec_guide/ansible/1_ansible3_1.html](https://www.scsk.jp/product/oss/tec_guide/ansible/1_ansible3_1.html)
12. Qiita上还有一篇关于Ansible的文章:[https://qiita.com/comefigo/items/8ea716f8cf2510a9c15e](https://qiita.com/comefigo/items/8ea716f8cf2510a9c15e)
13. 这个链接是一篇关于Ansible的Qiita文章:[https://qiita.com/nnstt1/items/0adaf70eb5568a291269](https://qiita.com/nnstt1/items/0adaf70eb5568a291269)