写点什么

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

作者:山河已无恙
  • 2022-12-02
    内蒙古
  • 本文字数:3176 字

    阅读完需:约 10 分钟

写在前面



  • 分享一些 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调度,那么是不可预测的。需要做成有状态应用。

  • 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 osimport socket# Import all so that extra_settings works properlyfrom 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  -- bashbash-5.1$ cd  /var/lib/awx/projectsbash-5.1$ lsbash-5.1$ exitexit
复制代码


生成一个角色作为项目,然后 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  -- bashbash-5.1$ cd /var/lib/awx/projects/bash-5.1$ lsliruilong_manualbash-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  -- bashbash-5.1$ cd /var/lib/awx/projects/bash-5.1$ ls -ltotal 0drwxr-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.lockdrwxr-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.lockdrwxr-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.lockbash-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》


用户头像

InfoQ写作平台签约作者,RHCE、CKA认证 2022-01-04 加入

Java 后端一枚,技术不高,前端、Shell、Python 也可以写一点.纯种屌丝,不热爱生活,热爱学习,热爱工作,喜欢一直忙,不闲着。喜欢篆刻,喜欢吃好吃的,喜欢吃饱了晒太阳。

评论

发布
暂无评论
Ansible最佳实践之 AWX 创建管理项目的一些笔记_12月月更_山河已无恙_InfoQ写作社区