以指令設定 Ansible Tower 的 License
這兩天遇到一個狀況,以瀏覽器登入 Ansible Tower 網站,發生了無法設定 License 的情況。是故,只能透過 CLI 方式來進行。
方法有幾個:
- 使用
tower-cli
(若是 AWX,就是awx
) - 使用
curl
- 使用 Tower 這個 collection (3.8.0 以後,而且這 module 在 automation hub)
使用 tower-cli
/ awx
tower-cli setting modify LICENSE '{"eula_accepted" : "true", "subscription_name": "Enterprise Tower up to 100 Nodes", ....}'
awx setting modify LICENSE '{"eula_accepted" : "true", "subscription_name": "Enterprise Tower up to 100 Nodes", ....}'
不過,說真的,誰會知道後面要填什麼…在已經有 license 的主機上取得的結果大致是這樣
{'subscription_name': '', 'sku': '', 'support_level': None, 'instance_count': 20, 'license_date': '', 'license_type': '', 'product_name': '', 'valid_key': True, 'pool_id': '', 'satellite': False}
使用 curl
這方法跟上面是相似的,因為上面的 tower-cli
/ awx
也是使用 Tower API 來處理。
使用 Tower collection
Tower 這個 Collection 是放在 Red Hat Automation Hub 上,所以用 ansible-galaxy collection install
的時候,會出現錯誤,因為 galaxy.ansible.com 上並沒有這個 collection。
取巧的步驟可以參考下面。
第一步,編輯 ansible.cfg
[defaults]
collections_paths=./collections
第二步,安裝 ansible.tower 這個 collection。
到這個網址:https://console.redhat.com/ansible/automation-hub/repo/published/ansible/tower 下載 tarball ,下載完成後解壓縮放到 collections/ansible_collections/ansible/tower 下面。
# 假設 tarball 路徑是 ~/Downloads/ansible-tower-3.8.4.tar.gz
mkdir -p collections/ansible_collections/ansible/tower
cd collections/ansible_collections/ansible/tower
tar xf ~/Downloads/ansible-tower-3.8.4.tar.gz
第三步,新增 playbook.yml
---
- hosts: localhost
collections:
- ansible.tower
# - awx.awx #when using awx.awx
tasks:
- name: Upload manifest
delegate_to: localhost
tower_license:
manifest: "{{ manifest }}"
eula_accepted: yes
tower_username: "{{ tower_username }}"
tower_password: "{{ tower_password }}"
tower_host: "{{ tower_host }}"
validate_certs: no
第四步,到 access.redhat.com 去配置 subscription (步驟可以參考 4. Import a Subscription — Ansible Tower User Guide v3.8.4 ),然後下載為 manifest.zip,在 Tower 主機裡執行以下指令來匯入 license
ansible-playbook playbook.yml -e manifest=./manifest.zip \
-e tower_username=<tower_admin> \
-e tower_password=<tower_admin_password> \
-e tower_host=<tower_host>
這樣就大功告成了。
補充
把 Red Hat Automation Hub 加到 galaxy server list 的方法是在 ansible.cfg
裡加入
[galaxy]
server_list = automation_hub
[galaxy_server.automation_hub]
url=https://cloud.redhat.com/api/automation-hub/
auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token
token=my_ah_token