Ansible: buat with_ loop dapat dikonfigurasi

Dibuat pada 25 Agu 2015  ·  90Komentar  ·  Sumber: ansible/ansible

JENIS MASALAH

Ide Fitur

NAMA KOMPONEN

inti

VERSI YANG MUNGKIN

2.1

KONFIGURASI
OS / LINGKUNGAN
RINGKASAN
how: 
    forks: 1
    pause: 0
    squash: name
    label: "{{item.name}}"
    end: on_fail
with_items: ...
  • garpu: garpu dalam loop untuk melakukan item secara paralel, default 1, ini perlu peringatan
  • jeda: antara eksekusi loop, berguna dalam skenario api yang dibatasi _Selesai dalam 2.2_
  • squash: gabungkan semua item ke dalam daftar dan berikan ke opsi yang disediakan, berfungsi seperti opsi hardcoded saat ini untuk apt, yum, dll, secara default seharusnya None _abandon_: opini terbalik, kita harus menghapus fitur ini
  • akhir: kapan harus menginterupsi loop, defaultnya adalah 'item terakhir', opsi? on_fail, on_success (yang pertama)?
  • label: (#13710) apa yang akan ditampilkan saat mengeluarkan loop item _Selesai dalam 2.2_

dokumen ke keadaan saat ini di:

http://docs.ansible.com/ansible/playbooks_loops.html#loop -control

LANGKAH-LANGKAH REPRODUKSI
HASIL YANG DIHARAPKAN
HASIL NYATA
affects_2.1 affects_2.3 feature core

Komentar yang paling membantu

+1 garpu

Saya menunggu modul openstack untuk beralih melalui with_ loop pada 100+ item...
image

Semua 90 komentar

Tolong jangan menyebutnya how . Itu bahkan lebih buruk untuk dibaca daripada become: true . Tetapi fungsi di bawahnya tampak hebat.

termasuk perbaikan untuk #10695

Bagus sekali. Untuk kepentingan bikeshedding, mungkin menyebutnya looping: .

:+1:

+1

+1 terutama untuk paralelisasi host!

:+1:

:+1:
tapi jangan menyebutnya "bagaimana"

jadi di sini adalah solusi untuk memecahkan tugas loop setelah kegagalan pertama

- hosts: localhost
  vars:
    myvar:
        - 1
        - 2
        - 3
        - 4
        - 5
  tasks:
    - name: break loop after 3
      debug: msg={{item}}
      failed_when: item == 3
      register: myresults
      when: not (myresults|default({}))|failed
      with_items: "{{myvar}}"

@bcoca tidak berfungsi dari akhir (mungkin 1.9.3 ubuntu )

TUGAS: [break loop setelah 3] * * * * * * * * * * * * * * ** *
oke: [localhost] => (item=1) => {
"gagal": salah,
"failed_when_result": salah,
"barang 1,
"pesan": "1"
}
oke: [localhost] => (item=2) => {
"gagal": salah,
"failed_when_result": salah,
"barang": 2,
"pesan": "2"
}
gagal: [localhost] => (item=3) => {"failed": true, "failed_when_result": true, "item": 3, "verbose_always": true}
pesan: 3
oke: [localhost] => (item=4) => {
"gagal": salah,
"failed_when_result": salah,
"barang": 4,
"pesan": "4"
}
oke: [localhost] => (item=5) => {
"gagal": salah,
"failed_when_result": salah,
"barang": 5,
"pesan": "5"
}

ah, ya, itu akan berfungsi seperti di 2.0 seperti di 1.9 pendaftaran tidak terjadi sampai setelah loop selesai.

+1 pada garpu

+1
mungkin alih-alih "bagaimana", loop_details atau opsi?

+1

+1, menggunakan wait_for dari localhost untuk menunggu 100 host EC2 muncul membunuh saya...

+1 untuk alasan yang mirip dengan senderista

+1

:+1:

Baik squash dan forks akan menjadi fitur luar biasa yang akan sangat mempercepat eksekusi Ansible.

Saya juga akan mengganti how dengan sesuatu seperti loop_details , loop_settings , loop_options , atau yang serupa.

loop_control , sudah di 2.1 dengan bagian label diimplementasikan.

squash mungkin hilang begitu saja karena mudah untuk memberikan daftar ke modul yang mendukungnya:

apt: name={{listofpackages}}

dan hindari loop sepenuhnya

+1 garpu

+1 garpu

Saya memiliki kasus penggunaan untuk konfigurasi baru untuk jeda bersyarat break_when

+1 garpu dan saya harap ini juga berfungsi untuk memparalelkan urutan tugas untuk dijalankan seperti pada:
- include: service.yml
with_items: "{{services|default([])}}"

Jika tidak, sudah ada async/async_status .

+1 garpu

Saya menunggu modul openstack untuk beralih melalui with_ loop pada 100+ item...
image

+1 pada garpu. Bisa menggunakan ini untuk menyalin AMI ke semua wilayah AWS.

+1 pada garpu. Tolong! menjadikannya bagian dari loop_control

+1 pada garpu

+1 pada garpu

+1, perlu garpu juga :-)

+1 pada garpu

+1 pada garpu

Garpu akan luar biasa, +1

Saya selalu duduk diam tidak ingin berkontribusi pada spam, karena sulit untuk mengukur antara proyek apakah itu disambut atau tidak, tetapi sepertinya kereta garpu +1 telah meninggalkan stasiun!

