我们将使用Ansible来执行AWX配置操作,以实现自动化并简化开始过程
尝试使用Ansible自动化来简化AWX设置操作。
由于提供了awx.awx Collection模块集,可以使用它们来创建和管理AWX中的每个对象,因此可以使用Ansible自动化来进行AWX部署后的配置工作。此外,如果结合在GitHub等平台上公开的样例playbook使用,还可以快速开始自动化运维工作。
本次操作是将在Github上公开的NetApp Ontap操作阶段的示例playbook集注册到AWX项目中,并使用Ansible模块将NFS卷创建playbook注册为作业模板。下面是操作的详细内容。
请注意,假设我们已经准备好了用于AWX配置和Ansible执行环境的容器镜像。关于这部分工作,我们之前的文章中有介绍,请参考那篇文章。
假设条件
我正在使用以下环境进行测试。
-
- AWX 20.0.1
-
- ansible 2.10.17
-
- Ansible Collection
netapp.ontap 21.21.0
awx.awx 21.3.0
CentOS 7.7
Python 3.6.8
Ontap 9.9.1
尝试一下
-
- 准备用于 AWX 配置的 Ansible Playbook。
-
- 执行 Ansible 并进行 AWX 配置。
-
- 尝试执行注册的作业模板。
- 尝试更改并执行作业模板中注册的参数。
准备用于AWX设置的Ansible Playbook。
我要准备一个用于配置AWX的Ansible Playbook。
创建用于Ansible Playbook配置的目录。
我会创建一个用于作业的目录。
$ mkdir -p ~/awx/ansible/tasks ~/awx/ansible/vars
$ ls ~/awx/ansible/
tasks vars
将playbook文件(task)创建在~/awx/ansible/tasks目录下。
在tasks目录下创建Playbook文件。
为了进行AWX的配置,我使用了注册AWX组织/清单/主机/项目/执行环境/作业模板的模块。
$ cat <<EOF > ~/awx/ansible/tasks/task_awx_modules.yaml
---
- hosts: localhost
gather_facts: false
vars:
input: &input
controller_host: "{{ var_controller_host }}"
controller_username: "{{ var_controller_username }}"
controller_password: "{{ var_controller_password }}"
validate_certs: "no"
vars_files:
- ../vars/var_awx_modules.yaml
collections:
- awx.awx
tasks:
- name: Create Organization in AWX
awx.awx.organization:
state: present
name: "{{ org_name }}"
<<: *input
- name: Create Project in AWX
awx.awx.project:
state: present
name: "{{ project_name }}"
description: "Git repository"
organization: "{{ org_name }}"
scm_type: "git"
scm_url: "{{ var_scm_url }}"
scm_update_on_launch: True
scm_update_cache_timeout: 60
<<: *input
- name: Add LoD Inventory
awx.awx.inventory:
state: present
name: "{{ inventory_name }}"
description: "Inventory"
organization: "{{ org_name }}"
<<: *input
- name: Host
awx.awx.host:
name: localhost
inventory: "{{ inventory_name }}"
state: present
variables:
ansible_connection : "local"
ansible_python_interpreter: "{{'{{'}} ansible_playbook_python {{'}}'}}"
<<: *input
- name: Add EE to the controller instance
awx.awx.execution_environment:
name: "{{ ee_name }}"
image: "{{ ee_image }}"
<<: *input
- name: Create Job Template for "{{ jobtemp_name }}"
awx.awx.job_template:
state: present
name: "{{ jobtemp_name }}"
job_type: "run"
inventory: "{{ inventory_name }}"
project: "{{ project_name }}"
execution_environment: "{{ ee_name }}"
playbook: "{{ playbook_name }}"
ask_variables_on_launch: "yes"
survey_enabled: "yes"
survey_spec:
name: "Default Survey for 'ONTAP Volume Create'"
description: ""
spec:
- { question_name: "NetApp ONTAP Cluster LIF", required: True, type: "text" , variable: 'netapp_hostname', default: '{{ var_netapp_hostname_default }}' }
- { question_name: "Admin User ID" , required: True, type: "text" , variable: 'netapp_username', default: '{{ var_netapp_username_default }}' }
- { question_name: "Admin User PASSWORD" , required: True, type: "password", variable: 'netapp_password', default: '{{ var_netapp_password_default }}' }
- { question_name: "NFS Volume Name" , required: True, type: "text" , variable: 'volume_name' , default: '{{ var_volume_name_default }}' }
- { question_name: "NFS Volume Size(GB)" , required: True, type: "text" , variable: 'size' , default: '10' }
- { question_name: "ONTAP SVM(vserver) Name" , required: True, type: "text" , variable: 'vserver' , default: '{{ var_vserver_default}}' }
extra_vars: {'https': 'true', 'validate_certs': 'false', 'state':'present','space_guarantee':'volume','comment': 'from awx' }
<<: *input
EOF
$ ls tasks/
task_awx_modules.yaml
$
1-3. 在~/awx/ansible/vars目录下创建Playbook文件(var)。
在vars目录下面创建一个用于存放参数的文件。
同时,根据使用环境的需要,更新以下数值后创建文件。
以下是需要更新的参数:
– AWX的URL、登录ID、登录密码 – 例:http://<> / admin / XXXXXXX
– ansible执行环境的容器镜像信息 – 例:”DOCKER_ID”/ansible-ee:2.11-custom-v2
– ONTAP的Cluster IP或SVM管理LIF IP地址、登录ID、登录密码、SVM名称
此外,使用Ansible运行环境的容器镜像需要安装Ansible Collection: Netapp.Ontap作为集合。有关准备定制容器镜像的步骤,请参考另一篇文章。
$ cat <<EOF > ~/awx/ansible/vars/var_awx_modules.yaml
# AWX Connection Info
var_controller_host: "<< AWXのURL >>"
var_controller_username: "<< AWXのログインID >>"
var_controller_password: "<< AWXのログインパスワード >>"
# AWX Config
var_scm_url : "https://github.com/NetApp-Automation/Tower_defaults.git"
# AWX Job Info
org_name : "ORG 1234 from ansible"
project_name : "Project 1234 from ansible"
inventory_name : "AWX INVENTORY from ansible"
ee_name : "AWX NetApp EE from ansible"
ee_image : "<< ansible実行環境用コンテナイメージの情報 >>"
jobtemp_name : "TEMPLATE 1234 from ansible"
playbook_name : "create_volume.yml"
# ONTAP INFO
var_netapp_hostname_default : "<< Ontap Cluster LIF or SVM管理LIFのIPアドレス >>"
var_netapp_username_default : "<< ONTAPログインID >>"
var_netapp_password_default : "<< ONTAPログインパスワード >>"
var_volume_name_default : "nfsvol31_from_awx"
var_vserver_default : "<< ONTAP SVM名 >>"
EOF
$ ls vars/
var_awx_modules.yaml
$
使用Ansible执行AWX配置设置。
执行Playbook。
将awx.awx Collection引入
我将导入awx.awx Collection。
$ ansible-galaxy collection install awx.awx
/usr/local/lib/python3.6/site-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography and will be removed in a future release.
from cryptography.exceptions import InvalidSignature
Starting galaxy collection install process
Process install dependency map
Starting collection install process
Installing 'awx.awx:21.3.0' to '/root/.ansible/collections/ansible_collections/awx/awx'
Downloading https://galaxy.ansible.com/download/awx-awx-21.3.0.tar.gz to /root/.ansible/tmp/ansible-local-26246cbvahfzx/tmp5b_m6yyc
awx.awx (21.3.0) was installed successfully
$
$ ansible-galaxy collection list
Collection Version
---------------- -------
awx.awx 21.3.0
$
通过Ansible执行AWX配置
执行ansible-playbook命令。
$ cd ~/awx/ansible/tasks
$ ansible-playbook task_awx_modules.yaml
/usr/local/lib/python3.6/site-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography and will be removed in a future release.
from cryptography.exceptions import InvalidSignature
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
PLAY [localhost] *************************************************************************************************************************************************************************************************************************************************************
TASK [Create Organization in AWX] ********************************************************************************************************************************************************************************************************************************************
[WARNING]: You are running collection version 21.3.0 but connecting to AWX version 20.0.1
changed: [localhost]
TASK [Create Project in AWX] *************************************************************************************************************************************************************************************************************************************************
changed: [localhost]
TASK [Add LoD Inventory] *****************************************************************************************************************************************************************************************************************************************************
changed: [localhost]
TASK [Host] ******************************************************************************************************************************************************************************************************************************************************************
changed: [localhost]
TASK [Add EE to the controller instance] *************************************************************************************************************************************************************************************************************************************
changed: [localhost]
TASK [Create Job Template for "TEMPLATE 1234 from ansible"] ******************************************************************************************************************************************************************************************************************
changed: [localhost]
PLAY RECAP *******************************************************************************************************************************************************************************************************************************************************************
localhost : ok=6 changed=6 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
$
尝试执行已注册的作业模板。
通过Ansible Playbook,各种安装后的配置项已注册在AWX上。
在模板中,已注册了一个用于创建ONTAP卷的Playbook,我们将尝试执行它。
执行3-1工作模板
访问AWX后,点击左侧屏幕上的”资源”→”模板”。

