Điểm:1

Accessing dict subelement value

lá cờ ph
azk

Here's my playbook

- name: Host's luns
  debug:
    msg: "{{ luns }}"
  vars:
    luns: "{{ ansible_facts.lvm.pvs }}"

And the output for this is

TASK [Luns del vg] ************************************************************
ok: [awxworker_rhel6] => {
    "msg": {
        "/dev/sda2": {
            "free_g": "20.72",
            "size_g": "79.72",
            "vg": "vg00"
        },
        "/dev/sdb1": {
            "free_g": "3.99",
            "size_g": "4.99",
            "vg": "vg01"
        },
        "/dev/sdc1": {
            "free_g": "0.99",
            "size_g": "4.99",
            "vg": "vg02"
        },
        "/dev/sdd1": {
            "free_g": "4.99",
            "size_g": "4.99",
            "vg": "vg01"
        }
    }
}

I need to get the luns of a matched vg

Ej: "The vg01 luns are: /dev/sdb1 /dev/sdd1"

I have tried this beetwen other ways

- name: Luns del VG
  set_fact:
    vg_luns: "{{ item }}"
  with_items: "{{ ansible_facts.lvm.pvs }}"
    vars:
      VGname: "{{ VG }}"
  when: ansible_facts.lvm.pvs.vg_luns.vg == VGname
  
- name: Print VG's luns
  debug:
    msg:
      - "The {{ VGname }} luns are: {{ vg_luns }}"

VG is an extravariable where I put the matched VGname

$ ansible-playbook -i proyects/Inventory/awx_hosts -l testhost getvgluns.yml -e VG=vg01

Hope you can help

Thanks in advance!
Điểm:1
lá cờ th

Không cần vòng lặp set_fact hoặc Ansible. Chuyển đổi từ điển thành một danh sách và sử dụng các thao tác Jinja bình thường trên đó.

- gỡ lỗi:
    msg: "Các vòng {{ VG }} là: {{ ansible_facts.lvm.pvs | dict2items | selectattr('value.vg', 'equalto', VG) | map(attribute='key') | join(' ' ) }}"
azk avatar
lá cờ ph
azk
Cám ơn rất nhiều! Điều đó chỉ trực tiếp đến những gì tôi cần.
Điểm:0
lá cờ br

Tạo một từ điển của các nhóm. Ví dụ

  - bộ_thực tế:
      vgs: "{{ vgs|d({})|
               kết hợp ({item.0: item.1|
                                bản đồ(thuộc tính='key')|
                                danh sách}) }}"
    vòng lặp: "{{luns|dict2items|groupby('value.vg') }}"

cho

  vss:
    vg00:
    - /dev/sda2
    vg01:
    - /dev/sdb1
    - /dev/sdd1
    vg02:
    - /dev/sdc1

Sau đó, lựa chọn là tầm thường

    - gỡ lỗi:
        msg: "Các vòng chữ {{ VG }} là: {{ vgs[VG]|join(' ') }}"

đưa ra thông điệp

shell> ansible-playbook playbook.yml -e VG=vg01

  msg: 'Vg01 lun là: /dev/sdb1 /dev/sdd1'
azk avatar
lá cờ ph
azk
Đây cũng là một giải pháp hấp dẫn. Có lẽ có một vấn đề về cú pháp vì nó gây ra lỗi cho tôi: ``` THẤT ​​BẠI! => {"msg": "|combine mong đợi từ điển, có \"{'vg00': }\""} ``` Tôi sẽ cố gắng tìm ra nó là gì.
lá cờ br
Thêm bộ lọc *danh sách*. Tôi đã cập nhật câu trả lời. Trên thực tế, cả hai giải pháp đều sử dụng cùng một quy trình. *list* không cần thiết trong giải pháp mà bạn đã chấp nhận vì bộ lọc *join* ngay sau *map*. Ở đây, bộ lọc *tham gia* được sử dụng sau khi nhóm được chọn.
azk avatar
lá cờ ph
azk
Hoàn hảo. Tôi chấp nhận giải pháp của bạn quá. Nó hoạt động tốt. Cám ơn rất nhiều!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.