+1 pada garpu

+1 pada garpu

+1 pada garpu

:+1: di garpu

@bcoca Salam! Terima kasih telah meluangkan waktu untuk membuka masalah ini. Agar komunitas dapat menangani masalah Anda secara efektif, kami memerlukan sedikit lebih banyak informasi.

Berikut adalah item yang tidak dapat kami temukan dalam deskripsi Anda:

  • jenis masalah
  • versi yang memungkinkan
  • nama komponen

Harap tetapkan deskripsi masalah ini dengan template ini:
https://raw.githubusercontent.com/ansible/ansible/devel/.github/ISSUE_TEMPLATE.md

klik di sini untuk bantuan bot

+1 pada garpu

+1 pada garpu!

+1 di Garpu!

+1 pada garpu!

+1 pada garpu!

Ada update di fork? Kapan seharusnya siap?
Kasus penggunaan saya membuat instance sekitar 20 wadah di server dengan with_sequence . Sekarang butuh terlalu banyak usia :(
Saya akan dengan senang hati membantu, tetapi saya memerlukan beberapa tip tentang di mana harus meletakkan tangan

@bitliner tidak ada yang membuat PR untuk itu, jika itu yang Anda minta, sebenarnya sangat sulit untuk dilakukan dengan benar.

untuk masalah Anda, cukup nyatakan X host dalam inventaris dan ulangi hosts: alih-alih with_ untuk membuatnya secara paralel.

inventaris:

[containers]
container[000:020]
hosts: containers
gather_facts: false
tasks:
   - container: state=present name={{inventory_hostname}}

yaitu wadah adalah modul 'buatan'.

@bcoca solusi Anda tidak jelas bagi saya. Yang pasti, apakah ini yang Anda maksud?

file host

[containers]
192.168.1.100
192.168.1.100
192.168.1.100
192.168.1.100
... and so on based on the degree of parallelism I want to get ...

file main.yml

hosts: containers
gather_facts: false
tasks:
   - container: state=present name={{inventory_hostname}}

berdasarkan modul wadah yang harus saya terapkan, benar? Dalam hal ini, saya akan memiliki semua wadah dengan nama yang sama, dan itu tidak dapat diterima, benar?

Selanjutnya, apa saja tantangan untuk melakukan implement loop secara paralel dengan benar?

Kasus penggunaan saya perlu mempercepat tugas ini:

- name: "Start clients"
  docker_container:
    name: "mycontainer-{{ item }}"
    image: myimage
    links: 
      - server-{{item}}:server-{{item}}
  with_sequence: count={{ scale }}

Saya tidak dapat menggunakan skala penulisan buruh pelabuhan karena saya perlu merutekan lalu lintas di antara wadah dengan cara tertentu (itulah sebabnya saya menggunakan with_sequence untuk menghasilkan nama wadah buruh pelabuhan yang berbeda).

Saya bisa membuat modul yang mengambil deklarasi wadah dan berdasarkan parameter skala itu membuat beberapa wadah secara paralel dari jarak jauh. Apakah masuk akal? Apakah Anda memiliki bantuan untuk memahami cara memanggil/menggunakan kembali di myModule modul docker_container dan API apa yang ditawarkan Ansible untuk menjalankan sesuatu secara paralel?

@bitliner Anda tidak mengikuti instruksi saya, saya memiliki nama unik dalam inventaris (menggunakan rentang untuk bekerja seperti urutan). Karena nama unik dalam inventaris, Anda baru saja mendeklarasikan nama yang sama N kali, tetapi masih memiliki satu Host, yang tidak menyebabkan masalah ke-2 Anda pada nama penipu yang menipu karena Anda hanya mengulang lebih dari 1 Host.

Bagaimanapun, jika Anda ingin menindaklanjuti masalah Anda, gunakan ML atau IRC karena akan sedikit keluar dari topik untuk tiket ini.

@bcoca Bagaimana saya bisa memiliki satu host jika Anda menyatakan 20 host?

[containers]
container[000:020]

akan terhubung ke container001 , container002 , dll.

Ini berfungsi untuk memiliki nama unik, tetapi yang tidak jelas bagi saya adalah mengapa Anda mengatakan saya masih memiliki satu Host (bukan 20).
hosts:containers berarti bagi saya 20 host, bukan hanya satu. Apa yang saya abaikan dalam solusi ini?

@bitliner menyebabkan ini:

[containers]
192.168.1.100
192.168.1.100
192.168.1.100
192.168.1.100

bukan 4 host, tapi 1

juga pada titik ini, ini cukup jauh dari topik, jika Anda ingin terus mendapatkan bantuan tentang ini, buka IRC atau ML

Saya telah menyelesaikannya menggunakan

[containers]
ip[000:020] ansible_host=192.168.1.100

dan

- name: "Start containers"
  docker_container:
    name: "my-container-{{ inventory_hostname }}"

Sebuah pertanyaan: pencitraan untuk menambahkan pernyataan fork , apakah perubahan terdiri dari menulis ulang metode run_loop untuk membuatnya mengelola tingkat paralelisme dan asinkron?

dan kemudian mulai 'menyenangkan' ...:

  • apakah garpu loop diperhitungkan terhadap global --forks , buat itu per jarak jauh?
  • apa yang harus dilakukan dengan loop ketika item bergantung pada item sebelumnya (bukan hanya eksekusi tugas, tetapi kondisional, dll)?
  • bagaimana menangani masalah konkurensi ketika beberapa garpu dijalankan pada Host yang sama? yaitu mereka memperbarui file yang sama
  • bagaimana kita menangani pembersihan? sekarang mereka dapat menggunakan kembali dir tmp .. tetapi setiap eksekusi membersihkan dirinya sendiri, sekarang ini dapat menyebabkan masalah.

Dan ada beberapa masalah lain yang saya ketahui .. tentu ada banyak hal yang tidak akan saya sadari sampai seseorang mencoba menerapkannya. Saya punya solusi untuk beberapa, tetapi mulai keluar dari kendali dengan cukup cepat.

@bcoca Loop forking seharusnya tidak diaktifkan secara default. Saya lebih suka melihat set default ke 1 dan memperkenalkannya sebagai parameter forks atau serial , tetapi sertakan peringatan. Kemungkinan akan merusak beberapa kode yang ada. Karena itu, saya sangat menantikan fitur ini (terutama untuk tugas-tugas yang membutuhkan delegate_to )

+1 untuk garpu (salah secara default)

+1 garpu

+1 garpu

+1 garpu

+1 garpu

+1 garpu

+1 untuk fork juga, namun sementara itu ada juga plugin strategi Ansible baru yang memberikan peningkatan kinerja besar secara umum, dan juga untuk loop with_items . Mungkin bagi mereka yang menginginkan garpu karena alasan kinerja, ada baiknya melihat:

https://github.com/dw/mitogen
https://mitogen.readthedocs.io/en/latest/ansible.html

Saya tidak dapat melihat bagaimana ini akan meningkatkan loop with_items dengan tepat. Plugin ini
meningkatkan masalah kinerja yang disebabkan oleh penggunaan ssh sebagai metode koneksi.
Terutama jarak jauh dan jaringan laten dan dengan jumlah besar
dari server.

Ini tidak membantu dengan fungsi cloud AWS atau Azure di mana eksekusi
terjadi pada pengontrol yang memungkinkan dan hanya dijalankan pada satu set item di
sistem cloud itu dan tidak terhubung ke host sama sekali, yang merupakan
masalah utama dengan with_items menjadi lambat. Tidak ada hubungannya dengan set besar
mesin atau latensi atau apa pun yang terkait dengan ssh. Itu hanya fakta
bahwa itu menjalankan fungsi cloud dalam loop with_items secara serial dan tidak ada
dapat mempercepatnya kecuali penyedia cloud meningkatkan kecepatannya atau a
eksekusi paralel dari fungsi-fungsi cloud tersebut dengan memungkinkan.

Itu juga tidak menyebutkan with_items di artikel sama sekali jadi saya tidak bisa melihat caranya
ini akan membantu bahkan dalam sedikit terkecil. Bisakah Anda menjelaskan sedikit lebih banyak?
bagaimana ini bisa membantu? Saya ingin tahu apa yang saya lewatkan jika saya hilang
sesuatu di sini.

Pada Sabtu, 10 Maret 2018 pukul 21:58, NielsH [email protected] menulis:

+1 untuk garpu juga, namun sementara itu ada juga Ansible baru
plugin strategi yang memberikan peningkatan kinerja besar secara umum, dan juga
untuk loop with_items. Mungkin bagi mereka yang menginginkan garpu untuk kinerja
alasan itu layak untuk dilihat:

https://github.com/dw/mitogen
https://mitogen.readthedocs.io/en/latest/ansible.html


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/ansible/ansible/issues/12086#issuecomment-372070418 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AJd59qWI9n_DNmUqpmZYiIOMZAyjJy3uks5tdEyQgaJpZM4Fx8zF
.

Memang, itu tidak akan membantu dalam semua kasus. Namun alasan saya mencari garpu di with_items adalah karena kelambatan dalam memproses setiap item secara individual (bahkan dengan pipelining). Kadang-kadang saya harus membuat sejumlah besar (beberapa ratus) direktori berdasarkan host_vars, atau templat beberapa ratus file. Jadi saya kebanyakan mengulang modul file dan template .

Saya pernah menguji templating 100 file dalam 100 file terpisah melalui with_items vs mengulang item dalam templat jinja itu sendiri dan menggabungkan templat dalam satu file besar. Semuanya dalam satu file membutuhkan waktu 5 detik tetapi membuat 100 file konfigurasi terpisah membutuhkan waktu 30 menit.

Plugin yang saya sebutkan memberikan peningkatan besar bagi saya, saya pikir itu layak disebutkan di sini.

karena loop hanya menjalankan tugas yang sama pada waktu per item, setiap peningkatan dalam kecepatan eksekusi tugas harus diterjemahkan ke dalam loop yang lebih cepat. Ini terjadi hanya untuk memengaruhi 'tugas jarak jauh' sehingga apa pun yang lokal tidak akan melihat keuntungannya.

Sepakat. Saya menggunakan ansible untuk menjalankan hanya tugas lokal. Secara khusus, untuk membangun selusin gambar buruh pelabuhan. Saat ini, dimungkinkan untuk membangunnya secara serial, sehingga membutuhkan banyak waktu dan kurang memanfaatkan CPU multi-core. Saya ingin membuat beberapa gambar buruh pelabuhan secara paralel.

@gjcarneiro maka jangan mendefinisikannya sebagai data, tentukan sebagai host dan targetkan, lalu delegate_to: localhost untuk menjalankan tindakan secara paralel

Hah, terima kasih atas triknya yang rapi :) Tapi tetap saja, meskipun berhasil (saya belum mengujinya) ini adalah cara yang agak berbelit-belit dalam menjalankan tugas secara paralel.

