[英]how to extract string from ansible regsiter variable in ansible
[英]Ansible - Getting List Values from within a Dictionary (Regsiter Variable)
所以我正在使用 Ansible 為我們支持的許多服務器處理一些審計點。 在大多數情況下,我不得不使用 shell 模塊來獲取我想要的數據,然后根據通過/失敗情況編寫一些文件。 在很多情況下,這是處理輸出數據的更簡單的方法。 首先,我意識到這不一定是 Ansible 的強項。 我想在某個時候它向公司推銷它可以很容易地做到這一點,我同意 - 在很多方面比僅僅編寫一個自定義的 python/BASH 腳本來做同樣的事情更容易。 所以 - 我確實意識到我在這里稍微彎曲了 Ansible 的概念以進行報告,而不是配置/狀態管理。 然而; 我喜歡這個工具,想向公司展示我們可以從中獲得很多價值。
雖然我可以使用 shell 模塊輕松完成本節,但我想更好地學習 Ansible。 所以想我會發布這個問題。
我正在使用 Yum 模塊來獲取目標主機上的 repolist。 但是我一直對如何提取嵌套在輸出字典中的列表值感到困惑。 我已經對類型進行了一些檢查,據我所知 - 'results' 變量是一個字典,輸出在一個列表中。 我想要做的是從列表中獲取鍵/值,然后根據該輸出執行一些其他任務。 但是對於我的生活 - 我不知道如何做到這一點!
理想情況下 - 我想要么使用一些基於輸出的 'when' 模塊語句(例如,當 repo ID 是.. 這樣做..),或者至少能夠將它們存儲在一個變量中以處理數據。 因此,從這個輸出中,我只想獲取 repoid 以及它是否已啟用。 如何從嵌套列表中獲取這些值?
簡單的劇本:
---
- hosts: localhost
become: yes
tasks:
- name: Section 1.1 - Check Yum Repos
yum:
list: repos
register: section1_1
- name: Debug
debug:
var: section1_1
這是我在此劇本中調試任務的輸出:
TASK [Debug] ****************************************************************************************************************************************************
ok: [localhost] => {
"section1_1": {
"changed": false,
"failed": false,
"results": [
{
"repoid": "ansible",
"state": "enabled"
},
{
"repoid": "epel",
"state": "enabled"
},
{
"repoid": "ol7_UEKR6",
"state": "enabled"
},
{
"repoid": "ol7_latest",
"state": "enabled"
}
]
}
}
我懷疑這對外面的人來說可能很容易。 我一直在嘗試這個,現在已經有一段時間了,終於到了我想我只會問的地步:)
由於在section1_1
中注冊的輸出是字典列表。 我們可以遍歷每個項目,以獲取字典鍵。
例子:
- name: Get the first repo's repoid and state
debug:
msg: "Repo ID: {{ results[0]['repoid'] }}, is {{ results[0]['state'] }}"
# This will show -- Repo ID: ansible, is enabled
同樣,我們可以使用它們的編號訪問其他元素。
或者我們可以循環遍歷數組的每個元素:
- name: loop through array and conditionally do something
debug:
msg: "Repo ID is {{ item.repoid }}, so I am going to write a playbook."
when: item.repoid == 'ansible'
loop: "{{ results }}"
問: “從列表中獲取鍵/值。 ”
答:有更多的選擇。 鑒於下面的簡化數據
section1_1:
changed: false,
failed: false,
results:
- {repoid: ansible, state: enabled}
- {repoid: epel, state: enabled}
- {repoid: test9, state: disabled}
- set_fact:
keys_all: "{{ section1_1.results|
map(attribute='repoid')|
list }}"
- debug:
var: keys_all
給
keys_all:
- ansible
- epel
- test9
- set_fact:
keys_ena: "{{ section1_1.results|
selectattr('state', 'eq', 'enabled')|
map(attribute='repoid')|
list }}"
- debug:
var: keys_ena
給
keys_ena:
- ansible
- epel
使用items2dict創建字典。 例如
- set_fact:
dict: "{{ section1_1.results|
items2dict(key_name='repoid', value_name='state') }}"
- debug:
var: dict
給
dict:
ansible: enabled
epel: enabled
test9: disabled
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.