Puncte:0

Ansible | instrucțiunile condiționate nu ar trebui să includă șablonul jinja2 | când variabila nume_grup

drapel cn

Am un fișier simplu ansible main_task.yml care este în buclă dintr-un main.yml .

inventar.ini

[port_22]
192.168.0.189
192.168.0.199
[port_222]
192.168.0.199
[port_888]
192.168.0.200 

sarcină_principală.yml

---
- nume: „rulați acest lucru pe gazde {{ item }}”
  depanare: msg= "acest lucru rulează numai pe p{{ item }} gazde"
  când: „{{ item }} în group_names”
  #când: nume_grup | select("articol|șir") | lista | numără > 0

principal.yml

- gazde: port_22, port_222
  conexiune: locală
  vars:
    porturi:
      - 22
      - 222

  sarcini:
    - nume: Verificare
      include_tasks: principal_task.yml
      buclă: „{{ porturi }}”

Se plânge

[AVERTISMENT]: instrucțiunile condiționate nu ar trebui să includă delimitatori de șablon jinja2, cum ar fi {{ }} sau {% %}. S-a găsit: {{ item }} în group_names

când eliminați șablonul jinja2, obțineți acest lucru:

săriți peste: [192.168.0.189]

Cum pot realiza acest lucru?

Actualizați:

Main.yml modificat

- gazde: host_22, host_222
  #conexiune: locală
  vars:
    porturi:
      - 22
  sarcini:
    - nume: implementați fișiere cu adresa de rețea în ele
      include_tasks: principal_task.yml
      buclă: „{{ porturi }}”

Main_task.yml modificat


- nume: „rulați acest lucru pe gazde {{ item }}”
  depanare: msg= "acest lucru rulează numai pe p{{ item }} gazde"
  când: element din nume_grup
  #când: nume_grup | select("articol|șir") | lista | numără > 0

- nume: numele meu de gazdă
  shell: nume de gazdă; numele gazdă -I
  când: element din nume_grup
  înregistrare: hostname_result

- depanare:
    var: hostname_result.stdout_lines

Ieșire:

   ansible-playbook main.yaml -i inventory.ini -u root

PLAY [gazdă_22, gazdă_222] ******************************************** **************************************************** **************************************************** **************************************************** **************************************************** *****

SARCINA [Adunarea faptelor] ********************************************* **************************************************** **************************************************** **************************************************** **************************************************** *****
ok: [192.168.0.189]
ok: [192.168.0.199]

SARCINA [Verificare] ************************************************ **************************************************** **************************************************** **************************************************** ****************************
incluse: /home/ubuntu/ansible/test/testing_loo/main_task.yml pentru 192.168.0.199, 192.168.0.189 => (articol=22)

SARCINA [rulați acest lucru pe 22 de gazde] ******************************************** **************************************************** **************************************************** **************************************************** **************************************************** ****
omitere: [192.168.0.199]
săriți peste: [192.168.0.189]

SARCINA [numele meu de gazdă] ********************************************* **************************************************** **************************************************** **************************************************** **************************************************** *********
omitere: [192.168.0.199]
săriți peste: [192.168.0.189]

SARCINA [depanare] ************************************************ **************************************************** **************************************************** **************************************************** **************************************************** ***************
ok: [192.168.0.199] => {
    "hostname_result.stdout_lines": "VARIABILA NU ESTE DEFINITĂ!"
}
ok: [192.168.0.189] => {
    "hostname_result.stdout_lines": "VARIABILA NU ESTE DEFINITĂ!"
}
Puncte:1
drapel cn
  când: element din nume_grup

când cuvintele cheie sunt deja implicit într-o expresie Jinja, așa că ștergeți {{ }} din ele.

Totuși, jocul tău are încă probleme.

În ceea ce privește sarcina de verificare din task.yml, debug imprimă doar lucruri, nu realizează verificarea așa cum o face o sarcină assert. De asemenea, ești buclă:ing și rulează pe mai multe gazde, care rulează 2 * 2 = 4 ori și probabil nu ceea ce doriți, ceea ce duce la unele sărituri suplimentare.

Nu văd cum are valoare sarcina de depanare și ar șterge-o complet. Există și alte modalități de a revizui conținutul grupurilor, cum ar fi ansible-inventar instrument de linie de comandă.

O expresie în numele unei sarcini nu va funcționa așa cum v-ați aștepta. Cred că va reflecta doar prima gazdă sau ceva ciudat de genul ăsta.

- gazde: toate
  conexiune: locală

Nu utilizați mai multe gazde cu conexiune locală. Va rula lucrurile de mai multe ori, dar nu ssh nicăieri, ceea ce probabil nu este ceea ce doriți. Pluginurile de acțiune precum debug sunt deja rulate în mod inerent pe localhost. Sau puteți pune localhost este modelul hosts. Asa de:

  1. Șterge conexiune: locală la nivelul jocului.
  2. Utilizați un model de gazde mai specific decât toate. gazde: port_22,port_222 va rula pe ambele grupuri și este mai clar ce intenționați.
divyashree kumar avatar
drapel cn
După cum ați sugerat, am modificat condiția `when: item in group_names`, am șters `connection: local` și am adăugat modelul de gazdă `hosts: port_22,port_222` și am lipit rezultatul. Dar execuția nu are loc corect pe gazdele de la distanță și ieșirea devine goală, deoarece „sărește” gazdele

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.