Kemudian lagi, saya mungkin menggunakan ansible untuk tujuan yang sama sekali berbeda dari yang dimaksudkan, jadi ini salah saya sendiri :(

tidak terlalu berbelit-belit, itu adalah bagaimana Ansible dimaksudkan untuk menggunakan paralelisasi, oleh Host, bukan oleh variabel.

Ya, saya mengerti, itu bukan salah Ansible, itu masuk akal. Tapi saya menggunakan Ansible sebagai sistem build (bukan misalnya make), karena Ansible bagus sebagai sistem build dalam banyak hal. Tetapi, dalam kerangka berpikir saya, berpikir sebagai sistem build, "host" tidak masuk akal. Sistem build seperti "make" tidak peduli dengan "host", itu hanya peduli tentang file dan tugas. Saya memaksa Ansible untuk digunakan sebagai sistem build, dan itu menyebabkan sedikit disonansi kognitif, itu saja.

Ansible hanya peduli dengan Host dan Tugas, pertimbangkan gambar yang Anda buat 'host' dan tiba-tiba cocok dengan kedua paradigma.

Ansible adalah alat manajemen konfigurasi untuk banyak hal lainnya, jaringan
perangkat, baik nyata maupun Virtual, untuk sejumlah besar layanan cloud seperti
database, layanan web seperti eleastic beanstalk, lambda, dan semuanya
komponen yang berlaku untuknya seperti komponen keamanan IAM, sedangkan Ansible adalah
bagus di host jika Anda masih menjalankan sebagian besar VM/host yang pada dasarnya Anda gunakan
TI awal 2000-an. Tidak menyinggung siapapun disini kadang penting
alasan untuk menjalankan VM atau bahkan wadah buruh pelabuhan tetapi semuanya kembali ke
alasan warisan. Bahkan semakin banyak host yang akan menjadi kurang dari
apa yang diotomatiskan. IMO Jika kita tidak mendapatkan paralel dengan_items, kita mungkin sebagai
baik memo mungkin semua bersama-sama.

Setelah mengatakan bahwa saya akan berpikir positif di sini dan dan mencoba menggunakan
delegasi_to untuk beberapa layanan cloud, maksud saya, saya tidak pernah mencoba mengeksekusi pada 200+
Komponen cloud yang saya perlukan dengan cara ini saya kira hanya menanyakan daftar
dan membuangnya ke file host dalam format host dengan kemungkinan, lalu coba
delegasi_to: localhost Saya akan memberikan umpan balik hasil saya di sini. Jika berhasil di
setidaknya kita bisa melakukan permintaan tarik dokumentasi tentang cara mengatasinya
with_item loop serial masalah dengan cara ini. Kami dapat memastikan untuk memiliki tautan ke
mereka di bagian modul cloud dan bagian untuk buruh pelabuhan.

Pada Senin, 12 Maret 2018 pukul 18:49, Brian Coca [email protected] menulis:

Ansible hanya peduli dengan Tuan Rumah dan Tugas, pertimbangkan gambar Anda
membangun 'host' dan tiba-tiba cocok dengan kedua paradigma.


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/ansible/ansible/issues/12086#issuecomment-372422169 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AJd59nhLIM3s3BL_xM_WwbJS6-uROzjSks5tdsNCgaJpZM4Fx8zF
.

@gjcarneiro maka jangan mendefinisikannya sebagai data, tentukan sebagai host dan targetkan, lalu delegasikan_to: localhost untuk menjalankan tindakan secara paralel

Ini adalah pendekatan yang sangat bagus tetapi tampaknya tidak berfungsi di dalam solusi untuk memulai ulang dengan simulasi serial=1 (#12170). Jadi opsi untuk paralelisasi akan menambah lebih banyak fleksibilitas.

tidak diragukan lagi, tetapi juga menambahkan lapisan kompleksitas yang sangat besar dan kebutuhan untuk menangani tindakan bersamaan pada satu Host ala hosts:all + lineinfile + delegate_to: localhost

HRrm sejauh ini saya telah membuat tes kecil untuk delegasi_to: 127.0.0.1 for
tugas penghapusan karena ini juga merupakan masalah dalam skala massal.

Buku pedoman saya terlihat seperti ini:

  • host: "{{ DeploymentGroup }}"

    tugas:

    • nama: hapus vm dan semua sumber daya terkait
      Azure_rm_virtualmachine:
      resource_group: "{{ host_vars[item]['resource_group'] }}"
      nama: "{{ inventory_hostname }}"
      keadaan: absen

    delegasi_ke: 127.0.0.1


Sayangnya masih mencoba untuk terhubung ke mesin yang terdaftar di host untuk
jalankan tugas Azure Azure_rm_virtualmachine.
Apakah saya melakukan ini dengan benar? Sepertinya saya melewatkan sesuatu, tetapi saya mencoba ini
sebelumnya dengan berbagai cara jadi hanya ingin tahu Anda bisa melakukannya
ini.

Apakah ini benar-benar berhasil? Mudah-mudahan ini hanya beberapa masalah sintaks.

Pada Senin, 12 Mar 2018 pukul 19:55, Isaac Egglestone < [email protected]

menulis:

Ansible adalah alat manajemen konfigurasi untuk banyak hal lainnya,
perangkat jaringan, baik nyata maupun Virtual, untuk sejumlah besar cloud
layanan seperti database, layanan web seperti pohon kacang eleastic, lambda
dan semua komponen yang berlaku untuknya seperti komponen keamanan IAM, sementara
Ansible bagus di host jika Anda masih menjalankan sebagian besar VM/host Anda
pada dasarnya di awal 2000-an TI. Tidak menyinggung siapa pun di sini kadang-kadang
alasan penting untuk menjalankan VM atau bahkan wadah buruh pelabuhan tetapi semuanya
kembali ke alasan warisan. Bahkan semakin banyak host yang akan
menjadi kurang dari apa yang mengotomatisasi. IMO Jika kita tidak sejajar
with_items kita mungkin juga membuang semua bersama-sama.

Setelah mengatakan bahwa saya akan berpikir positif di sini dan dan mencoba menggunakan
delegasi_to untuk beberapa layanan cloud, maksud saya, saya tidak pernah mencoba mengeksekusi pada 200+
Komponen cloud yang saya perlukan dengan cara ini saya kira hanya menanyakan daftar
dan membuangnya ke file host dalam format host dengan kemungkinan, lalu coba
delegasi_to: localhost Saya akan memberikan umpan balik hasil saya di sini. Jika berhasil di
setidaknya kita bisa melakukan permintaan tarik dokumentasi tentang cara mengatasinya
with_item loop serial masalah dengan cara ini. Kami dapat memastikan untuk memiliki tautan ke
mereka di bagian modul cloud dan bagian untuk buruh pelabuhan.

Pada Senin, 12 Maret 2018 pukul 18:49, Brian Coca [email protected] menulis:

Ansible hanya peduli dengan Tuan Rumah dan Tugas, pertimbangkan gambar Anda
membangun 'host' dan tiba-tiba cocok dengan kedua paradigma.


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/ansible/ansible/issues/12086#issuecomment-372422169 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AJd59nhLIM3s3BL_xM_WwbJS6-uROzjSks5tdsNCgaJpZM4Fx8zF
.

Oke, jadi menonaktifkan pengumpulan fakta memperbaiki masalah ini, namun itu menyebabkan
satu lagi, host_vars tidak lagi berisi inventaris dinamis biru dari
standar di.

Jadi resource_group: "{{ Host_vars[item]['resource_group'] }}" tidak
bekerja di atas dan perlu dikodekan ke nama grup sumber daya.

Pada Minggu, 18 Mar 2018 pukul 11:14, Isaac Egglestone <
[email protected]> menulis:

HRrm sejauh ini saya telah membuat tes kecil untuk delegasi_to: 127.0.0.1 for
tugas penghapusan karena ini juga merupakan masalah dalam skala massal.

Buku pedoman saya terlihat seperti ini:

  • host: "{{ DeploymentGroup }}"

    tugas:

    • nama: hapus vm dan semua sumber daya terkait
      Azure_rm_virtualmachine:
      resource_group: "{{ host_vars[item]['resource_group'] }}"
      nama: "{{ inventory_hostname }}"
      keadaan: absen

    delegasi_ke: 127.0.0.1


Sayangnya masih mencoba untuk terhubung ke mesin yang terdaftar di host untuk
jalankan tugas Azure Azure_rm_virtualmachine.
Apakah saya melakukan ini dengan benar? Sepertinya saya melewatkan sesuatu, tetapi saya mencoba ini
sebelumnya dengan berbagai cara jadi hanya ingin tahu Anda bisa melakukannya
ini.

Apakah ini benar-benar berhasil? Mudah-mudahan ini hanya beberapa masalah sintaks.

Pada Senin, 12 Mar 2018 pukul 19:55, Isaac Egglestone <
[email protected]> menulis:

Ansible adalah alat manajemen konfigurasi untuk banyak hal lainnya,
perangkat jaringan, baik nyata maupun Virtual, untuk sejumlah besar cloud
layanan seperti database, layanan web seperti pohon kacang eleastic, lambda
dan semua komponen yang berlaku untuknya seperti komponen keamanan IAM, sementara
Ansible bagus di host jika Anda masih menjalankan sebagian besar VM/host Anda
pada dasarnya di awal 2000-an TI. Tidak menyinggung siapa pun di sini kadang-kadang
alasan penting untuk menjalankan VM atau bahkan wadah buruh pelabuhan tetapi semuanya
kembali ke alasan warisan. Bahkan semakin banyak host yang akan
menjadi kurang dari apa yang mengotomatisasi. IMO Jika kita tidak sejajar
with_items kita mungkin juga membuang semua bersama-sama.

Setelah mengatakan bahwa saya akan berpikir positif di sini dan dan mencoba menggunakan
delegasi_to untuk beberapa layanan cloud, maksud saya, saya tidak pernah mencoba mengeksekusi pada 200+
Komponen cloud yang saya perlukan dengan cara ini saya kira hanya menanyakan daftar
dan membuangnya ke file host dalam format host dengan kemungkinan, lalu coba
delegasi_to: localhost Saya akan memberikan umpan balik hasil saya di sini. Jika berhasil di
setidaknya kita bisa melakukan permintaan tarik dokumentasi tentang cara mengatasinya
with_item loop serial masalah dengan cara ini. Kami dapat memastikan untuk memiliki tautan ke
mereka di bagian modul cloud dan bagian untuk buruh pelabuhan.

Pada Senin, 12 Mar 2018 pukul 18:49, Brian Coca [email protected]
menulis:

Ansible hanya peduli dengan Tuan Rumah dan Tugas, pertimbangkan gambar Anda
membangun 'host' dan tiba-tiba cocok dengan kedua paradigma.


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/ansible/ansible/issues/12086#issuecomment-372422169 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AJd59nhLIM3s3BL_xM_WwbJS6-uROzjSks5tdsNCgaJpZM4Fx8zF
.

Oke jadi saya telah memodifikasi PlayBook di bawah ini untuk mencoba beberapa hal.

Pertama saya mencoba mengatur delegasi_facts: Benar jika ini membantu tetapi tentu saja
bahkan berdasarkan dokumentasi saya tidak benar-benar berharap itu berhasil.
2 saya mengatur kumpulkan_fakta: tidak dan mencoba menjalankan pengaturan untuk mengurangi fakta
mengumpulkan apa-apa berharap itu akan memilih untuk tidak terhubung sama sekali, tapi dari
saja seperti yang diharapkan masih mencoba untuk terhubung ke mesin.
3 Mencoba pengaturan koneksi: localhost tapi anehnya masih mau
terhubung dari jarak jauh ke mesin untuk mengumpulkan fakta meskipun ia mengetahuinya
akan menjalankan permainan secara lokal, sedikit mengganggu di sana tetapi saya mendapatkan logika sebagai
bagaimana lagi ia akan mengetahui detail tuan rumah yang bersangkutan tanpa melakukan
ini..

Saya mungkin bisa menggunakan buku pedoman untuk menyalakan mesin terlebih dahulu dan kemudian membiarkan
memungkinkan login ke mereka dan mengumpulkan fakta-fakta yang tidak dibutuhkan. Ini akan menjadi begitu
Saya bisa membuat Host_vars berfungsi dan kemudian menghapus mesin. Saya ingin tahu
jika ada yang punya solusi yang lebih baik di sini karena itu juga memakan waktu yang sangat lama
upaya ketika saya memiliki seratus atau lebih mesin dan saya harus menyalakannya
semuanya hanya untuk kemudian menghapusnya.

Sejauh ini saya melihat menggunakan ini sebagai solusi alih-alih paralel with_items
solusi memiliki potensi tetapi mesin yang bersangkutan masih perlu
up dan dapat dijangkau jika Anda memerlukan fakta apa pun dari Azure_rm.py saat Anda
lakukan ini sehingga setidaknya ada satu peringatan di sana. Itu kecuali ada yang tahu
cara mendapatkan akses ke host_vars dari Azure yang diteruskan melalui standar di
ketika mengumpulkan_fakta: tidak

Sebenarnya saya tentu saja memiliki masalah yang sama ketika saya menjalankan semua ini menggunakan a
with_items list, namun saya berharap untuk menghindari pekerjaan itu jika saya
akan menggunakan host lagi. Solusinya adalah membuang Azure_rm.py ke a
json pada baris perintah dan kemudian memuat ke dalam variabel untuk mendapatkan
akses ke mereka lagi.

Jika saya menantikan tujuan akhir saya di sini untuk memodifikasi ratusan atau bahkan ribuan
komponen tanpa server secara paralel, mungkin ini akan baik-baik saja yang saya bisa
gunakan hal-hal seperti Azure_rm_functionapp_facts
http://docs.ansible.com/ansible/latest/azure_rm_functionapp_facts_module.html
ke
mengumpulkan fakta tentang mereka dan menggunakannya dalam drama dalam teori meskipun ini
belum diuji.

Saya masih tidak memiliki logika yang bagus tentang bagaimana melakukan ini dengan benar untuk membuat
dokumentasi tarik permintaan tentang itu karena metode ini tampaknya sejauh ini sebagian besar
tergantung pada apa yang Anda lakukan dan saya tidak yakin saya ingin menyarankan menggunakan
json dump hack dalam dokumentasi.

Saya akan menunggu umpan balik dari siapa pun yang peduli tentang ini
daftar masalah ini untuk memutuskan langkah saya selanjutnya. Sementara itu saya akan menggunakan retasan saya untuk mendapatkan
pekerjaan saya segera selesai.


  • host: "{{ DeploymentGroup }}"
    mengumpulkan_fakta: tidak
    tugas:

    • mempersiapkan:

      kumpulkan_subset=!semua,!min

    • nama: hapus vm dan semua sumber daya terkait

      Azure_rm_virtualmachine:

      resource_group: "{{ host_vars[inventory_hostname]['resource_group']

      }}"

      nama: "{{ inventory_hostname }}"

      keadaan: absen

      delegasi_ke: localhost

      delegasi_fakta: Benar