点击Ansible注册的作业模板名称为”TEMPLATE 1234 from ansible”的选项。


你可以在AWX界面的左侧的”视图”->”作业”页面上找到这个执行结果的信息,作为执行历史,可以在之后再次确认。
确认执行结果的3-2工作模板
访问ONTAP,并确认卷已被创建。
$ ssh << Ontap Cluster LIF or SVM管理LIFのIPアドレス >> -l << OntapのログインID >>
Password:
Last login time: MM/DD/YYYY hh:mm:ss
Unsuccessful login attempts since last login: 1
$ ontap::> volume show -vserver svm1 -volume nfsvol31_from_awx -fields size
vserver volume size
------- ----------------- ----
svm1 nfsvol31_from_awx 10GB
$ ontap::> exit
尝试修改并执行已注册在工作模板中的参数。
在执行AWX作业模板时,你可以指定任意的参数值。你可以指定其他的卷名称,或者改变卷的大小。
我們試著在更改卷名的值之後,創建一個與先前創建的卷不同的卷。
4-1 运行工作模板
访问AWX,点击左侧屏幕上的”资源”→”模板”选项。
点击已注册的Ansible Job Template “TEMPLATE 1234 from ansible”,然后点击”启动”按钮。

确认4-2任务模板的执行结果。
使用ONTAP访问,确保已创建卷”nfsvol31_from_awx2″。
$ ssh << Ontap Cluster LIF or SVM管理LIFのIPアドレス >> -l << OntapのログインID >>
Password:
Last login time: MM/DD/YYYY hh:mm:ss
Unsuccessful login attempts since last login: 1
$ ontap::> volume show -vserver svm1 -volume nfsvol31_from_awx* -fields size
vserver volume size
------- ----------------- ----
svm1 nfsvol31_from_awx 10GB
svm1 nfsvol31_from_awx2
10GB
2 entries were displayed.
$ ontap::> exit
总结
我在Ansible中尝试使用awx.awx Collection模块和提供的示例Playbook来进行AWX的配置工作。通过组合使用这些工具,可以快速配置自动化环境。我认为这样可以简化自动化准备阶段,并且能够快速启动自动化运营。
通过使用AWX,可以实现团队级别的自动化运维,并提高持续运维等效率。
考虑进一步扩大自动化效果时,可以考虑将面向终端用户的资源分配与Ansible和门户网站进行连接,实现自动化处理。
如果对这种用法感兴趣,欢迎尝试一下。