Ansible最佳实践之 AWX 管理项目的一些笔记

简介: 写在前面分享一些 AWX 创建管理项目的笔记博文内容涉及:容器化 AWX 手工创建项目Demo通过 SCM 创建项目 Demo项目角色,更新策略介绍,SCM 凭据的创建食用方式: 需要了解 Ansible理解不足小伙伴帮忙指正

写在前面

  • 分享一些 AWX 创建管理项目的笔记
  • 博文内容涉及:

    • 容器化 AWX 手工创建项目Demo
    • 通过 SCM 创建项目 Demo
    • 项目角色更新策略介绍,SCM 凭据的创建
  • 食用方式: 需要了解 Ansible
  • 理解不足小伙伴帮忙指正

傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波


为 Ansible Playbook 创建项目

项目

在 AWX Web 界面中,每个 Ansible 项目都由⼀个项目资源来表示。

AWX 中 项目 代表多个剧本及其相关的资源集合,例如,剧本和角色。在AWX Web界面中,每个Ansible项目都由一个对象 资源表示。

常见的项目类型有两种:

  • Manual,从AWX服务器项目基础路径获取项目资料。该目录由/etc/tower/settings.py配置,默认情况下位于/var/lib/awx/projects。这不是推荐的做法。更新此类项目需要在 AWX 界面之外进行手动干预,而且项目管理员具有直接访问权,以在AWX上更改操作系统环境。降低了AWX服务器的安全性。如果是容器环境,比如 K8s 中,不是合适的创建方式,如果pod调度重启,那么是不可预测的。需要做成有状态应用。或则做永久持久化处理,可以考虑nfs等
  • SCM(source code management),该项目配置为从版本控制系统(也被 AWX 称为源代码控制管理或 SCM 系统)检索这些资料。 AWX 支持使用 Git、Subversion 或 Mercurial 从 SCM 下载和自动获取项目资料更新的功能。

当前的 AWX 为 k8s 集群中部署,我们来看下对应的处理方式。找下配置文件

┌──[root@vms81.liruilongs.github.io]-[~]
└─$kubectl get pods awx-demo-65d9bf775b-hc58x -o yaml | grep -A 4 '/etc/tower/settings.py'
    - mountPath: /etc/tower/settings.py
      name: awx-demo-settings
      readOnly: true
      subPath: settings.py
    - mountPath: /etc/nginx/nginx.conf
--
    - mountPath: /etc/tower/settings.py
      name: awx-demo-settings
      readOnly: true
      subPath: settings.py
    - mountPath: /var/run/redis
┌──[root@vms81.liruilongs.github.io]-[~]
└─$

根据配置文件的持久卷名字,这里可以看到,对应配置文件做了 CM 卷挂载上去的。我们找一些具体 的 CM

┌──[root@vms81.liruilongs.github.io]-[~]
└─$kubectl get pods awx-demo-65d9bf775b-hc58x -o yaml |grep -A 10 awx-demo-settings | grep -A 5  configMap  | grep name
      name: awx-demo-awx-configmap
┌──[root@vms81.liruilongs.github.io]-[~]
└─$

查看配置文件的详细信息,确认项目目录

┌──[root@vms81.liruilongs.github.io]-[~]
└─$kubectl get cm awx-demo-awx-configmap -o jsonpath='{.data.settings}'
import os
import socket
# Import all so that extra_settings works properly
from django_auth_ldap.config import *

def get_secret():
    if os.path.exists("/etc/tower/SECRET_KEY"):
        return open('/etc/tower/SECRET_KEY', 'rb').read().strip()

ADMINS = ()
STATIC_ROOT = '/var/lib/awx/public/static'
STATIC_URL = '/static/'
PROJECTS_ROOT = '/var/lib/awx/projects'
JOBOUTPUT_ROOT = '/var/lib/awx/job_status'
.................
┌──[root@vms81.liruilongs.github.io]-[~]
└─$

找到了项目目录,我们就可以到容器里操作了。

创建项目

手动创建

手动的方式,所以我们需要这 pod 容器内部创建,这里我们这了一个创建好的项目上传上去。

查看当前项目目录