Pada Minggu, 18 Mar 2018 pukul 12:04, Isaac Egglestone <
[email protected]> menulis:

Oke, jadi menonaktifkan pengumpulan fakta memperbaiki masalah ini, namun itu menyebabkan
satu lagi, host_vars tidak lagi berisi inventaris dinamis biru dari
standar di.

Jadi resource_group: "{{ Host_vars[item]['resource_group'] }}"
tidak berfungsi di atas dan perlu dikodekan ke grup sumber daya
nama.

Pada Minggu, 18 Mar 2018 pukul 11:14, Isaac Egglestone <
[email protected]> menulis:

HRrm sejauh ini saya telah membuat tes kecil untuk delegasi_to: 127.0.0.1 for
tugas penghapusan karena ini juga merupakan masalah dalam skala massal.

Buku pedoman saya terlihat seperti ini:

  • host: "{{ DeploymentGroup }}"

    tugas:

    • nama: hapus vm dan semua sumber daya terkait
      Azure_rm_virtualmachine:
      resource_group: "{{ host_vars[item]['resource_group'] }}"
      nama: "{{ inventory_hostname }}"
      keadaan: absen

    delegasi_ke: 127.0.0.1


Sayangnya masih mencoba untuk terhubung ke mesin yang terdaftar di host
untuk menjalankan tugas Azure Azure_rm_virtualmachine.
Apakah saya melakukan ini dengan benar? Sepertinya saya melewatkan sesuatu, tetapi saya mencoba
ini sebelumnya dengan berbagai cara jadi hanya ingin tahu Anda bisa
melakukan hal ini.

