Inventory_hosts saya adalah sebagai berikut:

# inventory
[kafka]
192.168.1.1 
192.168.1.2 

[mysql]
192.168.1.3

Buku pedoman saya sebagai berikut:

Situs.yml:

- name: test
  hosts: all
  roles:
   - kafka

Tugas peran kafka:

# main.yml
- include: test.yml
  when:  "'kafka' in group_names"




# test.yml
---
- name: get kafka groups length
  shell: echo "{{ groups['kafka']|length }}"
  run_once: true
  delegate_to: localhost

- name: Get the main control machine ip
  shell: ip addr show `ip route |awk '$2=="via" {print $5}' |head -1` | awk '$1=="inet" {print $2}'| head -1 | cut -d '/' -f 1
  run_once: true
  delegate_to: localhost

HASIL YANG DIHARAPKAN

get kafka groups length dan Get the main control machine ip masing-masing dapat dieksekusi dan didelegasikan ke eksekusi lokal

HASIL NYATA

TASK [Gathering Facts] **********************************************************************************************************
ok: [192.168.1.1]
ok: [192.168.1.2]
ok: [192.168.1.3]
META: ran handlers

TASK [kafka : get kafka groups length] ***************************************************************************************
skipping: [192.168.1.3] => changed=false 
  skip_reason: Conditional result was False

TASK [kafka : Get the main control machine ip] ************************************************************************************
skipping: [192.168.1.3] => changed=false 
  skip_reason: Conditional result was False

Ini belum selesai. Trik untuk menggoda orang adalah ketika saya mengomentari kumpulan ips mysql ini, saya menemukan bahwa tugas tersebut dapat dieksekusi.

 # inventory
 [kafka]
 192.168.1.1 
 192.168.1.2 

 #[mysql]
 #192.168.1.3

Hasil run baru (Apakah hasil yang saya inginkan):

TASK [Gathering Facts] ******************************************************************************************************************************************************
ok: [192.168.1.1]
ok: [192.168.1.2]

TASK [kafka : get kafka groups length] ************************************************************************************************************************
changed: [192.168.1.1 -> localhost]

TASK [kafka : Get the main control machine ip] ******************************************************************************************************************************
changed: [192.168.1.1 -> localhost]

Mengapa demikian, bagaimana kita dapat menghindari masalah yang tidak pasti ini?

1
cydia 12 Agustus 2019, 19:41

1 menjawab

Jawaban Terbaik

T: "Mengapa demikian, bagaimana kita dapat menghindari masalah yang tidak pasti ini?"

- hosts: all
  tasks:
    - include: test.yml
      when: "'kafka' in group_names"

TASK ...
    skip_reason: Conditional result was False

J: Gunakan include_tasks . Warisan harus bekerja seperti yang diharapkan.

    - include_tasks: test.yml
      when: "'kafka' in group_names"

(diuji dengan kemungkinan 2.7.9)


Rincian

Mengutip dari Variabel Khusus

group_names: Daftar grup yang menjadi bagian dari host saat ini

Dengan persediaan

 [kafka]
 192.168.1.1
 192.168.1.2

Variabel dari semua host adalah group_names: [ "kafka" ] dan permainan bekerja seperti yang diharapkan.

Dengan persediaan

 [kafka]
 192.168.1.1
 192.168.1.2

 [mysql]
 192.168.1.3

Variabel dari satu host adalah group_names: [ "mysql" ]. Dari apa yang Anda temukan, tampaknya di include run_once akan dilewati jika kondisi host mana pun gagal.

skipping: [192.168.1.3] => changed=false 
  skip_reason: Conditional result was False
2
Vladimir Botka 12 Agustus 2019, 20:00