Puncte:1

Variabila rezultată a mesajului de depanare a imprimării Ansible

drapel hk

Am o sarcină simplă pe care nu o pot depăși.

Am un manual care returnează configurația instanței AWS EC2. Trebuie doar să printez (afișează) adresa_ip_privată.

Aici cartea mea de joc

---
- gazde: locale
  conexiune: locală
  gather_facts: false
  deveni: da
  become_method: activare

  sarcini:

  - nume: gather-info-ec2
    community.aws.ec2_instance_info:
      instance_ids:
        - i-XXXXXAAAAAA

    registru: ec2

  - depanare: msg="{{ ec2.instances.network_interfaces.private_ip_address }}"

Când îl rulez așa, primesc următoarea eroare.

fatal: [localhost]: FAILED! => {"msg": "Sarcina include o opțiune cu o variabilă nedefinită. Eroare a fost: „list object” nu are atribut „network_interfaces”\n\nEroarea pare să fie în „/etc/ansible/playbooks/AWSLinuxMigration /gather_ec2_info.yaml': linia 16, coloana 5, dar poate\nsă fie în altă parte a fișierului, în funcție de problema exactă de sintaxă.\n\nRândul ofensator pare să fie:\n\n\n - depanare: msg=\" {{ ec2.instances.network_interfaces.private_ip_address }}\"\n ^ aici\nS-ar putea să greșim, dar acesta pare că ar putea fi o problemă cu\nlipsă de ghilimele. Indicați întotdeauna parantezele pentru expresia șablonului când\nîncep o valoare. De exemplu:\n\n with_items:\n - {{ foo }}\n\nAr trebui să fie scris ca:\n\n with_items:\n - \"{{ foo }}\"\n"}

Când îl execut fără secțiunea DEBUG și cu -vvv afișează rezultatul de mai jos. Cum extrag și imprimez această adresă? L-am scurtat puțin, dar îți faci o idee

ok: [localhost] => {
    "msg": {
        „schimbat”: fals,
        „eșuat”: fals,
        "instanțe": [
            {
                "ami_launch_index": 0,
                "arhitectura": "x86_64",
                „block_device_mappings”: [
                    {
                        "device_name": "/dev/xvda",
                        „ebs”: {
                            "attach_time": "2020-04-15T16:11:19+00:00",
                            „delete_on_termination”: adevărat,
                            "status": "atașat",
                            "volume_id": "xxxxxx"
                        }
                    }
                ],
                „capacity_reservation_specification”: {
                    "capacity_reservation_preference": "deschis"
                },
                "client_token": "",
                „cpu_options”: {
                    "core_count": 1,
                    „threads_per_core”: 2
                },
                „ebs_optimized”: adevărat,
                "ena_support": adevărat,
                „enclave_options”: {
                    „activat”: fals
                },
                „hibernation_options”: {
                    „configurat”: fals
                },
                "hypervisor": "xen",
                „iam_instance_profile”: {
                    "arn": "xxxxxx",
                    "id": "xxxxxx"
                },
                "image_id": "xxxxx",
                "instance_id": "xxxxx",
                "instance_type": "t3.medium",
                "key_name": "xxxxx",
                "launch_time": "2021-04-21T00:01:25+00:00",
                „metadata_options”: {
                    "http_endpoint": "activat",
                    „http_put_response_hop_limit”: 1,
                    "http_tokens": "opțional",
                    "state": "aplicat"
                },
                "monitorizarea": ​​{
                    "state": "dezactivat"
                },
                „interfețe_rețea”: [
                    {
                        „asociație”: {
                            "ip_owner_id": "xxxx",
                            "public_dns_name": "xxxxx",
                            "public_ip": "xxxx"
                        },
                        "atașament": {
                            "attach_time": "2020-04-15T16:11:18+00:00",
                            "attachment_id": "xxxxx",
                            „delete_on_termination”: adevărat,
                            "device_index": 0,
                            „index_card_de_rețea”: 0,
                            "status": "atașat"
                        },
                        "description": "Interfață de rețea principală",
                        „grupuri”: [
                            {
                                "group_id": "xxxxx",
                                „group_name”: „xxxxx”
                            }
                        ],
                        "interface_type": "interfață",
                        „adrese_ipv6”: [],
                        "mac_address": "xxxxx",
                        "network_interface_id": "xxxx",
                        "owner_id": "xxxxx",
                        „private_dns_name”: „ip-10-0-1-161.ec2.internal”,
                        "private_ip_address": "10.0.1.161",
                        „private_ip_addresses”: [
                            {
                                „asociație”: {
                                    "ip_owner_id": "xxxxx",
                                    "public_dns_name": "xxxx.compute-1.amazonaws.com",
                                    "public_ip": "2.2.2.2"
                                },
                                „primar”: adevărat,
                                "private_dns_name": "ip-333333.ec2.internal",
                                "private_ip_address": "1.1.1.1."
                            }
                        ],
                        „source_dest_check”: adevărat,
                        "status": "în uz"

                    }
                ]
        ]
    }
}
Puncte:0
drapel br

Ambele atribute instanțe și interfețe_rețea sunt liste. Utilizare json_query, de exemplu.

    - depanare:
        msg: „{{ ec2.instances|
                 json_query('[].network_interfaces[].private_ip_address') }}"

Rezultatul va fi și o listă, deoarece ar putea exista mai multe interfețe de rețea și mai multe adrese. În cazul dvs., este posibil să doriți să îl selectați pe primul, de ex.

    - depanare:
        msg: „{{ ec2.instances|
                 json_query('[].network_interfaces[].private_ip_address')|
                 primul }}"
housemd avatar
drapel hk
grozav, asta a funcționat!!! cum înregistrez acest lucru într-o variabilă, astfel încât să pot reutiliza în manualul de joc?
drapel br
Consultați [set_fact](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/set_fact_module.html#ansible-builtin-set-fact-set-host-variable-s-and-fact-s ). Apoi citiți [Cum funcționează comentariile?](https://meta.stackexchange.com/questions/19756/how-do-comments-work) și „Pentru ce sunt comentariile și când nu ar trebui să comentez?” în special.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.