Apakah ini benar-benar berhasil? Mudah-mudahan ini hanya beberapa masalah sintaks.

Pada Senin, 12 Mar 2018 pukul 19:55, Isaac Egglestone <
[email protected]> menulis:

Ansible adalah alat manajemen konfigurasi untuk banyak hal lainnya,
perangkat jaringan, baik nyata maupun Virtual, untuk sejumlah besar cloud
layanan seperti database, layanan web seperti pohon kacang eleastic, lambda
dan semua komponen yang berlaku untuknya seperti komponen keamanan IAM, sementara
Ansible bagus di host jika Anda masih menjalankan sebagian besar VM/host Anda
pada dasarnya di awal 2000-an TI. Tidak menyinggung siapa pun di sini kadang-kadang
alasan penting untuk menjalankan VM atau bahkan wadah buruh pelabuhan tetapi semuanya
kembali ke alasan warisan. Bahkan semakin banyak host yang akan
menjadi kurang dari apa yang mengotomatisasi. IMO Jika kita tidak sejajar
with_items kita mungkin juga membuang semua bersama-sama.

Setelah mengatakan bahwa saya akan berpikir positif di sini dan dan mencoba menggunakan
delegasi_to untuk beberapa layanan cloud, maksud saya, saya tidak pernah mencoba mengeksekusi pada 200+
Komponen cloud yang saya perlukan dengan cara ini saya kira hanya menanyakan daftar
dan membuangnya ke file host dalam format host dengan kemungkinan, lalu coba
delegasi_to: localhost Saya akan memberikan umpan balik hasil saya di sini. Jika berhasil di
setidaknya kita bisa melakukan permintaan tarik dokumentasi tentang cara mengatasinya
with_item loop serial masalah dengan cara ini. Kami dapat memastikan untuk memiliki tautan ke
mereka di bagian modul cloud dan bagian untuk buruh pelabuhan.

