尝试为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
尝试一下
-
- 安装ansible-builder
-
- 使用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。
如果存在私有注册表,我认为将其上传到那里可能更方便使用。
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的简易测试的配置步骤,可以作为参考。