Ansible
來自 openstack.cloud.server_info 的 Ansible 記憶體清單
我需要創建一個記憶體清單以在 overcloud 實例上執行 playbook,所有實例都沒有直接暴露,只有一個伺服器暴露並且可以用作“網關”又名“JumpHost”又名“ProxyHost”。
我已經完成了以下任務:
在我感興趣的伺服器上獲取資訊
... - name: detect gateway for the {{ project }} tenant openstack.cloud.server_info: cloud: "{{ project }}" server: "*gw*" register: gw_info ...
然後我提取與此實例關聯的 FloatingIP 的資訊:
... - name: Register info of gateway for {{ project }} tenant set_fact: gw_ip: "{{ item.interface_ip }}" loop: "{{ gw_info.openstack_servers }}" ...
獲得所需資訊後,我會收集租戶中所有實例的資訊
... - name: fetch instances on {{ project }} tenant openstack.cloud.server_info: cloud: "{{ project }}" register: servers_info ...
最後使用實例元數據中的必要組創建記憶體清單以執行其他播放
... - name: create in memory inventory add_host: hostname: "{{ item.name }}" ansible_ssh_host: "{{ item.private_v4 }}" ansible_user: "{{ ansible_user }}" ansible_ssh_common_args: '-o ProxyCommand="ssh -i {{ ssh_priv_ key }} -W %h:%p -q ansible@{{ gw_ip }}"' group: - "{{ item.metadata.tool }}" - "{{ item.metadata.environment }}" loop: "{{ servers_info.openstack_servers }}" ...
這是有效的遊戲,但有沒有辦法以更好的方式做到這一點,也許更“優雅”?
我對 ansible 模組 openstack.cloud.server_info 也有疑問,在文件中有參數filter,我嘗試過濾實例的元數據,但它不起作用。
我更喜歡使用元數據而不是伺服器名稱來過濾我的網關,因為像這樣,如果另一個實例獲得帶有“gw”字母的名稱,我的劇本可能會失敗,因為 gw_ip 事實可能包含錯誤的資訊。
考慮使用清單外掛和 DNS 減少生成此主機列表所需執行的任務數量。還使標準庫存功能成為可能,例如記憶體以提高性能。
創建並使用
openstack.cloud.openstack
清單配置並讓它列舉主機。大概是想設置private: yes
。用於keyed_groups
添加以元數據值命名的組,因為此清單實現Constructable
在 vars 中定義跳轉主機的名稱。可能在
group_vars
所以他們只適用於這個租戶/項目/任何東西。# DNS FQDN of jump host jumphost: jumphost.{{ project }}.example.net # ProxyCommand or ProxyJump can be defined as ansible vars ansible_ssh_common_args: '-o ProxyCommand="ssh -i {{ ssh_priv_key }} -W %h:%p -q ansible@{{ jumphost }}"'
繼續播放
localhost
以填寫跳轉主機是什麼。openstack.cloud.server_info
如果有意義,請使用。使用任務更新 AAAA 和 A DNS 記錄{{ jumphost }}
。只要這個 IP 沒有改變,就不需要執行任何任務來再次找到它。