Pada Senin, 12 Mar 2018 pukul 18:49, Brian Coca [email protected]
menulis:

Ansible hanya peduli dengan Tuan Rumah dan Tugas, pertimbangkan gambar Anda
membangun 'host' dan tiba-tiba cocok dengan kedua paradigma.


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/ansible/ansible/issues/12086#issuecomment-372422169 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AJd59nhLIM3s3BL_xM_WwbJS6-uROzjSks5tdsNCgaJpZM4Fx8zF
.

Saya memiliki kasus penggunaan untuk garpu juga, yang akan membuat ini jauh lebih mudah. Buku pedoman ini menyebarkan banyak instance openstack melalui terraform dengan ip mengambang yang dipilih secara acak. Kemudian saya mengulangi ips untuk memeriksa apakah port 22 terbuka pada setiap Host yang dibuat. Metode saat ini untuk melakukan ini adalah dengan playbook multiplay:

- hosts: localhost
  connection: local
  gather_facts: no
  tasks:
...
  - name: Run terraform
    terraform:
      plan_file: '{{tf_plan | default(omit)}}'
      project_path: '{{terraform_path}}/{{infra}}'
      state: '{{state}}'
      state_file: '{{stat_tfstate.stat.exists | ternary(stat_tfstate.stat.path, omit)}}'
      variables: '{{terraform_vars | default(omit)}}'
    register: tf_output

  - name: Add new hosts
    with_items: '{{tf_output.outputs.ip.value}}' # configued this in terraform to output a list of assigned ips.
    add_host:
      name: '{{item}}'
      groups: new_hosts

