Ansible - 모듈 매개변수 값을 참조할 수 없습니다.

Ansible - 모듈 매개변수 값을 참조할 수 없습니다.

이건 내 플레이북이야

---
- 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

내가 실행할 때 :

$ ansible-playbook -i proyects/Inventory/awx_hosts -l mytestserver getlvmfacts.yml -e MT=/DATA

나는 다음과 같은 값을 얻습니다.

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
            }
        ]
    }
}

일치하는 마운트 지점(/DATA) 끝에는 세 가지 파일 시스템 매개변수가 있습니다.

"lv": "DATA",
"size": 1024.0,
"vg": "vgAPP"

문제는 이 매개변수를 어떻게 참조할 수 있는가입니다.

나는 사용해 보았습니다.myfs.lv하지만 작동하지 않으며 다양한 방법이 있습니다. 그 안에 들어있지 않아서 그런 것 같아요'안건'

원하는 것: "myfs.lv"와 같은 것을 사용하고 "DATA"를 가져옵니다.

당신이 도울 수 있기를 바랍니다. 미리 감사드립니다!

답변1

출력을 디버깅하는 구조를 참조하면 myfs.lv최상위 수준의 유일한 키가 msg, changed및 이기 때문에 분명히 잘못된 것을 알 수 있습니다 results.

루프에서 작업을 실행하면results결과는 키 아래에 목록으로 저장됩니다.등록된 변수의 특정 결과에 액세스하려면 다음과 같은 작업을 수행합니다 myfs.results.2.lv.

이와 같은 인덱스를 하드코딩하는 것은 일반적으로 원하는 것이 아니므로 대신 원하는 결과를 선택하기 위한 작업을 수행해야 합니다. 건너뛰지 않은 첫 번째 결과를 (myfs.results | reject('skipped') | list | first).lv검색합니다 .lv

또는 물론 첫 번째 작업에서 반복하지 않음으로써 이 작업을 더 쉽게 만들 수도 있습니다.

  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 }}"

관련 정보