Ansible AWX
- 是什么
- 基于 Ansible 的 Web 管理平台、REST API
- 提供任务执行引擎,项目管理,用户权限管理
- AWX -> AnsibleWorks
- ansible/awx
- 参考
- 用户手册
- 管理文档
- Ansible AWX vs Tower
- AWX 是快速开发的上游
- ansible/awx-operator
- 注意
- Ansible 也可以操作 Tower/AWX
- 会自动下载 requirements.yml 中的依赖
- 特性
- 支持外部授权 - LDAP、SAML 2.0、OAuth、RADIUS
awxkit
pip3 install awxkit
# 直接使用账号密码
awx --conf.host https://awx.example.org \
--conf.username joe --conf.password secret \
--conf.insecure \
users list
# 登陆
export TOWER_HOST=https://awx.example.org
# 会生成 token
$(TOWER_USERNAME=alice TOWER_PASSWORD=secret awx login -f human)
awx config
# 导入 ssh
awx credentials create --credential_type 'Machine' \
--name 'My SSH Key' --user 'alice' \
--inputs '{"username": "server-login", "ssh_key_data": "@~/.ssh/id_rsa"}'
安装
- 安装文档
- 系统要求
- 2 CPU 4G 内存 20G 硬盘
- PostgreSQL 10+
- 支持安装方式
- Docker Compose
- ansible playbook
- 会启动 PostgreSQL 和 Redis
- 实际启动配置模板 local_docker/templates
- Kubernetes
- stable/postgresql
- PG 会部署为 sts
- stable/postgresql
- HELM
- OpenShift
- Docker Compose
- 配置
- pg_hostname - 如果使用外部 pg 则配置外部主机
- docker_registry - 自定义镜像仓库
VER=$(curl https://api.github.com/repos/ansible/awx/tags -s | jq '.[0].name' -r)
curl -LC- -o ansible-awx-$VER.tar.gz https://github.com/ansible/awx/archive/$VER.tar.gz
tar xvfz ansible-awx-$VER.tar.gz
# 安装
cd awx-$VER/installer
# 安装所需模块
pip3 install docker docker-compose
# 需要提前配置好 inventory
code inventory
# 默认会存储到 ~/.awx
# 启动后可登陆 http://localhost/#/login
ansible-playbook -i inventory install.yml
# 确认安装日志
docker logs -f awx_task
# 命令行
pip3 install awxkit
inventory
# 管理员账号密码
admin_user=awx
admin_password=awx
# DB
pg_hostname=postgresql
pg_port=5432
pg_username=awx
pg_password=awx
pg_database=awx
pg_sslmode=prefer
# 创建展示用的数据
create_preload_data=True
# 用于加密授权信息的密钥
secret_key=00000000-0000-0000-0000-000000000000
broadcast_websocket_secret=00000000-0000-0000-0000-000000000000
# Kubernetes - 可选
kubernetes_context=default
kubernetes_namespace=awx
kubernetes_web_svc_type=ClusterIP
kubernetes_ingress_hostname=awx.example.com
# 自定义注解 - 启用 ACME
kubernetes_ingress_annotations={'cert-manager.io/cluster-issuer': 'letsencrypt'}
kubernetes_ingress_tls_secret=awx-ingress-cert
核心概念
- Project - 项目
- 需要存储 - Git、SVN、Mercurial、本地目录
- 默认本地目录
/var/lib/awx/projects
- 默认本地目录
- Playbooks 的组合
- 需要存储 - Git、SVN、Mercurial、本地目录
- Job Template - 任务模板
- 配置好的可执行任务
- 包含 playbook、inventory、变量 等
- Job - 任务
- 一次执行
- Inventories - 仓库
- 支持从项目 git 导入
- 使用 ansible-inventory 工具
- Credential - 凭证
- 所有涉及到认证相关的信息
- Credential Type - 凭证类型
- 自定义凭证
- 用于注入上下文信息
- 环境变量
- Ansible 额外变量
- 文件模板 - 例如生成
.ini
或.conf
- 单个任务模版每种凭证类型只能有 一个
- Orgnization - 组织
- User - 用户
- Team - 团队
- Instance - 实例
自定义凭证类型
- 分为输入配置和注入配置
输入配置
# 字段定义
fields:
- type: string
id: username
label: Username
- id: password
# 类型
type: string
# string 支持 choices
# "choices": ["A", "B", "C"]
label: Password
secret: true
# 必填字段
required:
- username
- password
注入配置
# 文件模板
file:
template: |-
[mycloud]
token={{ api_token }}
# 环境变量
env:
THIRD_PARTY_CLOUD_API_TOKEN: '{{ api_token }}'
# 文件的绝对路径
MY_CLOUD_INI_FILE: '{{ tower.filename }}'
# Ansible 变量
extra_vars:
some_extra_var: '{{ username }}:{{ password }}'
---
# 多个文件
file:
template.cert_file: |-
[mycert]
{{ cert }}
template.key_file: |-
[mykey]
{{ key }}
env:
# 多个文件的路径
MY_CERT_INI_FILE: '{{ tower.filename.cert_file }}'
MY_KEY_INI_FILE: '{{ tower.filename.key_file }}'
Ansible 创建删除
pip install ansible-tower-cli
- tower_credential_type:
name: Nexus
description: Credentials type for Nexus
kind: cloud
inputs: "{{ lookup('file', 'tower_credential_inputs_nexus.json') }}"
injectors: { 'extra_vars': { 'nexus_credential': 'test' } }
state: present
validate_certs: false
- tower_credential_type:
name: Nexus
state: absent
执行环境
- Execution Environments
- 实例组
- 继承关系 Job Template > Inventory > Organization
- 启动的 AWX 会关联到实例组
- 容器组 - 临时运行环境
- K8S Pod
- 实例组
- Docker 启动的 awx_task 是 CentOS
- HOME=/var/lib/awx
- projects/ - 项目目录
- _ID__NAME/ - 项目目录 - 例如 git
- projects/ - 项目目录
- /var/log/tower/ - 日志
- callback_receiver.log
- dispatcher.log
- management_playbooks.log
- rsyslog.err
- task_system.log
- tower.log
- tower_rbac_migrations.log
- tower_system_tracking_migrations.log
- wsbroadcast.log
- 日志使用 rsyslog - 可以聚合
- HOME=/var/lib/awx
- /api/v2/metrics - 指标监控
- 默认 venv - /var/lib/awx/venv/ansible
- 可修改
最佳实践
- 建议 Job 隔离
- 输出的 Json
https://<tower server name>/api/v2/jobs/<job_id>/job_events/
- 参考
# venv 安装时建议 umask 0022
source /var/lib/awx/venv/ansible/bin/activate
umask 0022
pip install --upgrade pywinrm
deactivate