- hosts: new_hosts
  gather_facts: no
  connection: local
  tasks:
   - name: Wait for port 22 to become available
     wait_for:
       host: '{{ansible_host}}'
       port: 22
       state: started
       timeout: 60

Ini dijalankan dengan: ansible-playbook -i localhost, deploy-test-clients.yml --extra-vars="infra=terraform_os_instances state=present"
Ini tentu saja merupakan solusi terbatas karena Anda tidak selalu memiliki daftar ips yang dapat diurai dengan rapi untuk digunakan.

Karena banyak orang tampaknya berjuang dengan kinerja file templating secara lokal, mungkin modul template_local tertentu dapat dibuat untuk menyelesaikan masalah khusus ini. Setidaknya itu akan menjadi awal... Aku akan mencoba sendiri tapi tidak akan punya waktu untuk masa depan.

30+ menit untuk membuat templat 100 file yang dapat dilakukan dalam 5 detik dengan jinja adalah hal yang konyol.

@saplla templating selalu terjadi secara lokal, satu-satunya hal yang terjadi dari jarak jauh adalah menyalin templat dan mengatur izin.

Untuk memperjelas, saya berbicara tentang pengguna yang ingin membuat file template sebagai tugas lokal, misalnya untuk memasukkan ke sistem build lain, atau dalam kasus saya, untuk menyebarkan sumber daya k8s menggunakan kubectl.

