我们将使用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

尝试一下

    1. 准备用于 AWX 配置的 Ansible Playbook。

 

    1. 执行 Ansible 并进行 AWX 配置。

 

    1. 尝试执行注册的作业模板。

 

    尝试更改并执行作业模板中注册的参数。

准备用于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后,点击左侧屏幕上的”资源”→”模板”。

image.png

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

image.png
image.png

你可以在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”,然后点击”启动”按钮。

Survey

确认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和门户网站进行连接,实现自动化处理。
如果对这种用法感兴趣,欢迎尝试一下。

广告
将在 10 秒后关闭
bannerAds