
Das ist mein Spielbuch
---
- hosts: mytestserver
become: true
become_method: sudo
gather_facts: true
vars:
# To get vgname and lvname from ansible_mounts's device
mt: "{{ MT }}" #Extravariable
disp_pth: "{{ item['device'] }}"
disp_tmp: "{{ disp_pth | basename }}"
DISP: "{{ disp_tmp.split('-') }}"
VGname: "{{ DISP.0 }}"
LVname1: "{{ DISP.1 }}"
DISPP2: "{{ DISP.3|default('') }}"
LVname2: "{{ DISP.1 }}-{{ DISPP2 }}"
LVname: "{{ LVname2 if (disp_tmp | regex_search('--')) else LVname1 }}"
tasks:
- name: Get filesystem values
lvol:
vg: "{{ VGname }}"
lv: "{{ LVname }}"
with_items: "{{ ansible_mounts }}"
when: item.mount == MT
register: myfs
- debug:
var: myfs
Wenn ich es ausführe:
$ ansible-playbook -i proyects/Inventory/awx_hosts -l mytestserver getlvmfacts.yml -e MT=/DATA
Ich erhalte die Werte:
PLAY [mytestserver] ******************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************************************************************************************************************
ok: [mytestserver]
TASK [Get filesystem values] ************************************************************************************************************************************************************************************************************
ok: [mytestserver] => (item={'block_used': 21620, 'uuid': '7fef92b8-8157-43d1-92b4-525a56fa33f8', 'size_total': 1056858112, 'block_total': 258022, 'mount': '/DATA', 'block_available': 236402, 'size_available': 968302592, 'fstype': 'ext4', 'inode_total': 65536, 'options': 'rw', 'device': '/dev/mapper/vgAPP-DATA', 'inode_used': 11, 'block_size': 4096, 'inode_available': 65525})
TASK [debug] ****************************************************************************************************************************************************************************************************************************
ok: [mytestserver] => {
"myfs": {
"changed": false,
"msg": "All items completed",
"results": [
{
"ansible_loop_var": "item",
"changed": false,
"item": {
"block_available": 414770,
"block_size": 4096,
"block_total": 516052,
"block_used": 101282,
"device": "/dev/mapper/vg00-lvol01",
"fstype": "ext3",
"inode_available": 124211,
"inode_total": 131072,
"inode_used": 6861,
"mount": "/",
"options": "rw",
"size_available": 1698897920,
"size_total": 2113748992,
"uuid": "7df9171b-c31f-434f-94c5-344d02775e89"
},
"skip_reason": "Conditional result was False",
"skipped": true
},
{
"ansible_loop_var": "item",
"changed": false,
"item": {
"block_available": 1037688,
"block_size": 4096,
"block_total": 1046016,
"block_used": 8328,
"device": "/dev/mapper/vgDATA-BASET--DATA1",
"fstype": "xfs",
"inode_available": 4194301,
"inode_total": 4194304,
"inode_used": 3,
"mount": "/BASET/DATA1",
"options": "rw",
"size_available": 4250370048,
"size_total": 4284481536,
"uuid": "91689e9b-552c-4f0e-b0ec-0d3d25154a72"
},
"skip_reason": "Conditional result was False",
"skipped": true
},
{
"ansible_loop_var": "item",
"changed": false,
"failed": false,
"invocation": {
"module_args": {
"active": true,
"force": false,
"lv": "DATA",
"opts": null,
"pvs": null,
"resizefs": false,
"shrink": true,
"size": null,
"snapshot": null,
"state": "present",
"thinpool": null,
"vg": "vgAPP"
}
},
"item": {
"block_available": 236402,
"block_size": 4096,
"block_total": 258022,
"block_used": 21620,
"device": "/dev/mapper/vgAPP-DATA",
"fstype": "ext4",
"inode_available": 65525,
"inode_total": 65536,
"inode_used": 11,
"mount": "/DATA",
"options": "rw",
"size_available": 968302592,
"size_total": 1056858112,
"uuid": "7fef92b8-8157-43d1-92b4-525a56fa33f8"
},
"lv": "DATA",
"size": 1024.0,
"vg": "vgAPP"
},
{
"ansible_loop_var": "item",
"changed": false,
"item": {
"block_available": 472667,
"block_size": 4096,
"block_total": 516052,
"block_used": 43385,
"device": "/dev/mapper/vg00-lvol07",
"fstype": "ext3",
"inode_available": 131061,
"inode_total": 131072,
"inode_used": 11,
"mount": "/tivoli",
"options": "rw",
"size_available": 1936044032,
"size_total": 2113748992,
"uuid": "2310d046-eaad-4419-a94b-197c2c56502c"
},
"skip_reason": "Conditional result was False",
"skipped": true
}
]
}
}
Am Ende des übereinstimmenden Einhängepunkts (/DATA) befinden sich drei Dateisystemparameter:
"lv": "DATA",
"size": 1024.0,
"vg": "vgAPP"
Die Frage ist: Wie kann ich auf diese Parameter verweisen?
Ich habe versucht,myfs.lvaber es funktioniert nicht und es gibt noch viele weitere Möglichkeiten. Ich denke, das liegt daran, dass diese nicht drinnen sind.Artikel'
Gewünscht: etwas wie „myfs.lv“ verwenden und „DATA“ abrufen
hoffe ihr könnt helfen. Danke im Voraus!
Antwort1
Wenn Sie sich die Struktur der Debug-Ausgaben ansehen, können Sie sehen, dass dies myfs.lv
eindeutig falsch ist, da die einzigen Schlüssel auf der obersten Ebene msg
, changed
, und sind results
.
Wenn Sie eine Aufgabe in einer Schleife ausführen,Die Ergebnisse werden als Liste unter dem results
Schlüssel gespeichert.der registrierten Variable. Um auf dieses bestimmte Ergebnis zuzugreifen, würden Sie etwas wie Folgendes tun myfs.results.2.lv
:
Das Festcodieren eines Indexes auf diese Weise ist im Allgemeinen jedoch nicht das, was Sie möchten. Sie sollten stattdessen etwas tun, um das gewünschte Ergebnis auszuwählen. würde für das erste nicht übersprungene Ergebnis (myfs.results | reject('skipped') | list | first).lv
abrufen .lv
Oder Sie können es sich leichter machen, indem Sie die erste Aufgabe nicht in eine Schleife einfügen:
tasks:
- name: Get filesystem values
lvol:
vg: "{{ mount_dev_split.0 }}"
lv: "{{ mount_dev_split.1 ~ lv_name_suffix }}"
vars:
mount_dev: "{{ (ansible_facts.mounts | selectattr('mount', 'equalto', MT) | list).0.device }}"
mount_dev_split: "{{ (mount_dev | basename).split('-') }}"
lv_name_suffix: "{{ ('-' ~ mount_dev_split.3 | default('')) if '--' in mount_dev else '' }}"
register: myfs
- debug:
msg: "{{ myfs.lv }}"