┌──[root@vms81.liruilongs.github.io]-[~]
└─$kubectl exec -it  awx-demo-65d9bf775b-hc58x -c awx-demo-task  -- bash
bash-5.1$ cd  /var/lib/awx/projects
bash-5.1$ ls
bash-5.1$ exit
exit

生成一个角色作为项目,然后 cp 到容器内部目录下

┌──[root@vms81.liruilongs.github.io]-[~/ansible]
└─$ansible-galaxy init liruilong_manual
- Role liruilong_manual was created successfully
┌──[root@vms81.liruilongs.github.io]-[~/ansible]
└─$kubectl cp liruilong_manual awx-demo-65d9bf775b-hc58x:/var/lib/awx/projects/ -c awx-demo-task
┌──[root@vms81.liruilongs.github.io]-[~/ansible]
└─$kubectl exec -it awx-demo-65d9bf775b-hc58x -c awx-demo-task  -- bash
bash-5.1$ cd /var/lib/awx/projects/
bash-5.1$ ls
liruilong_manual
bash-5.1$

刷新 AWX ,会看到刚才创建的本地项目

选择创建

创建成功

SCM 的方式创建

SCM的方式,这里我们选择通过 github 获取一个之前写的角色 https://github.com/LIRUILONGS/ansible_role_keepalived

在源控制中输入项目路径

创建后查看状态

这里同步失败 ,因为还没有配置 github 的凭据,需要SCM 凭据,下面会介绍

在容器项目路径下,可以看到我们同步的项目

┌──[root@vms81.liruilongs.github.io]-[~/ansible]
└─$kubectl exec -it awx-demo-65d9bf775b-hc58x -c awx-demo-task  -- bash
bash-5.1$ cd /var/lib/awx/projects/
bash-5.1$ ls -l
total 0
drwxr-xr-x  2 awx root   6 Oct 21 19:20 _6__demo_project
-rwxr-xr-x  1 awx root   0 Oct 21 19:20 _6__demo_project.lock
drwxr-xr-x  4 awx root  86 Oct 21 18:25 _9__ansible_role_keepalived
-rwxr-xr-x  1 awx root   0 Oct 21 18:25 _9__ansible_role_keepalived.lock
drwxr-xr-x 10 awx root 154 Oct 21 13:45 liruilong_manual
-rwxr-xr-x  1 awx root   0 Oct 21 19:35 liruilong_manual.lock
bash-5.1$

项目角色

创建好项目之后需要分配角色

项目可用的角色列表:

  • Admin:授予用户对项目完全的访问权限。
  • Use:授予用户在模板资源中使用项目的权限。
  • Update:授予用户从其 SCM 来源手动更新或计划更新项目资料更新的权限。
  • Read:授予用户查看与项目关联的详细信息。

管理项目访问权限

首次创建项目时,用户必须拥有该项目的组织的 Admin 或 Auitor 角色才能访问它。用户的其它访问权限必须经过特别配置。创建项目时无法分配角色,必须通过编辑项目进行添加。

创建 SCM 凭据

源代码控制凭据存储身份验证信息,供 AWX 用来访问存储在像 Git 这样的版本控制系统中的项目中的资料。SCM 凭据存储对源代码控制存储库访问权限进行身份验证所需的用户名和密码或私钥。

创建 SCM 凭据

添加凭据,这里我们使用帐密凭据

同步项目

SCM 凭据角色

与计算机凭据一样,专用 SCM 凭据仅供其创建者以及 System Administrator 和 System Auditor 用户使用。分
配给某一组织的 SCM 凭据可以与其它用户共享,方法是为用户或团队分配该凭据的角色。

可用的角色列表:

  • Admin:授予用户对 SCM 凭据完全的访问权限。
  • Use:授予用户将 SCM 凭据与项目资源关联的权限。
  • Read:授予用户查看 SCM 凭据详细信息的权限。

管理 SCM 凭据访问权限

SCM 凭据 添加角色

首次创建组织凭据时,只能由特定用户进行访问,其它用户的其它权限必须经过特别配置。

更新项目策略