Maksud saya adalah membongkar perulangan dan templating ke jinja melalui modul yang merupakan pembungkus sederhana. Modul dapat mengambil beberapa konteks dan definisi loop (apa yang biasanya dimasukkan ke dalam with_nested dan teman-teman) dan hanya memotong yang memungkinkan sepenuhnya untuk tugas ini (mungkin pembungkusnya dapat menjalankan jinja secara paralel jika mempercepat) .

Itu bisa dipanggil seperti ini:

    template_parallel:
      src: "{{ item[0] }}"
      dest: "{{ tempdir }}/{{ item[1] }}-{{ item[0] | basename }}"
      context: "{{ hostvars[inventory_hostname] }}"
      nested:
      - "{{ templates.stdout_lines }}"
      - "{{ namespaces.stdout_lines }}"

Contoh di atas mengambil semua variabel yang didefinisikan oleh ansible sebagai konteksnya, tetapi setiap dict dapat diteruskan.

Seperti yang saya katakan, saya tidak punya waktu untuk mengerjakan ini sekarang, tetapi apakah pendekatannya terdengar layak @bcoca ?

Itu mengasumsikan bahwa setiap item independen, itu tidak selalu terjadi, Anda dapat membuat nilai item saat ini bergantung pada yang sebelumnya dan/atau hasil dari iterasi sebelumnya, atau mereka hanya bisa kumulatif.

Sebagian besar waktu yang dihabiskan templating berkaitan dengan vars, bukan templat itu sendiri, karena mereka harus konsisten, Anda tidak akan mendapatkan banyak paralelisasi kecuali Anda bersedia mengubah perilaku yang akan mematahkan asumsi saat ini.

Juga, template sudah paralel, berdasarkan host, hanya tidak berdasarkan item.

Oke terima kasih atas pemikirannya. Ini sebenarnya cukup baik untuk kasus penggunaan saya dan sepertinya itu juga untuk beberapa orang lain di utas ini. Saya hanya menggunakan kemungkinan untuk memuat konfigurasi hierarkis dan file template secara lokal sebelum menjalankan beberapa biner yang menyebarkannya (kubectl, helm, dll). Saya akan senang dengan modul templating yang sangat sederhana dan ringan jika begitu berkinerja sehingga mengurangi waktu templating dari menit ke detik.

Saya akan mencoba untuk melihat ini ketika itu menjadi masalah bagi kami, kecuali seseorang mengalahkan saya untuk itu.

Saya awalnya mengajukan #10695 tetapi melihat bahwa ini akan memakan waktu cukup lama untuk disatukan, saya akhirnya menangani kasus penggunaan ini dengan skrip Shell (mis. katakan saja saya harus melakukan sesuatu pada 50 Git repo pada satu Host, saya menggunakan Ansible untuk menjalankan satu skrip sekali yang melakukan hal itu 50 kali). Sayangnya, ini berarti menyerahkan beberapa hal yang Anda dapatkan secara gratis dengan Ansible, seperti pelaporan perubahan yang sangat terperinci, dan Anda juga harus menerapkan sendiri semua logika "jalankan hanya jika" dan sangat berhati-hati dengan penanganan kesalahan, tetapi itu mungkin dua kali lipat lebih cepat. Dengan demikian, bahkan jika kami akhirnya mendapatkan opsi "paralel" di masa mendatang, itu mungkin tidak secepat skrip khusus saya dan saya mungkin tidak akan repot-repot beralih ke sana.

@wincent loop paralel mungkin masih akan selalu lebih lambat daripada skrip shell/program khusus, karena Ansible melakukan lebih dari sekadar 'menerapkan tindakan'.

@bcoca : ya, itu menegaskan pemahaman saya.

@saplla k8s_raw lebih baik daripada menggunakan template untuk ini, Anda dapat memasukkan yaml di inventaris Anda jika diperlukan :) (bukan subjek PR ini)
bagaimana keadaan saat ini tentang ini? Bisakah kita mengharapkan sesuatu di 2.6 @bcoca ?
Saya mengelola ribuan hak istimewa postgresql di cluster DB saya dan 25 menit sangat lambat

@nerzhul Terima kasih tapi itu tidak lebih baik bagi kami. Terlalu banyak sihir. Kami membutuhkan template.

@sapila Anda selalu dapat membuat target Host per templat untuk memparalelkan templating sebanyak mungkin dan kemudian menggunakan pemutaran atau delegasi berikutnya untuk mengirimkan ke host aktual yang tepat.

@bcoca sedikit meretas :)

tidak sama sekali, ini BANYAK peretasan, tetapi berfungsi hari ini

Apakah halaman ini membantu?
0 / 5 - 0 peringkat