YAML список фильтрации - PullRequest
0 голосов
/ 20 марта 2020

Может ли кто-нибудь помочь мне по следующим вопросам:

Либо

ok: [localhost] => {
    "tag_info": {
        "changed": false,
        "msg": "All items completed",
        "results": [
            {"vm_list": [ "NSY6TFSANSBL01"]},
        ]


OR

ok: [localhost] => {
    "tag_info": {
        "changed": false,
        "msg": "All items completed",
        "results": [
            {"vm_list": [ "NSY6TFSANSBL01"]},
            {"vm_list": [ "NSY6TFSANSBL01,NSY6TFSANSBL02"]},
            {"vm_list": [ "NSY6TFSANSBL01,NSY6TFSANSBL02,NSY6TFSANSBL03"]},
        ]

Intersection of N lists works with the code
   - set_fact:
        final_list: "{{ final_list|
                        default(tag_info.results.0.vm_list)|
                        intersect(tag_info.results[item].vm_list) }}"
      loop: "{{ range(1, tag_info.results|length, 1)|list }}"   

++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++

Я бы хотел, чтобы final_list занял be {"vm_list": ["NSY6TFSANSBL01"]}, когда существует только один объект vm_list, если он не должен пересекать несколько списков. Не могли бы вы, пожалуйста, дайте мне знать, как написать это.

1 Ответ

0 голосов
/ 20 марта 2020

Запишите это так:

- set_fact:
    final_list: "{{ (tag_info | json_query('results[*].vm_list')|flatten(levels=1)|unique if tag_info.results|length > 1) | default(tag_info.results.0.vm_list) }}"
  loop: "{{ tag_info.results }}"

- debug:
    var: final_list

Допущения:

все объекты vm_list в соответствии с вопросом представляют собой одну строку в массиве.

Я предполагаю, что это не так, и это на самом деле список строк, как показано ниже,

ok: [localhost] => {
    "tag_info": {
        "changed": false,
        "msg": "All items completed",
        "results": [
            {"vm_list": [ "NSY6TFSANSBL01"]},
        ]


OR

ok: [localhost] => {
    "tag_info": {
        "changed": false,
        "msg": "All items completed",
        "results": [
            {"vm_list": [ "NSY6TFSANSBL01"]},
            {"vm_list": [ "NSY6TFSANSBL01","NSY6TFSANSBL02"]},
            {"vm_list": [ "NSY6TFSANSBL01","NSY6TFSANSBL02","NSY6TFSANSBL03"]},
        ]
...