可以通过以下方式在 AWX 中更新 SCM 项目资源的策略:

  • 在进行更新前删除任何本地修改。
  • 在进行更新前删除整个本地存储库。根据存储库的大小,这可能会显著增加完成更新所需的时间
  • 子模块将跟踪其 master 分支(或在 .gitmodules 中指定的其他分支)的最新提交。如果没有,子模块将会保留在主项目指定的修订版本中。这等同于在 git submodule update 命令中指定 --remote 标志。
  • 每次使用此项目运行作业时,请在启动该作业前更新项目的修订。
  • 允许在使用此项目的作业模板中更改 Source Control 分支或修订版本。

也可以手动更新到最新版本

对 Ansible 角色的支持

项目可以指定外部 Ansible 角色,它们作为依赖项存储在 Ansible Galaxy 或其他源代码管理存储库中。在项目更新结束时,如果项⽬的存储库包括⼀个包含有效 requirements.yml 文件的 roles目录,则红帽 AWX 将自动运行 ansible-galaxy 以安装角色,这个用到了在研究

博文参考

《DO447 Advanced Automation Ansible Best Practices》

相关文章
|
运维 Kubernetes 网络安全
Ansible自动化运维工具之主机管理与自定义配置文件(2)
Ansible自动化运维工具之主机管理与自定义配置文件(2)
147 0
|
运维 负载均衡 关系型数据库
【运维知识进阶篇】用Ansible Roles重构LNMP架构(Linux+Nginx+Mariadb+PHP),实现4个项目一键部署
【运维知识进阶篇】用Ansible Roles重构LNMP架构(Linux+Nginx+Mariadb+PHP),实现4个项目一键部署
179 0
|
应用服务中间件 nginx
Ansible模块——软件包管理模块
Ansible模块——软件包管理模块
139 0
|
存储 JSON 数据安全/隐私保护
ansible定义变量和管理事实
ansible定义变量和管理事实
155 0
|
Ubuntu 网络安全 Windows
Ansible 管理windows
Ansible 管理windows
|
存储 缓存 Linux
Ansible最佳实践之 AWX 启用facts缓存和模板问卷调查
写在前面 分享一些 AWX 启用facts缓存和模板问卷调查的笔记 博文内容涉及: 启动facts缓存相关配置Demo 启用模板调查来设置变量demo 食用方式: 需要了解 Ansible 理解不足小伙伴帮忙指正
209 0
Ansible最佳实践之 AWX 启用facts缓存和模板问卷调查
|
数据可视化 API 调度
Ansible最佳实践之 AWX 高级作业工作流的创建和调度
写在前面 分享一些 AWX 高级作业工作流的创建和调度的笔记 博文内容涉及: 创建和启动工作流模板 Demo 工作流调度和通知的相关介绍 食用方式: 需要了解 Ansible 理解不足小伙伴帮忙指正
375 0
Ansible最佳实践之 AWX 高级作业工作流的创建和调度
|
存储 JSON Devops
Ansible最佳实践之 AWX 使用 Ansible 与 API 通信
写在前面 分享一些 AWX 使用 Ansible 与 API 通信的笔记 博文内容涉及: curl 方式调用 AWX API 浏览器接口文档方式调用 AWX API 使用 API 调用方式启动 AWX 中 作业模板 Ansible 模块 uri 的简单介绍 Ansible 剧本方式 调用 API 启动作业模板 理解不足小伙伴帮忙指正
564 0
Ansible最佳实践之 AWX  使用 Ansible 与 API 通信
|
存储 缓存 监控
Ansible最佳实践之 AWX 作业创建和启动
写在前面 分享一些 AWX 作业创建和启动的笔记 博文内容涉及: 创建作业模板 涉及相关参数,作业模板角色配置介绍 运行作业模板并测试的Demo 食用方式: 需要了解 Ansible 理解不足小伙伴帮忙指正
356 0
Ansible最佳实践之 AWX 作业创建和启动
|
网络安全 数据安全/隐私保护
Ansible之 Tower使用User和Team管理访问权限的笔记
写在前面 这部分内容没有太大的差别,所以用旧版本的 Ansible Tower 博文内容涉及: 创建 Tower 用户即角色添加 创建 Tower 团队 即角色添加 食用方式: 需要了解 Ansible 理解不足小伙伴帮忙指正
207 0
Ansible之 Tower使用User和Team管理访问权限的笔记