跳至正文
Wener Notes

Ansible AWX

约 4 分钟阅读

awxkit

bash
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
依赖包
bash
# 导入 ssh
awx credentials create --credential_type 'Machine' \
    --name 'My SSH Key' --user 'alice' \
    --inputs '{"username": "server-login", "ssh_key_data": "@~/.ssh/id_rsa"}'

安装

bash
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

ini
# 管理员账号密码
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 的组合
  • Job Template - 任务模板
    • 配置好的可执行任务
    • 包含 playbook、inventory、变量 等
  • Job - 任务
    • 一次执行
  • Inventories - 仓库
    • 支持从项目 git 导入
    • 使用 ansible-inventory 工具
  • Credential - 凭证
    • 所有涉及到认证相关的信息
  • Credential Type - 凭证类型
    • 自定义凭证
    • 用于注入上下文信息
      • 环境变量
      • Ansible 额外变量
      • 文件模板 - 例如生成 .ini 或 .conf
    • 单个任务模版每种凭证类型只能有 一个
  • Orgnization - 组织
  • User - 用户
  • Team - 团队
  • Instance - 实例

自定义凭证类型

  • 分为输入配置和注入配置

输入配置

yaml
# 字段定义
fields:
  - type: string
    id: username
    label: Username
  - id: password
    # 类型
    type: string
    # string 支持 choices
    # "choices": ["A", "B", "C"]
    label: Password
    secret: true
# 必填字段
required:
  - username
  - password

注入配置

yaml
# 文件模板
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 创建删除

bash
pip install ansible-tower-cli
依赖包
yaml
- 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
    • /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 - 可以聚合
  • /api/v2/metrics - 指标监控
  • 默认 venv - /var/lib/awx/venv/ansible
    • 可修改

最佳实践

bash
# venv 安装时建议 umask 0022
source /var/lib/awx/venv/ansible/bin/activate
umask 0022
pip install --upgrade pywinrm
deactivate
依赖包

awx-manager

关联信息

反向链接、本文链接的其他页面和外部资料。

反向链接

  • OPS Awesome
    笔记 · AWX

    自动化工具 · 配置管理 · 任务执行 · 资源管理 · 应用部署 · Ansible · RedHat 收购 · 不需要 Agent · Push 为主,Pull 为辅 · AWX Web 工具 · CFEngine · Chef · Puppet

参考资料

GitHub7 条
其他外链11 条
最近更新commit 017a150编辑