文章目錄
Ansible 無法解析 module
這是前幾天使用 Helm 安裝 elastic filebeat 時遇到的狀況,除了 production 的其他環境都相當順利,原本 擔心 template 在 generate helm value file 時可能會因為 production 用的帳密,複雜度較高,會出現需要 escape 的情境,所以在真正執行安裝前先用 check mode 檢查一下,想不到 template generate 正常,反而是出現 ansible module 解析異常的錯誤,之前沒有遇過相關問題,找到處理方式後才覺得之前沒遇過反而奇怪,趁這個機會紀錄一下
基本環境設定
- Linux Kernel 3.10.0-1160.36.2.el7.x86_64
- CentOS 7
- ansible 2.9.27
- python 2.7.5 (default, Nov 16 2020, 22:23:17) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
ansible task
- name: Install filebeat with redis module kubernetes.core.helm: name: redisbeat chart_ref: elastic/filebeat chart_version: "{{filebeat_chart_version}}" release_namespace: "{{redisbeat_namespace}}" values: "{{ lookup('template', 'redisbeat.yml.j2') | from_yaml }}"
錯誤資訊
無法解析
kubernetes.core.helm
錯誤訊息
fatal: [localhost]: FAILED! => {"reason": "couldn't resolve module/action 'kubernetes.core.helm'. This often indicates a misspelling, missing collection, or incorrect module path.\n\nThe error appears to be in '/home/vqzopdxbwntwtjv/it-automation-redisslowlog/roles/redis-slowlog/tasks/install.yml': line 4, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n msg: \"{{ lookup('template', 'redisbeat.yml.j2') | from_yaml }}\"\n- name: Install filebeat with redis module\n ^ here\n"}
錯誤截圖
錯誤的參數
這是收到無法解析的錯誤訊息後的嘗試:將 module name 改為
helm
- name: Install filebeat with redis module helm: name: redisbeat chart_ref: elastic/filebeat chart_version: "{{filebeat_chart_version}}" release_namespace: "{{redisbeat_namespace}}" values: "{{ lookup('template', 'redisbeat.yml.j2') | from_yaml }}"
錯誤訊息
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Unsupported parameters for (helm) module: chart_ref, chart_version, release_namespace Supported parameters include: chart, disable_hooks, host, name, namespace, port, state, values"}
錯誤截圖
設定方式
透過列出已安裝的 collection,檢查是否安裝目標 collection
使用 ansible-galaxy
ansible-galaxy collection list
直接列出安裝位置的內容
ls ~/.ansible/collections/ansible_collections && ls /usr/share/ansible/collections/ansible_collections
安裝 Kubernetes Collection for Ansible.
ansible-galaxy collection install kubernetes.core
心得
找到問題原因:未安裝 kubernetes.core
collection 後,我更多疑問了:那其他環境怎麼會有?!我連怎麼檢查都是這次遇到問題才知道怎麼用的.
後來懷疑到是不是版本的差異,對了一輪後發現只有 production 是 ansible 2.9.27,其他環境都是 2.11.* 以上,我沒有找到相關文件說明,但也只能推測可能是後續的版本有內建了
參考資訊
文章作者 Yowko Tsai
上次更新 2023-05-04
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。