尝试为NetApp Ansible模块准备一个ansible-builder执行环境

让我们尝试为NetApp Ansible模块准备ansible-builder的执行环境。

使用”ansible-builder”工具可以帮助创建Ansible执行环境,轻松准备自动化执行环境(Execution Environment)的容器镜像,该镜像包含任意的Ansible Collection和Python模块。

在AWX和Ansible Contoroller中,控制平面和执行平面被分离为分散式的模块化架构,Ansible现在在自动化执行环境的容器映像上运行。在这样的使用场景中,可以使用ansible-builder根据playbook的要求简单地准备自动化执行环境的容器映像。

我试着创建了一个容器镜像,以满足实际使用NetApp Ansible模块的playbook的要求,并自动化执行环境。下面是详细的步骤介绍。

前提 tí)

我正在使用以下的环境进行测试。

    • Cent 7.7

 

    • Python 3.6.8

 

    • docker 20.10.9

 

    ansible-builder 1.0.1

尝试一下

    1. 安装ansible-builder

 

    1. 使用ansible-builder创建用于ansible执行环境的容器镜像

 

    尝试运行一个使用简单NetApp Ansible模块的playbook

目录文件结构

以下是每个目录和文件的结构和布局。

~/builder
   ├─ execution-environment.yml
   ├─ requirements.txt
   └─ requirements.yml
~/runner
      ┝─ env
      │   └─ settings     
      └─ project 
          └─ ontap_info.yaml

1. 安装 ansible-builder

首先安装ansible-builder。

请参考Ansible官网上也推荐的内容。

根据前提条件,本文将提供使用CentOS 7的操作示例。

$ sudo python3 -m pip install ansible-builder
〜出力省略〜
$ ansible-builder --version
1.0.1

创建一个用于Ansible执行环境的容器镜像。

使用ansible-builder工具创建新的Ansible执行环境的容器镜像。

这次我将尝试将创建的容器镜像上传到Docker Hub。
如果存在私有注册表,我认为将其上传到那里可能更方便使用。

パラメータ名値備考実行環境イメージ名 ansible-ee:stable-2.11-custom-v2
Baseとするイメージquay.io/ansible/ansible-runner:stable-2.11-latest

如前所述,本文将提供使用CentOS 7的操作示例。

$ DOCKER_ID=<<Docker ID>>
$ sudo docker login -u $DOCKER_ID
Password: <<Docker IDのパスワード>>
Login Succeeded
$ mkdir builder
$ cd builder
$ cat <<EOF > execution-environment.yml
---
version: 1

build_arg_defaults:
  EE_BASE_IMAGE: quay.io/ansible/ansible-runner:stable-2.11-latest

dependencies:
  galaxy: requirements.yml
  python: requirements.txt
EOF
$ cat <<EOF > requirements.txt
netapp-lib
solidfire-sdk-python
EOF
$ cat <<EOF > requirements.yml
---
collections:
  - name: netapp.ontap
  - name: netapp.elementsw
EOF
$ sudo ansible-builder build --tag $DOCKER_ID/ansible-ee:2.11-custom-v2 --container-runtime docker
$ sudo docker push $DOCKER_ID/ansible-ee:2.11-custom-v2


※ 在执行ansible-builder时,如果出现错误消息”请提供先前提交的源映像”,可能是因为Docker版本过旧(需要升级)。
※ 如果显示找不到ansible-builder命令的消息,则可能是路径问题(使用完整路径进行执行)<例如:sudo /usr/local/bin/ansible-builder build –tag $DOCKER_ID/ansible/ee:2.11-custom-v2 –container-runtime docker>。

尝试执行一个使用简单NetApp Ansible模块的playbook。

可以使用ansible-runner命令,在创建的运行环境容器镜像上执行playbook。
这次我们尝试执行一个简单的playbook,输出NetApp存储操作系统Ontap的信息。

使用ansible-builder创建的用于自动化执行环境的容器镜像名称,应该在env目录下的setting文件中进行记录。(じっk)
通过记录使用的镜像名称等信息,它可以自动读取并执行该信息。

$ cd ~
$ mkdir -p ~/runner/env ~/runner/project
$ cat <<EOF > ~/runner/env/settings
container_image: `echo $DOCKER_ID`/ansible-ee:2.11-custom-v2
process_isolation_executable: docker
process_isolation: true
EOF
$ cat <<EOF > ~/runner/project/ontap_info.yaml
---
- name: ONTAP INFO
  hosts: localhost
  gather_facts: no
  vars:
    cluster_hostname: "10.128.211.112"
    cluster_username: "admin"
    cluster_password: "NetApp123$"
  tasks:
    - name: ontap info
      netapp.ontap.na_ontap_rest_info:
        validate_certs : no
        https          : yes
        hostname: "{{ cluster_hostname }}"
        username: "{{ cluster_username }}"
        password: "{{ cluster_password }}"
      register: ontap_info

    - name: msg
      debug: var=ontap_info
EOF
$ sudo pip3 install ansible-runner
$ sudo ansible-runner run runner -p ontap_info.yaml
[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 [ONTAP INFO] *************************************************************************************************************************************************

TASK [ontap info] *************************************************************************************************************************************************
[WARNING]: option 'state' is deprecated.
ok: [localhost]

TASK [msg] ********************************************************************************************************************************************************
ok: [localhost] => {
〜出力省略〜
PLAY RECAP ********************************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
$

如果显示找不到命令的消息,请使用完整路径指定命令,例如:sudo /usr/local/bin/ansible-runner run runner -p ontap_info.yaml。

※ 可以选择在env目录中放置settings文件,或在运行时使用选项指定 < 示例:sudo /usr/local/bin/ansible-runner run runner -p ontap_info.yaml –container-image echo $DOCKER_ID/ansible-ee:2.11-custom-v2 –process-isolation –process-isolation-executable docker >

通过在已安装有Python库和Ansible Collection的Ansible执行环境的容器镜像上执行playbook来运行NetApp模块,并且能够成功地进行处理。

总结

我试着使用ansible-builder创建了一个执行环境。
通过使用ansible-builder,可以简单地使用一些命令来创建适用于自动化执行环境的容器镜像。

通过准备多个容器映像用于自动化执行环境,可以根据playbook选择不同的执行环境。

我們這次使用ansible-runner來進行操作測試,通過這樣的方式,我們所創建的Ansible執行環境可以在AWX等平台上註冊並使用。對於有興趣的人來說,請務必試試在AWX環境中的使用。

我认为您可能会在NetApp的网站上找到一个关于使用单个主机进行AWX的简易测试的配置步骤,可以作为参考。

广告
将在 10 秒后关闭
bannerAds