Ansible: TRANSFORM_INVALID_GROUP_CHARS tidak mendokumentasikan pola grup yang valid

Dibuat pada 24 Mei 2019  ·  104Komentar  ·  Sumber: ansible/ansible



RINGKASAN

Dengan tambahan TRANSFORM_INVALID_GROUP_CHARS . Selain membaca sumbernya, tidak jelas karakter mana yang harus dihindari ke depannya, hanya saja peringatan (dengan -vvvv ) menunjukkan karakter mana yang saat ini Anda gunakan yang tidak valid.

Harap klarifikasi bahwa Anda mendorong nama menjadi python vars yang valid. Ini hilang dari dokumentasi untuk opsi cfg, peringatan, dan dokumentasi online

(https://github.com/ansible/ansible/commit/d241794daa6d413e6447890e2a4f11e0d818cf0e#diff-b77962b6b54a830ec373de0602918318R122)

Tampaknya tidak disebutkan tentang ini di https://docs.ansible.com/ansible/latest/porting_guides/porting_guide_2.8.html juga.

JENIS MASALAH
  • Laporan Dokumentasi
NAMA KOMPONEN


kelompok

VERSI YANG MUNGKIN

ansible 2.8.0
  config file = /home/awoodward/ansible-skynet/ansible.cfg
  configured module search path = [u'/home/awoodward/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 2.7.5 (default, Apr  9 2019, 14:30:50) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
KONFIGURASI

tidak ada

OS / LINGKUNGAN

tidak ada

INFORMASI TAMBAHAN

tidak ada

affects_2.8 docs has_pr module core system

Komentar yang paling membantu

Apa alasan di balik penghapusan tanda hubung dari nama grup? Saya benar-benar berjuang untuk menemukan alasan yang bagus untuk itu, terutama karena ini akan membutuhkan banyak refactoring kode.

Semua 104 komentar

File yang diidentifikasi dalam deskripsi:

Jika file-file ini tidak akurat, perbarui bagian component name dari deskripsi atau gunakan perintah bot !component .

klik di sini untuk bantuan bot

saya mulai mendapatkan peringatan ini tetapi tidak menemukan referensi dalam panduan porting dan tidak ada referensi bagaimana atau apa yang harus diperbaiki.

sebagian besar peringatan saya berasal dari ec2.py, di mana instance_id menggunakan - (misalnya: i-033f62b586143dff7 ) dan wilayah (misalnya: eu-central-1c ), jadi kami tidak memiliki perbaikan nyata untuk yang ini

Akhirnya, ini merusak beberapa buku pedoman saya, di mana saya menggunakan when: ansible_hostname in groups['varnish'] dan ansible_hostname adalah varnish-eu-central-1c-001 .
Di masa lalu ini berfungsi dengan baik, sekarang saya perlu menggunakan inventory_hostname untuk mendapatkan varnish_eu_central_1c_001 dan mendapatkan kecocokan vs groups['varnish']

Jadi ini membutuhkan setidaknya dan segera peringatan dalam panduan porting bahwa inventory_hostname dan groups[] mungkin mengembalikan data yang berbeda

Apa alasan di balik penghapusan tanda hubung dari nama grup? Saya benar-benar berjuang untuk menemukan alasan yang bagus untuk itu, terutama karena ini akan membutuhkan banyak refactoring kode.

@ssbarnea Untuk satu hal, kami membuat Push untuk hanya mengizinkan nama variabel, dan kunci serupa lainnya, yang merupakan pengidentifikasi python yang valid. Untuk menjelaskan sedikit lebih jauh tentang nama grup, ini menyebabkan masalah bagi pengguna yang mencoba menggunakan "sintaks titik" seperti groups.foo-group , yang tidak melakukan apa yang diharapkan pengguna. Jumlah masalah dan permintaan dukungan yang disebabkan oleh masalah kecil seperti ini telah menyebabkan kami menempuh jalan ke nama penjaga aman untuk memastikan bahwa masalah seperti ini tidak terjadi.

Bagi mereka yang ingin mempertahankan apa yang kami anggap karakter tidak valid, dapat memilih keluar dari fungsi ini.

Apa yang harus kita lakukan untuk memilih keluar dari fungsi ini? Skrip penerapan Ansible lokal kami dipenuhi dengan nama grup yang berisi tanda hubung. Kami tidak menggunakannya dengan notasi titik, tentu saja. Tetapi mengubah semuanya akan menjadi tugas yang sangat monumental. Saya lebih memilih untuk tidak ikut serta dan pada saat yang sama mendorong tim saya untuk menghindari penggunaan tanda hubung di masa mendatang dan jika memungkinkan untuk mengubah tanda hubung menjadi garis bawah, meskipun bagian terakhir tidak selalu semudah kelihatannya.

Jadi, apakah seseorang cukup mengatur force_valid_group_names = false di ansible.cfg ? Tampaknya benar berdasarkan https://github.com/ansible/ansible/commit/d241794daa6d413e6447890e2a4f11e0d818cf0e#diff -fd24ad93fbc32f454761746c1ac908f2

Apa yang harus kita lakukan untuk memilih keluar dari fungsi ini? Skrip penerapan Ansible lokal kami dipenuhi dengan nama grup yang berisi tanda hubung. Kami tidak menggunakannya dengan notasi titik, tentu saja. Tetapi mengubah semuanya akan menjadi tugas yang sangat monumental. Saya lebih memilih untuk tidak ikut serta dan pada saat yang sama mendorong tim saya untuk menghindari penggunaan tanda hubung di masa mendatang dan jika memungkinkan untuk mengubah tanda hubung menjadi garis bawah, meskipun bagian terakhir tidak selalu semudah kelihatannya.

Jadi, apakah seseorang cukup mengatur force_valid_group_names = false di ansible.cfg ? Tampaknya benar berdasarkan d241794#diff-fd24ad93fbc32f454761746c1ac908f2

export ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS=never atau export ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS=ignore -- yang terakhir belum ada dalam dokumen: https://github.com/ansible/ansible/pull/57318

Terima kasih, James. Karena orang-orang datang ke masalah ini untuk menindaklanjuti pesan peringatan, saya menyertakan informasi yang menurut saya mungkin berguna:

Untuk menonaktifkan transformasi otomatis nama grup 2.10 secara lebih portabel/permanen hingga Anda siap untuk menghapus grup yang tidak valid dari inventaris Anda, tambahkan force_valid_group_names = never ke bagian [defaults] INI dari ansible.cfg .

Untuk melihat semua grup dan karakter tidak valid yang memicu peringatan (mungkin agar Anda dapat menargetkannya untuk dihapus secara bertahap), Anda dapat melakukan sesuatu seperti CLI no-op yang memungkinkan ini:

ansible-inventory -vvvv --host=localhost 2>&1 | grep replacing

Karakter yang tidak valid ini (mulai 06-04-2019) didefinisikan sebagai konstanta, INVALID_VARIABLE_NAMES , di:
https://github.com/ansible/ansible/blob/devel/lib/ansible/constants.py#L119
sebagai '^[\d\W]|[^\w]' ,
yaitu: any leading non-alpha character OR any character other than alpha-numeric and underscore .
(Saya harap saya benar)

Jika Anda menemukan peringatan penghentian mengganggu, Anda juga dapat menonaktifkannya secara permanen untuk perintah ansible- atau ansible perintah ad-hoc dengan menambahkan deprecation_warnings = False ke [defaults] bagian dari ansible.cfg , tetapi saya akan merekomendasikan untuk tidak melakukannya (karena Anda mungkin melewatkan berita penting), dan sebagai gantinya gunakan variabel lingkungan shell sebaris seperti ini:
ANSIBLE_DEPRECATION_WARNINGS=False ansible-inventory --host=localhost

Namun, penguraian inventaris [WARNING] s tidak akan hilang. Tidak ada konfigurasi khusus atau env var untuk mematikan semua peringatan (belum?), tetapi jika itu benar-benar mengganggu Anda, Anda dapat mengirim semua stderr ke /dev/null (masukkan peringatan "praktik terbaik" di sini):

2>/dev/null ansible-inventory --host=localhost

Semoga ini bisa membantu seseorang, di suatu tempat.

Saya hanya menemukan pesan peringatan penghentian mengganggu ketika mereka tidak menyediakan jalur migrasi. Mempertimbangkan bahwa ruang terbatas dan bahwa perbaikan kemungkinan perlu diperbarui, saya akan merasa sangat berguna untuk menyediakan tautan ke tiket yang dapat mendokumentasikan solusi, solusi,...

Pendekatan seperti ini dapat menghemat pekerjaan ekstra yang diperlukan untuk meningkatkan pesan peringatan yang tidak lengkap karena kami tidak perlu memperbarui pesan, backport ke beberapa versi kembali.

PS. Menonaktifkan peringatan penghentian adalah sesuatu yang tidak akan saya rekomendasikan kepada siapa pun, mungkin hanya jika suatu proyek sudah menghadapi nasib akhirnya;)

saya mulai mendapatkan peringatan ini tetapi tidak menemukan referensi dalam panduan porting dan tidak ada referensi bagaimana atau apa yang harus diperbaiki.

sebagian besar peringatan saya berasal dari ec2.py, di mana instance_id menggunakan - (misalnya: i-033f62b586143dff7 ) dan wilayah (misalnya: eu-central-1c ), jadi kami tidak memiliki perbaikan nyata untuk yang ini

Akhirnya, ini merusak beberapa buku pedoman saya, di mana saya menggunakan when: ansible_hostname in groups['varnish'] dan ansible_hostname adalah varnish-eu-central-1c-001 .
Di masa lalu ini berfungsi dengan baik, sekarang saya perlu menggunakan inventory_hostname untuk mendapatkan varnish_eu_central_1c_001 dan mendapatkan kecocokan vs groups['varnish']

Jadi ini membutuhkan setidaknya dan segera peringatan dalam panduan porting bahwa inventory_hostname dan groups[] mungkin mengembalikan data yang berbeda

Saya ingin mengulangi pernyataan tentang peringatan yang dihasilkan oleh skrip inventaris dinamis EC2 . Saya perhatikan bahwa ada pengaturan konfigurasi ec2.ini untuk menonaktifkan pengelompokan host berdasarkan instance_id ( group_by_instance_id = False ), tetapi pengaturan yang tidak menyelesaikan peringatan untuk saya seperti yang saya perkirakan - saya memastikan saya membersihkan cache inventaris lokal.

Adakah solusi khusus untuk inventaris dinamis EC2?

Karakter yang tidak valid ini (mulai 06-04-2019) didefinisikan sebagai konstanta, INVALID_VARIABLE_NAMES , di:
https://github.com/ansible/ansible/blob/devel/lib/ansible/constants.py#L119
sebagai '^[\d\W]|[^\w]' ,
yaitu: any leading non-alpha character OR any character other than alpha-numeric and underscore .
(Saya harap saya benar)

Kedengarannya akurat bagi saya. Anda harus mengirimkan PR dokumen dengan info itu.

Jika Anda menemukan peringatan penghentian mengganggu, Anda juga dapat menonaktifkannya secara permanen untuk perintah ansible- atau ansible perintah ad-hoc dengan menambahkan deprecation_warnings = False ke [defaults] bagian dari ansible.cfg , tetapi saya akan merekomendasikan untuk tidak melakukannya (karena Anda mungkin melewatkan berita penting), dan sebagai gantinya gunakan variabel lingkungan shell sebaris seperti ini:
ANSIBLE_DEPRECATION_WARNINGS=False ansible-inventory --host=localhost

Namun, penguraian inventaris [WARNING] s tidak akan hilang. Tidak ada konfigurasi khusus atau env var untuk mematikan semua peringatan (belum?), tetapi jika itu benar-benar mengganggu Anda, Anda dapat mengirim semua stderr ke /dev/null (masukkan peringatan "praktik terbaik" di sini):

Opsi ignore tidak berdokumen menyediakan fungsionalitas ini. Dokumen PR di sini: https://github.com/ansible/ansible/pull/57318

Mulai dari 2.8.2, peringatan penghentian ini akan tergencet jika Anda secara eksplisit menetapkan salah satu pilihan.

Di mana tim pengembang yang memungkinkan membahas jenis keputusan ini? Sangat sulit bagi kami pengguna untuk memahami alasannya. Jika itu murni alasan "gaya python", daripada alasan praktis, mungkin perlu dipertimbangkan kembali? Jika tanda hubung dalam nama grup merusak hal-hal di rilis ansible yang akan datang, itu mungkin lebih merupakan masalah dengan implementasi, lebih dari penamaan grup?

Bagi saya, ini terdengar lebih seperti perubahan kosmetik, daripada sesuatu yang telah dipikirkan dengan matang.

Nama grup bukan nama variabel, itu adalah kontennya. Tanda hubung/tanda hubung hanyalah sebuah karakter, yang juga merupakan cara yang sangat populer untuk mengelompokkan informasi dalam konvensi penamaan. Dibandingkan dengan tanda seru atau bintang, itu tidak memiliki arti khusus dalam klausa batas.

Biaya untuk mengurangi masalah ini sangat besar, mengingat ribuan situs tidak hanya harus mengubah nama grup dalam inventaris, tetapi juga memeriksa semua buku pedoman dan peran yang dikembangkan sendiri, dan menguji semuanya lagi.

Jika ada cara bagi "petani" untuk membuat suara mereka didengar, saya akan dengan senang hati menyampaikan pendapat saya dan mencoba memahami bagaimana ide ini muncul.

Saya mulai memahami bahwa perubahan dibuat menjadi mungkin karena pengguna membuat kesalahan seperti mencoba menggunakan groups.group-name daripada groups['group-name'] . AIUI, ini adalah perubahan murni untuk tujuan mengurangi masalah dukungan. (Saya pribadi menentang perubahan itu.)

Perilaku lama tidak akan hilang; itu hanya akan menjadi tidak tersedia tanpa secara eksplisit memilih perilaku lama.

Sedih mendengarnya.

Kasus penggunaan saya, adalah bahwa saya menyematkan perintah "ansible-inventory" dalam file Vagrant, dengan cara yang tidak sopan untuk meletakkan sesuatu di ansible.cfg, dan itu akan membantu untuk dapat menimpa perilaku sebagai opsi baris perintah (bukan variabel lingkungan).

Biasanya perubahan seperti ini disebabkan oleh niat baik, tetapi mungkin tidak selalu mengarah pada hasil yang diinginkan.

Masalah saya dengan perubahan ini adalah bahwa nama grup sekarang menjadi agak "istimewa" - tanda hubung diperbolehkan dalam nama Host, tetapi tidak dalam nama grup yang membuatnya agak aneh mengingat pada awal buku pedoman di bagian hosts: Saya bisa menulis nama host dan/atau grup.

Apakah penjelasan yang diberikan oleh @sivel benar-benar satu-satunya alasan di balik perubahan ini? Lalu bagaimana dengan hosvars['foo-host'] ? Saya harap tidak ada yang mempertimbangkan untuk membuat tanda hubung tidak valid dalam nama host inventaris juga ...
Selain hostvars ada banyak contoh lain di mana "notasi titik" tidak dapat digunakan sehingga perlu mengetahui kapan harus menggunakan formulir mana yang akan tetap ada. Saya merasa agak sewenang-wenang untuk memilih nama grup.

Meskipun argumen notasi titik adalah alasan yang agak valid, saya tidak melihat ini memperbaiki masalah dukungan Anda tanpa meningkatkan dokumentasi. Jika pengguna Anda melakukan sesuatu yang bodoh, dokumentasi Anda tidak memadai. Semua yang berhasil dilakukan para pengembang adalah mengasingkan banyak pengguna. Nama grup yang saya lihat sebagai nilai string arbitrer. Membatasi alfanumerik dan garis bawah sejujurnya agak menyusahkan, terutama ketika nama host RFC mengizinkan tanda hubung, titik, dll ... Jika garis bawah adalah standar de-facto untuk konvensi penamaan, saya tidak berpikir ini akan menjadi masalah. Tanda hubung digunakan secara luas untuk string deskriptor. Jika Anda ingin mengurangi volume dukungan, coba atasi masalah notasi titik dari arah lain; buat skrip validasi yang dapat disediakan oleh tim dukungan Anda yang memeriksa masalah praktik terbaik dan memberikan peringatan atau panduan sebagai contoh. Perbarui dokumentasi Anda tentang peringatan notasi titik menjadi besar, tebal, merah, berkedip, apa pun... Kasus dukungan seperti itu berakhir dengan panggilan 1 menit jika dokumentasi Anda sudah mencakup masalah tersebut. Jawab telepon, lihat masalahnya, berikan tautan dokumen, selesai.

Tanda hubung dalam nama grup adalah INI yang valid dan YAML yang valid, saya tidak mengerti mengapa saya sebagai pengguna harus mengganti nama semua grup saya hanya karena nama tersebut tidak dapat digunakan sebagai nama variabel Python?

Juga mempertanyakan alasan di balik keputusan ini untuk mencela - dalam nama grup. Tidak dapat menggunakan tanda hubung dalam inventaris dinamis keyed_groups sudah cukup mengganggu, tetapi harus mengganti nama semua grup kami di file inventaris kami dan perintah ansible-playbook -l ... hanya untuk menghindari masalah dukungan terkait sintaks hipotetis adalah akan menyakitkan.

FWIW kami memiliki konvensi untuk penamaan grup peran seperti foo_server , dan grup host seperti foo-dev atau foo-test . Hampir 100% dari penggunaan Ansible kami adalah perintah seperti ansible-playbook -l foo-dev , jadi perubahan ini akan membutuhkan banyak upaya untuk melawan memori otot.

Tidak yakin apakah menambahkan saya 2 yang lain di sini akan mendorong pembalikan keputusan khusus ini, tetapi saya cenderung setuju dengan pencela persyaratan bahwa nama grup menjadi pengidentifikasi python yang valid.

Harap dukung tanda hubung bersama dengan huruf, angka, dan garis bawah dalam nama grup (tetapi saya juga tidak menentang titik)!

Kami banyak menggunakan tanda hubung dalam nama grup. Baik untuk pengelompokan nama seperti ini:

[server-3x]
server-31.example.com
server-32.example.com
server-33.example.com

dan ke inventaris _abuse_ untuk menyimpan daftar Host di satu tempat (alih-alih mempertahankan nama Host di file var yang berbeda) seperti ini:

[prometheus_node-exporter_cluster1:children]
server-3x
server-5x
````
We use such groups in templates like this:

{% set _hostgroup = [_service, _job, _cluster]|join('_') %}
{% set _hostlist = grup[_hostgroup]|d([])|sort %}
{% jika _hostlist %}
{% untuk host di _hostlist %}
...
```

Kami tidak menggunakan titik hanya untuk membuat perbedaan yang terlihat antara nama grup dan host.

Kata INVALID dalam TRANSFORM_INVALID_GROUP_CHARS tidak memberikan keyakinan bahwa mungkin untuk terus menggunakannya dalam jangka panjang.

Jika tujuannya adalah untuk menghindari penggunaan karakter ini, maka lebih baik panggil mereka karakter _UNSAFE_, tunjukkan peringatan dan biarkan pengguna memutuskan apakah mereka melihat peringatan ini atau tidak. Tapi jangan pernah melarang atau mengganti karakter ini!

Pengguna harus a) menonaktifkan peringatan ini (menggunakan kata kunci seperti ALLOW_UNSAFE_GROUP_CHARS), b) mengubah nama grup mereka (bila memungkinkan) atau c) hanya tinggal dengan peringatan itu. Sebagian besar akan memilih di antara dua opsi pertama.

Saya juga merasa ini tidak ada gunanya, karena tanda hubung "-" adalah karakter pembatas standar yang digunakan di hampir setiap jenis alat terkait komputer, dan mencoba menyesuaikan diri dengan satu "agama" tampaknya membatasi!!!

Perilaku lama tidak akan hilang; itu hanya akan menjadi tidak tersedia tanpa secara eksplisit memilih perilaku lama.

Saya tidak akan khawatir tentang penghentian ini jika benar-benar memungkinkan untuk memilih tanda hubung dalam nama grup. Maka itu mungkin bisa dimengerti dari perspektif pengguna baru.

Namun, peringatan penghentian menyiratkan bahwa opsi TRANSFORM_INVALID_GROUP_CHARS=never akan hilang di Ansible 2.10, dan jadi kita harus mulai mengganti nama semua grup kita sebelum Ansible 2.10 dirilis?

[PERINGATAN PENGHENTIAN]: Pengaturan TRANSFORM_INVALID_GROUP_CHARS diatur untuk mengizinkan karakter buruk dalam nama grup secara default, ini akan berubah, tetapi masih dapat dikonfigurasi pengguna pada penghentian. Fitur ini akan dihapus di versi 2.10. Peringatan penghentian dapat dinonaktifkan dengan mengatur deprecation_warnings=False di ansible.cfg.

Juga, menggunakan plugin inventaris dinamis keyed_groups memaksa transformasi nama grup, bahkan jika TRANSFORM_INVALID_GROUP_CHARS=never disetel: https://github.com/ansible/ansible/blob/db0fe4b1884e6bb9c25e970c7585abb7edd9d664/lib/ansible/ plugins/inventory/__init__.py#L45 https://github.com/ansible/ansible/blob/db0fe4b1884e6bb9c25e970c7585abb7edd9d664/lib/ansible/inventory/group.py#L39

Perilaku yang diinginkan

  • Menggunakan TRANSFORM_INVALID_GROUP_CHARS=never perlu terus didukung di masa mendatang

    EDIT: membaca kode, sepertinya tujuannya adalah untuk mempertahankan TRANSFORM_INVALID_GROUP_CHARS tetapi mengubah default menjadi always di 2.10 - dalam hal ini, peringatan penghentian tidak ditulis dengan baik: https:/ /github.com/ansible/ansible/blob/db0fe4b1884e6bb9c25e970c7585abb7edd9d664/lib/ansible/inventory/group.py#L50

  • Menggunakan TRANSFORM_INVALID_GROUP_CHARS=never akan membungkam peringatan penghentian

    Ini tampaknya sudah dimungkinkan dengan opsi ignore tidak berdokumen: https://github.com/ansible/ansible/pull/57318

  • Menggunakan TRANSFORM_INVALID_GROUP_CHARS=never juga memungkinkan penggunaan tanda hubung dalam inventaris dinamis keyed_groups

    EDIT: ini jelas untuk kompatibilitas mundur untuk Ansible 2.7, yang tanpa syarat mengubah nama grup yang dihasilkan. Akan sangat bagus untuk memiliki opt-out eksplisit untuk ini.

Mengenai nama variabel, saya tidak mengerti mengapa format kunci kamus harus disamakan dengan sintaks nama variabel? AFAIK tidak ada bahasa pemrograman yang memiliki batasan seperti itu. Dalam Python Anda dapat menggunakan string apa saja sebagai kunci kamus.

Bukankah "grup" adalah variabel tipe kamus dan nama Host dan grup hanyalah kunci kamus biasa di Ansible. Mereka bukan properti atau variabel itu sendiri atau bukan?

Saya lebih suka melarang sintaks groups.foo-group daripada groups["foo-group"]. Jika g = "foo-group", apakah Anda menggunakan groups.g atau groups[g]?

Menggunakan ansible.cfg [default] force_valid_group_names = ignore atau export ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS=ignore tampaknya tidak berfungsi pada Ansible 2.8.1. Itu masih memberikan peringatan penghentian.

$ ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS=ignore ANSIBLE_VAULT_PASSWORD_FILE=vault-password.secret ansible-playbook --diff -i xyz-dev.ini xyz-infra-install.yml -l xyz-dev --check
[DEPRECATION WARNING]: The TRANSFORM_INVALID_GROUP_CHARS settings is set to allow bad characters in group names by default, this will change, but still be user configurable on deprecation. This feature will be removed in version 2.10. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.

Apakah ini karena belum terdaftar di choices valid? https://github.com/ansible/ansible/blob/v2.8.1/lib/ansible/config/base.yml#L1501

Menggunakan ansible.cfg [default] force_valid_group_names = ignore atau export ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS=ignore tampaknya tidak berfungsi pada Ansible 2.8.1. Itu masih memberikan peringatan penghentian.

$ ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS=ignore ANSIBLE_VAULT_PASSWORD_FILE=vault-password.secret ansible-playbook --diff -i xyz-dev.ini xyz-infra-install.yml -l xyz-dev --check
[DEPRECATION WARNING]: The TRANSFORM_INVALID_GROUP_CHARS settings is set to allow bad characters in group names by default, this will change, but still be user configurable on deprecation. This feature will be removed in version 2.10. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.

Apakah ini karena belum terdaftar di choices valid? https://github.com/ansible/ansible/blob/v2.8.1/lib/ansible/config/base.yml#L1501

Ini adalah bug yang diperbaiki di versi 2.8.2 yang akan datang. Anda akan dapat export ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS=ignore dan itu akan menghapus semua peringatan.

(Opsi abaikan masih belum didokumentasikan: https://github.com/ansible/ansible/pull/57318 )

Ini akan menghancurkan semua orang. Keputusan yang buruk.

Apakah ada cara untuk berunding dengan pengelola tentang hal ini?

Mungkin salah satu pengelola dapat menguraikan sedikit di sini, apakah itu hanya masalah dukungan atau jika mereka menggunakan konstruksi python yang benar-benar rusak?

Saya hanya ingin menambahkan ini cukup mengganggu dan ketidakmampuan untuk benar-benar mengetahui masalahnya juga menjengkelkan, saya benar-benar harus melakukan ansible-playbook "insert yaml file here" > output.txt untuk mencari tahu masalahnya.

Setuju dengan sebagian besar poster di sini. Penghapusan tanda hubung dari nama grup tampak seperti keputusan yang dipikirkan dengan matang, atau keputusan yang diimplementasikan, tidak didorong secara semantik.

Perubahan ini sama sekali tidak masuk akal bagi saya. Pengembang yang mungkin ingin memaksa ribuan dan ribuan pengguna untuk mengubah penamaan grup mereka hanya karena mereka menginginkan sintaks tambahan (bukan yang hilang) untuk mengakses grup? Apakah itu lelucon?

Kami menggunakan tanda hubung dan titik dalam pengaturan besar.
Pola kami adalah product-name.environment.datacenter dan itu membuat segalanya menjadi sangat jelas.
Saya tidak dapat membayangkan menjatuhkan - dan . karena itu akan membuat inventaris sama sekali tidak dapat dibaca.

Kami menggunakan plugin inventaris yang memungkinkan yang menanyakan CMDB lokal untuk nama grup yang berisi (dan akan terus berisi) tanda hubung. Itu akan merusak banyak hal jika ini tidak valid di masa depan.

Kami menggunakan tanda hubung dan titik dalam pengaturan besar.
Pola kami adalah product-name.environment.datacenter dan itu membuat segalanya menjadi sangat jelas.
Saya tidak dapat membayangkan menjatuhkan - dan . karena itu akan membuat inventaris sama sekali tidak dapat dibaca.

Kami menggunakan pendekatan serupa dengan skema penamaan hierarkis (terinspirasi oleh java, misalnya org.company.product-name.component).
Ini akan menjadi horor mutlak harus kembali ke garis bawah.

heh. kami menghadapi masalah itu juga. kami menggunakan tanda hubung dalam nama grup kami secara intensif.
Jika seseorang dapat menjelaskan masalah apa yang disebabkan oleh penggunaan tanda hubung dalam dict, saya akan senang mengetahuinya

Saya terutama mengulangi apa yang dikatakan orang lain, tetapi saya ingin menambahkan beberapa masukan. Saya pikir jika perubahan ini diterapkan, tanda untuk mengizinkan tanda hubung harus disimpan dan dipertahankan. Meskipun saya mengerti bahwa Python mengharapkan garis bawah, tanda hubung biasanya digunakan untuk nama host dan nama grup host. Di lingkungan kami, kami menghasilkan inventaris secara dinamis dari host dan grup host di direktori LDAP/Kerberos kami. Saya menyebutkan ini karena meskipun mungkin bagi kita untuk mengubah nama host dan grup, itu tidak disukai.

Apa yang harus kita lakukan untuk memilih keluar dari fungsi ini? Skrip penerapan Ansible lokal kami dipenuhi dengan nama grup yang berisi tanda hubung. Kami tidak menggunakannya dengan notasi titik, tentu saja. Tetapi mengubah semuanya akan menjadi tugas yang sangat monumental. Saya lebih memilih untuk tidak ikut serta dan pada saat yang sama mendorong tim saya untuk menghindari penggunaan tanda hubung di masa mendatang dan jika memungkinkan untuk mengubah tanda hubung menjadi garis bawah, meskipun bagian terakhir tidak selalu semudah kelihatannya.

Jadi, apakah seseorang cukup mengatur force_valid_group_names = false di ansible.cfg ? Tampaknya benar berdasarkan d241794#diff-fd24ad93fbc32f454761746c1ac908f2

Uji pada Ansible 2.8.2, pengaturan INI ini tidak berfungsi seperti yang diharapkan, saya percaya, ini hanya akan menghapus PERINGATAN PENGHENTIAN, sementara, yang saya inginkan adalah Ansible menggunakan grup saya dengan tanda hubung tanpa mengeluh.

Berikut adalah hasil tanpa :

[PERINGATAN PENGHENTIAN]: Pengaturan TRANSFORM_INVALID_GROUP_CHARS diatur untuk mengizinkan karakter buruk dalam nama grup secara default, ini akan berubah, tetapi masih dapat dikonfigurasi pengguna pada penghentian. Fitur ini akan dihapus di versi 2.10. Bantahan
peringatan dapat dinonaktifkan dengan mengatur deprecation_warnings=False di ansible.cfg.
[PERINGATAN]: Karakter yang tidak valid ditemukan dalam nama grup tetapi tidak diganti, gunakan -vvvv untuk melihat detailnya

Dan dengan pengaturan yang disetel ke "false" di ansible.cfg:

[PERINGATAN]: Karakter yang tidak valid ditemukan dalam nama grup dan diganti secara otomatis, gunakan -vvvv untuk melihat detailnya

Menggunakan ansible.cfg [default] force_valid_group_names = ignore atau export ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS=ignore tampaknya tidak berfungsi pada Ansible 2.8.1. Itu masih memberikan peringatan penghentian.

$ ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS=ignore ANSIBLE_VAULT_PASSWORD_FILE=vault-password.secret ansible-playbook --diff -i xyz-dev.ini xyz-infra-install.yml -l xyz-dev --check
[DEPRECATION WARNING]: The TRANSFORM_INVALID_GROUP_CHARS settings is set to allow bad characters in group names by default, this will change, but still be user configurable on deprecation. This feature will be removed in version 2.10. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.

Apakah ini karena belum terdaftar di choices valid? https://github.com/ansible/ansible/blob/v2.8.1/lib/ansible/config/base.yml#L1501

Ini adalah bug yang diperbaiki di versi 2.8.2 yang akan datang. Anda akan dapat export ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS=ignore dan itu akan menghapus semua peringatan.

(Opsi abaikan masih belum didokumentasikan: #57318 )

Tetapi apakah itu hanya menekan peringatan, atau akankah itu memungkinkan kita untuk tetap menggunakan tanda hubung dalam kelompok?
Ini tidak terlalu jelas.

Saya setuju dengan semua pencela di sini.

Selain melanggar pedoman, ini berkontribusi pada apa yang saya sebut kekacauan konvensi yang mungkin. Sekarang nama host dan nama grup memiliki konvensi yang berbeda, hanya karena beberapa pemula yang terisolasi menemukan masalah tanda hubung dalam notasi titik? Tebak apa ? Mereka akan tetap tersandung, dan fitur tersebut akan berhasil membuat marah orang dan tidak menyelesaikan masalah apa pun. Bravo.

Nama grup yang memungkinkan harus mampu menghormati penamaan grup dunia nyata yang mereka wakili.

Jika semua perkakas lain memanggil satu set host my-backend-service mengapa operator yang memungkinkan harus menerjemahkannya ke my_backend_service untuk memenuhi aturan penamaan python.

Ini adalah hari yang sangat menyedihkan hari ini.. Ketika seorang rekan kerja JR menyampaikan penghinaan ini kepada saya, saya seperti tidak mungkin tim Ansible begitu tidak berhubungan dengan kenyataan untuk membuat pilihan yang egois. Saya sangat menyukai Ansible untuk apa yang dapat dicapai (dari sudut pandang pengguna yang tidak ada hubungannya dengan ditulis dengan Python) Arah di sini untuk mendorong standar PEP pada pengguna akhir membuat saya benar-benar kehilangan kepercayaan pada inti kemampuan tim pengembangan Ansible untuk membuat keputusan rasional. Saya harap IBM meluruskannya..
ATAU
Mungkin akan ada GO yang setara baru yang bisa kita pindahkan.

Karena perilaku ini jelas sangat kontroversial, saya bertanya pada diri sendiri apakah ini adalah kesepakatan yang dilakukan dan ini akan diterapkan dalam hal apa pun?

Saya akan sangat menghargai tanggapan dari orang-orang di balik keputusan ini dan berharap untuk beberapa elaborasi di luar "ini adalah hal standar python".

Karena perilaku ini jelas sangat kontroversial, saya bertanya pada diri sendiri apakah ini adalah kesepakatan yang dilakukan dan ini akan diterapkan dalam hal apa pun?

Saya akan sangat menghargai tanggapan dari orang-orang di balik keputusan ini dan berharap untuk beberapa elaborasi di luar "ini adalah hal standar python".

Saya setuju denganmu. Baru-baru ini proyek "pergi" mundur dari proposal yang tidak populer (lihat https://github.com/golang/go/issues/32437#issuecomment-512035919), jadi hal-hal seperti ini dapat (dan terkadang harus) ditinjau kembali dan akhirnya juga mundur.

Ini juga merupakan topik dan diskusi yang menarik, mungkin tidak hanya untuk perubahan fitur ini. Sulit untuk mengetahui bagaimana tata kelola Ansible sebagai produk bekerja. Mungkin sesuatu yang _seseorang_ harus bawa ke https://www.ansible.com/ansiblefest ?

Karena banyak dari kita menggaruk-garuk kepala, tidak memahami bagaimana string/konten variabel/nama grup dengan cara apa pun dapat menimbulkan masalah apa pun dengan gaya pengkodean python, alangkah baiknya untuk mendapatkan balasan di sini dari pengelola, dengan alasan mengapa ini akan menimbulkan sebuah isu.

Saya bisa mengerti jika mereka ingin mempertahankan gaya pengkodean untuk nama dan struktur variabel, tetapi konten array atau variabel?

Berikut ini adalah diskusi singkat tentang notasi titik dikte. Itu mungkin, tapi jelek. https://stackoverflow.com/questions/16279212/how-to-use-dot-notation-for-dict-in-python

Fakta bahwa ada masalah dukungan seputar ini menurut saya adalah masalah dokumentasi bukan masalah fungsionalitas. Jika ada, saya berpendapat bahwa nama grup TIDAK boleh berupa variabel.

Seperti fakta bahwa perubahan ini diterapkan sebelum dokumentasi apa pun tersedia/tersedia.

Apa dampak dari perubahan ini? Apakah saya harus dengan hati-hati mengedit semua inventaris saya yang memungkinkan untuk memastikan saya tidak memiliki tanda hubung dalam nama grup?

@CMoH IMO solusi terbaik untuk saat ini adalah menambahkan force_valid_group_names = ignore ke konfigurasi Anda dan menjalankan 2.8.2 atau yang lebih baru.

@skyscooby , bahkan ini adalah PITA. Hal yang tidak mungkin untuk menempatkan baris ini sebagai default di /etc/ansible.cfg dan menggunakan lokal ansible.cfg di direktori playbook untuk konfigurasi lainnya. Ini berarti bahwa semua file ansible.cfg perlu diubah.

Atau apakah ada cara untuk mengatur default global (tanpa menambahkan variabel lain ke lingkungan pengguna)?

@Cougar setuju pilihan ini dari Ansible adalah PITA..

Namun masalah Anda tidak unik untuk pengaturan ini .. kami mengalami rasa sakit yang sama dan sekarang kami tidak menyarankan penggunaan file ansible.cfg per proyek karena sebagian besar pengaturan dapat diatur dengan variabel lingkungan yang mengesampingkan pengaturan file cfg .. jadi jika sebuah proyek untuk beberapa alasan yang tidak jelas memerlukan pengaturan khusus, kami meminta mereka menggunakan metode ENV yang membiarkan pengaturan lainnya yang tidak perlu mereka ubah diatur ke standar perusahaan. Kami membangun wadah buruh pelabuhan dasar dengan konfigurasi standar ini dan masing-masing proyek cukup menambahkan entri ENV ke dalam file Docker mereka sendiri sambil mendasarkan citra wadah dasar yang memungkinkan. Semua kemungkinan dijalankan di dalam wadah sehingga kami yakin semua modul pip, versi yang memungkinkan, dan alat runtime identik ujung ke ujung.

EDIT: ini juga memberi kami kemampuan untuk membuat versi baru dari masalah yang memungkinkan dan mengendalikan seperti ini sebelum semua orang di perusahaan terkena mereka :)

Saya melakukan beberapa penggalian.

fungsi ini awalnya ditambahkan di PR https://github.com/ansible/ansible/pull/52748 diduga untuk mendukung permintaan fitur https://github.com/ansible/ansible/issues/40581

satu deskripsi tujuan: https://github.com/ansible/ansible/pull/52748#issuecomment -467976473

versi pertama gejala INI (meskipun penyebabnya berbeda): https://github.com/ansible/ansible/issues/51844

Sobat, saya telah membaca #52748 berkali-kali sekarang.

Seperti yang saya pahami, nama grup sebelumnya dibersihkan di plugin dan inti, dan seseorang (untuk alasan apa pun, karena masih belum jelas bagi saya mengapa) memutuskan bahwa nama grup harus mengikuti konvensi penamaan variabel python.

Jadi #52748 memasukkan sanitasi ke dalam inventaris, yang merusak banyak hal untuk banyak orang. Terutama orang yang menggunakan konvensi penamaan yang cerdas, misalnya di AWS, Azure, dll, untuk memetakan host ke grup.

Jika kami menggunakan standar/konvensi penamaan yang sama untuk nama host, kami pasti akan kehilangan momentum dan kehilangan pengguna.

Nama grup adalah nama, bukan variabel. Menggunakan tanda hubung dalam nama grup (seperti pada nama host) masuk akal. Penerjemahan (sanitasi) seharusnya tidak perlu dilakukan pada tingkat inventaris (oleh kami, pengguna), dan yang terbaik dari semua dunia sebenarnya tidak pernah.

Saya benar-benar tidak melihat manfaat dari menegakkan ini. Diskusi tampaknya mencakup juga "." dan ":", yang beberapa orang suka gunakan dalam nama grup. Secara pribadi saya tidak menggunakannya, tetapi saya juga tidak melihat salahnya melakukannya.

Selama penyedia cloud menggunakan kembali tanda hubung dalam informasi meta mereka, kami harus dapat menggunakannya untuk pengelompokan. Sebenarnya, itu seharusnya bukan pengemudi. Jika saya ingin memberi nama grup abcde, seharusnya tidak menjadi masalah. Ini adalah pembatas yang sangat berguna.

Namun, utas ini tampaknya tidak menarik perhatian pengembang atau pengelola. Saya pikir kita berbicara dengan telinga yang tuli.

Pengembang/Pengelola: Tolong, cantik, izinkan tanda hubung dalam nama grup!

Untuk mengklarifikasi beberapa kesalahpahaman, sebagian karena kesalahan saya dan membuat pesan awal tidak jelas, versi terbaru memiliki perbaikan untuk beberapa masalah yang terus dibawa orang di sini, perbaikan lain masih masuk:

Hanya untuk mengatakan ini sekali, jelas , ANDA AKAN SELALU DAPAT MENGGUNAKAN DASH PADA NAMA GRUP juga titik dan karakter lain yang sekarang dianggap 'tidak valid', hanya saja tidak secara default. 'Default' ini adalah yang tidak digunakan lagi, defaultnya adalah 'aman' di 2.11, tetapi Anda akan selalu memiliki opsi untuk 'memilih ikut' pada perilaku lama.

Dan untuk menjelaskan bagaimana dan mengapa kami sampai di sini:

Pertama, nama grup SELALU dibersihkan, mereka hanya memiliki aturan tidak konsisten yang berbeda, tergantung pada jenis inventaris yang Anda gunakan, skrip ada di mana-mana, format YAML dan INI melakukan masing-masing hal mereka sendiri. Perubahan besar adalah 'sentralisasi dan normalisasi sanitasi', hal ini diputuskan kembali pada 2.4 tetapi tidak sepenuhnya dilaksanakan sampai 2.8. Tujuannya adalah untuk memberikan norma atau garis dasar yang dapat digunakan semua orang dengan aman di Ansilbe, yang mengatakan bahwa kami menyadari ada banyak orang yang menggunakan karakter 'tidak aman' atau 'tidak valid' untuk variabel sehingga kami membuat ini dapat dikonfigurasi, tidak hanya secara global tetapi juga oleh beberapa plugin inventaris.

Implementasi awal memiliki beberapa masalah dan banyak diskusi (tidak, kami tidak memutuskan ini secara tersembunyi, kami mengadakan pertemuan publik di irc yang Anda semua dipersilakan, https://github.com/ansible/community/blob/master /meetings/README.md) dan banyak umpan balik dimasukkan (Ini juga dicatat sehingga Anda dapat kembali untuk melihat diskusi dan alasan, tetapi untuk menghindari 'log dumpster diving', saya akan menjelaskan sebagian besar masalah di bawah) . Setelah keluar di 2.8 kami mendapat umpan balik lain dan kami telah memperbaiki beberapa bug, seperti selalu mendapatkan penghentian, tidak hanya saat menggunakan default dan khususnya dengan kata-kata dari dokumentasi dan peringatan.

  • 'Mengapa nama Python?'
    Sebagian besar karena Ansible menggunakan Python dan JInja (yang juga menggunakan Python) dan beberapa penggunaan grup (kebanyakan dalam contoh awal kami, tetapi juga banyak dari pihak ketiga) dapat membuat kesalahan dalam buku pedoman, yaitu stuff: '{{ groups.gropup-name-with-dash ... }}' atau lebih buruk lagi group.name.with.dots . Ini menciptakan kebingungan bagi banyak pengguna yang ingin menggunakan fitur Jinja dari 'notasi titik untuk akses variabel' dan inilah mengapa defaultnya harus aman untuk semua pengguna. Kebanyakan orang di pos ini mungkin tidak setuju dengan ini, tetapi ini adalah masalah nyata bagi banyak orang dan tidak boleh menjadi 'jebakan' menunggu pengguna Ansible baru atau lama. Mereka yang 'memilih keluar' kemudian bertanggung jawab untuk menghindari penggunaan yang melanggar di bagian lain dari Ansible.

  • 'Bagaimana jika saya suka bahwa setiap inventaris memiliki sanitasi yang berbeda?'
    Nah, Anda masih dapat mematikan sanitasi 'pusat' dan mengaktifkannya untuk sumber inventaris spesifik Anda, plugin inventaris baru paling populer yang menggantikan skrip lama memiliki opsi yang ditambahkan untuk meniru perilaku skrip, skenario terburuk, Anda masih dapat menggunakan skrip inventaris.

  • 'Mengapa tidak nama host/apakah nama host berikutnya?'
    Seperti untuk grup, sanatisasi nama host selalu ada, tetapi tidak berubah, nama host memiliki persyaratan yang berbeda, seperti DNS yang dapat dipecahkan
    untuk koneksi jaringan atau jalur yang valid untuk koneksi chroot. Juga, untungnya, ada sedikit atau tidak ada contoh penggunaan nama host dalam notasi titik, ini bukan praktik umum dan akan menjadi masalah jika orang tiba-tiba mulai menggunakannya, tetapi tidak seperti nama grup, ini adalah sesuatu yang kami hindari sampai sekarang. Jika itu menjadi masalah ke depan ... Saya juga tidak melihat solusi yang baik.

Perhatikan bahwa tiket khusus ini (deskripsi/informasi yang tidak cukup baik) adalah sesuatu yang sudah saya tangani, semoga segera diperbaiki. Adapun sisa diskusi, para pengembang tidak menggunakan Github sebagai forum, beberapa tiket berpindah ke sana, tiket sebelumnya yang ditutup dan juga memiliki utas panjang diabaikan hingga saat ini, sebagian besar karena pengembang menyaring masalah tertutup dan mengharapkan diskusi di IRC milis atau masalah baru.

Saya harap ini membahas semua masalah utama, seperti biasa kami terbuka untuk diskusi, jangan ragu untuk mampir ke ML atau IRC, kami hanya menghindari menggunakan github karena ini bukan tempat yang baik untuk hal-hal seperti itu.

Terima kasih banyak atas klarifikasinya.

Terima kasih telah meluangkan waktu untuk menjelaskan meskipun akan jauh lebih mudah untuk berhenti mendukung notasi titik dan menghentikan dukungan itu selama beberapa rilis. Lebih sedikit orang yang menggunakannya vs jumlah orang yang memiliki karakter tidak valid dalam nama grup mereka. Se la vie

@skyscooby masalahnya adalah tidak mungkin melakukan itu, itu adalah Jinja.

Hanya untuk mengatakan ini sekali, jelas , ANDA AKAN SELALU DAPAT MENGGUNAKAN DASH PADA NAMA GRUP juga titik dan karakter lain yang sekarang dianggap 'tidak valid', hanya saja tidak secara default.

Oke, ini bagus untuk diketahui, terima kasih atas penjelasannya. Namun, pengalaman pengguna benar-benar perlu ditingkatkan. Anda memiliki "kutukan pengetahuan". Coba bayangkan diri dalam sepatu dari pengguna yang melihat ini:

[PERINGATAN PENGHENTIAN]: Pengaturan TRANSFORM_INVALID_GROUP_CHARS diatur untuk mengizinkan karakter buruk dalam nama grup secara default, ini akan berubah, tetapi masih
pengguna dapat dikonfigurasi pada penghentian. Fitur ini akan dihapus di versi 2.10. Peringatan penghentian dapat dinonaktifkan dengan mengatur deprecation_warnings=False di ansible.cfg.
[PERINGATAN]: Karakter yang tidak valid ditemukan dalam nama grup tetapi tidak diganti, gunakan -vvvv untuk melihat detailnya

Itu sangat jauh dari

[PERINGATAN PENGHENTIAN] Nama grup 'server-saya' berisi '-', yang secara default akan menjadi tidak valid dari Ansible 2.11. Setel force_valid_group_names di ansible.cfg atau variabel lingkungan ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS ke "abaikan" untuk menekannya. Lihat https://docs.ansible.com/something untuk informasi lebih lanjut.

... itulah yang saya, sebagai pengguna, sangat ingin lihat. Itu akan menyelamatkan saya lebih dari satu jam. Sekarang kalikan dengan jumlah orang yang memiliki atau akan mengalami masalah ini.

Memiliki tanda hubung dan titik tidak valid dalam nama grup bukanlah default yang masuk akal. Orang-orang akan selalu memilikinya dalam nama grup mereka. Untuk meminta mereka mengatur variabel lain dalam file konfigurasi untuk mengaktifkan perilaku yang masuk akal adalah IMHO tidak dapat dipertahankan.

Terima kasih @bcoca atas komentar Anda di atas. Ini sangat dihargai.

Meskipun saya tidak senang dengan keputusan itu, saya mengerti bahwa diskusi telah terjadi dan keputusan telah dibuat. Jika keputusan masih terbuka untuk diperdebatkan, sebaiknya dilanjutkan di milis atau di irc tetapi mungkin tidak menangkap masalah ini.

Untuk topik masalah ini, saya ingin menemukan informasi berikut dalam dokumentasi resmi dan panduan porting, untuk mengetahui perubahan ini.

  • Apa nama grup yang valid secara default?
  • Apa yang harus dilakukan untuk tetap menggunakan nama grup termasuk tanda hubung, tanda hubung, titik, dan titik dua?

Karena kami menggunakan tanda hubung di semua nama grup dan host kami dan kami tidak akan mengubahnya. Jadi saya harus ikut serta dan mengubah ansible.cfg setiap kali saya menyiapkan instalasi/lingkungan baru. Itu sangat disayangkan bagi saya, tetapi saya harus menghadapinya entah bagaimana. Paling tidak saya harapkan adalah bahwa ini didokumentasikan sesuai.

Untuk melanjutkan diskusi apakah perubahan ini bijaksana atau tidak, saya membuka thread di grup Ansible Development.

Salam,
Trond

Saya ingin mengucapkan terima kasih kepada semua kontributor dalam masalah ini. Berdasarkan apa yang saya baca di sini, saya memutuskan untuk menulis posting blog https://docs.sbarnea.com/ansible/naming-hosts-and-groups -- Semoga dapat merangkum apa yang perlu dilakukan pengguna.

@loop-evgeny Saya setuju bahwa kami sebagai tim inti memang memiliki "kutukan pengetahuan" dan itu menghalangi kami untuk membuat dokumen dan kesalahan yang berguna bagi semua orang. Kami juga sepenuhnya mengandalkan komunitas untuk membantu kami membentuk dan membuatnya tetap sederhana untuk sebanyak mungkin pengguna, jadi ketika orang-orang memiliki rekomendasi untuk meningkatkan dokumen kami dan pesan kesalahan/peringatan kami, saya selalu mendorong mereka untuk membantu kami dengan mengirimkan permintaan tarik. Pesan yang Anda tunjukkan disimpan dalam file berikut dan kami akan sangat menghargai jika Anda dapat mengirimkan PR kepada kami dengan perubahan yang disarankan ...

https://github.com/ansible/ansible/blob/4ef2545eb5d661566e06629015967c2d1b8924e3/lib/ansible/inventory/group.py#L54 -L55

@jctanner Biasanya saya akan dengan senang hati mengirimkan PR untuk meningkatkan program gratis dan bermanfaat yang saya gunakan. Namun, sikap umum pengembang Ansible terhadap kegunaan, keinginan mereka untuk menutup sebagai masalah "berfungsi sebagaimana dimaksud" yang saya anggap sebagai bug yang terbukti dengan sendirinya (bahkan jika bug desain) dan fakta bahwa Ansible saat ini memiliki 2025 (itu dua ribu !) PR terbuka memberi saya sedikit keyakinan bahwa pekerjaan saya tidak akan sia-sia. Jika Anda benar-benar ingin "bergantung pada komunitas", seperti yang Anda katakan, maka perubahan budaya yang substansial diperlukan IMHO.

Hmm.. Kesempatan itu juga menimpaku.

Sayangnya kami menggunakan nama jaringan sebagai nama grup dan itu tidak mudah diubah. Saya ingin memilih keluar untuk gula sintaks titik untuk nama grup karena itu tidak pernah saya gunakan (Meskipun saya menggunakannya dengan variabel lain).

Akan lebih baik untuk menggunakan ansible-playbook whatever.yaml -l some.network.to.use di masa mendatang. Menggunakan selain jaringan sebagai nama grup akan mengurangi usecase secara besar-besaran.

Hai,
Aku agak bingung saat ini. Bisakah seseorang memberi tahu saya apa yang harus saya atur di ansible.cfg untuk mengizinkan karakter yang tidak valid dalam nama grup di masa mendatang?

force_valid_group_names = ignore

Apa versi masa depan dari kemungkinan regrading untuk masalah ini? Akankah suatu saat mungkin akan menolak semua tanda hubung dalam nama grup tanpa bekerja menggunakan force_valid_group_names ? (tanpa mendengar umpan balik dari pengguna yang mengalami perubahan, dan yang tidak pernah mengalami masalah dengan menggunakan tanda hubung dalam nama grup)

Maaf Hanya membaca komentar dari @bcoca dan senang melihat bahwa saya akan dapat menggunakan tanda hubung jika saya mau di masa depan - itu sudah cukup bagi saya.

Hai,
Saya melihat peringatan yang sama, tetapi, saya tidak mengerti apa yang harus saya ubah, dan apakah kita harus mengubahnya.
Apakah itu sesuatu yang berhubungan dengan python?
Bagaimana cara mengatasinya?

Jika saya mengabaikan dengan force_valid_group_names = abaikan, itu akan diperlukan, dan ketika saya memutakhirkan ke Ansible >= 2.10?

Salam,
Cesar Jorge

Jika saya memahami ini dengan benar. Satu-satunya hal yang ditinggalkan adalah transformasi otomatis nama grup. Ini berarti tidak masalah untuk menyetel force_valid_group_names = ignore setelah 2.10 dan seterusnya.

Ini juga harus baik-baik saja untuk terus menggunakan tanda hubung dan apa pun yang Anda inginkan dalam nama grup. Apa yang tidak akan dilakukan Ansible di masa depan adalah membersihkannya sehingga Anda dapat menggunakan notasi bertitik bahkan untuk nama grup yang "tidak valid". Sebagai contoh:

Inventaris Anda berisi grup bernama foo-bar.xyz . Sekarang Anda ingin menulis template yang membuat daftar host yang termasuk dalam grup itu:

{% for host in groups['foo-bar.xyz'] %}
{{ host }}
{% endfor %}

Perhatikan bahwa versi templat berikut tidak akan berfungsi:

{% for host in groups.foo-bar.xyz %}
{{ host }}
{% endfor %}

Ini karena - dan . memiliki arti khusus dalam kasus ini. Namun notasi bertitik akan baik-baik saja jika grup Anda memiliki nama foo_bar_xyz karena templatnya kemudian menjadi:

{% for host in groups.foo_bar_xyz %}
{{ host }}
{% endfor %}

Yang tentu saja baik-baik saja.

Dalam upaya untuk mempermudah pengguna, Ansible tampaknya selalu melakukan sanitasi untuk nama grup. Ini berarti (dan sampai 2.10 masih) memungkinkan untuk menggunakan foo_bar_xyz dalam contoh di atas meskipun grup sebenarnya disebut foo-bar.xyz . Secara pribadi saya tidak berpikir ini membuat segalanya lebih mudah dan tampaknya tim inti sekarang juga setuju dengan itu.
Jadi upaya mereka selanjutnya untuk mengatasi masalah ini adalah membuat nama grup yang "tidak valid" menjadi tidak mungkin. Namun sejauh yang saya mengerti akan selalu memungkinkan untuk keluar dari batasan ini dengan menyetel force_valid_group_names = ignore .

Singkat cerita, sebenarnya dua perubahan berbeda yang telah terjalin[1] satu sama lain. Dari mana membingungkan nama dan kata-kata peringatan.

Sekali lagi ini hanya bagaimana saya memahami masalah ini. Tolong koreksi saya jika saya salah!

[1] untuk lebih jelasnya lihat RFC1925 Paragraf 2, Poin (5)

Saya hanya ingin meninggalkan 2¢ saya karena saya berada di sisi tanda hubung > garis bawah. Hanya melakukan pencarian Google cepat

Bahkan jika bukan itu masalahnya, fakta bahwa saya melihat tanda hubung digunakan untuk hal-hal seperti label server dan grup di alam liar lebih sering daripada garis bawah berarti ini akan menjadi hal lain yang harus saya pastikan untuk ditambahkan ke semua dan file ansible.cfg klien saya (saya cenderung memiliki satu per buku pedoman).

Saya tidak punya masalah dengan Ansible mencoba memaksakan default yang lebih ketat di mana itu meningkatkan pengalaman, tetapi pertama-tama Anda datang untuk tanda hubung dalam nama peran saya (dan kadang-kadang mengizinkan pengecualian tunggal untuk peran yang lebih lama yang menjadi kakek), lalu Anda datang untuk tanda hubung koleksi saya (mereka tidak diperbolehkan dengan cara, bentuk atau bentuk apa pun), dan sekarang Anda telah datang untuk tanda hubung di inventaris saya!

Ini adalah perang melawan tanda hubung di luar sana... dan saya ingin menarik garis di suatu tempat—dalam hal ini, ini adalah satu-satunya tempat di mana sebenarnya tidak mungkin bagi saya untuk mencegah orang menggunakan tanda hubung, karena banyak penyedia inventaris dinamis membuat grup berdasarkan pada nama dan label server, dan banyak (jika tidak sebagian besar) organisasi tampaknya melabeli sesuatu menggunakan tanda hubung (mis. us-east-1a , bukan us_east_1a ).

Tidak menyenangkan memiliki default yang hampir selalu harus diganti agar perangkat lunak berfungsi, tetapi sepertinya pada Ansible 2.11, itulah masalahnya.

Jika itu semua karena beberapa pengguna yang tidak terbiasa dengan Jinja2 dan Python tidak menyadari something.with-some-dashes tidak valid, saya berpendapat lebih baik mengajari mereka "jika ada tanda hubung, Anda harus menggunakan notasi braket untuk akses dict, misalnya something['with-some-dashes'] . Anda bahkan dapat menggabungkan keduanya jika diperlukan. Ini tidak super murni dan holistik, tetapi kami tidak semua pengembang Rust di sini...

Sangat bagus, Jeff. Saya sangat setuju dengan Anda di sini - perubahan ini akan sangat mengganggu, dan alih-alih hanya memerlukan migrasi satu kali, akan mengubah alur kerja sejumlah besar pengguna. Ansible tidak akan lagi bekerja di luar kotak.

Nama host tidak boleh menyertakan garis bawah, jadi di dunia yang waras, inventory_hostname tidak akan dipaksakan. Ini berarti bahwa inventaris kami sekarang akan terlihat sangat tidak konsisten, dengan nama host yang tidak dapat berisi garis bawah, dan grup yang tidak dapat berisi tanda hubung.

Tolong, jangan beralih default.

https://en.m.wikipedia.org/wiki/Hostname

Hai,
Saya sangat setuju dengan Jeff di sini .

Tetapi seperti yang dinyatakan @bcoca di atas, sebagian besar pengembang tidak melihat diskusi ini di sini secara teratur dan masalah ini mungkin bukan tempat yang tepat untuk membahas perubahan karena ini tentang dokumentasi yang benar.

Untuk diskusi, silakan bergabung dengan utas Apakah mengubah pengaturan default TRANSFORM_INVALID_GROUP_CHARS adalah ide yang bagus? di Google Grup.

Poin bagus Jeff.

Tidak menyenangkan memiliki default yang hampir selalu harus diganti agar perangkat lunak berfungsi, tetapi sepertinya pada Ansible 2.11, itulah masalahnya.

Ini adalah takeaway besar bagi saya dari semua diskusi ini. Saya mengerti masalah yang perlu dipecahkan, tetapi solusinya tampaknya kebalikan dari apa yang dibutuhkan. Itu membuat segalanya lebih mudah untuk dukungan tetapi sulit bagi pengguna - itu adalah solusi mundur.

Jika itu semua karena beberapa pengguna yang tidak terbiasa dengan Jinja2 dan Python tidak menyadari sesuatu. dengan-beberapa-tanda hubung tidak valid, saya berpendapat lebih baik untuk mengajari mereka "jika ada tanda hubung, Anda harus menggunakan notasi braket untuk akses dict, misalnya something['with-some-dashs']. Anda bahkan dapat menggabungkan keduanya jika diperlukan.

Ini di sini adalah solusi terbaik, tidak merusak barang-barang yang telah digunakan selama bertahun-tahun.

Komentar bagus dari @geerlingguy - tepat!

Saya ingin menambahkan bahwa sebagai pengguna Ansible, mengapa saya harus tahu apa itu sintaks Python yang valid? Setelah menggunakan Ansible untuk waktu yang lama sekarang, saya mengerti bahwa Ansible (dan modulnya) ditulis dengan Python, tetapi mengapa saya harus peduli tentang itu? Mengekspos fakta itu kepada pengguna akhir hanyalah desain yang buruk.

Mirip dengan hanya mengizinkan JavaScript/Ruby/.NET/notasi apa pun yang valid untuk hal-hal seperti nama pengguna dalam aplikasi web. Mengapa pengguna akhir peduli dengan bahasa apa aplikasi itu ditulis?

Selain itu, memperkenalkan perubahan yang melanggar adalah topik yang sulit, saya mencoba menghindarinya jika memungkinkan. Jika saya harus membuat perubahan, saya biasanya membiarkan perilaku lama yang sudah ada sebagai default, dan membiarkan orang memilih perilaku baru. Mengapa ini tidak dilakukan di sini? Mengapa saya harus mengubah konfigurasi saya, atau lebih buruk lagi seluruh inventaris saya? Mengapa tidak sebaliknya?

Jika sistem memerlukan token yang benar-benar sesuai secara internal, maka sistem harus menghasilkan token secara internal dan membuat tabel pencarian yang mengaitkan token internal dengan data pengguna. Dengan cara ini Ansible dapat mengubah aturan tokennya sesuai kebutuhan dan membatasi dampaknya pada pengguna. Pengguna harus dapat memberi nama inventaris, peran, dll sesuai keinginan mereka atau pelanggan mereka.

Bagi saya sepertinya perubahan ini mungkin memiliki kebalikan dari efek yang dimaksudkan (untuk mengurangi permintaan dukungan):

Sekarang tidak ada pembatas yang didukung (secara default) baik oleh nama host (yang harus dapat diselesaikan DNS, yaitu, tidak mengandung garis bawah) dan nama grup (yang tidak boleh berisi tanda hubung).

Pasti harus bebas untuk menamai host mana pun

El mié., 14 yang lalu. 2019 16:16, pemberitahuan Christian [email protected]
deskripsi:

Jika saya mengerti ini
https://github.com/ansible/ansible/issues/56930#issuecomment-516863432
benar. Satu-satunya hal yang ditinggalkan adalah otomatis
transformasi nama grup. Ini berarti akan baik-baik saja untuk mengatur force_valid_group_names
= abaikan setelah 2.10 dan seterusnya.

Seharusnya juga baik-baik saja untuk terus menggunakan tanda hubung dan apa pun yang Anda
tidak ingin dalam nama grup. Apa yang tidak akan dilakukan Ansible di masa depan adalah membersihkan
mereka sehingga Anda dapat menggunakan notasi bertitik bahkan untuk nama grup yang "tidak valid". Untuk
contoh:

Inventaris Anda berisi grup bernama foo-bar.xyz. Sekarang kamu ingin menulis
templat yang membuat daftar host yang termasuk dalam grup itu:

{% untuk host di grup['foo-bar.xyz'] %}
{{ tuan rumah }}
{% akhir untuk %}

Perhatikan bahwa versi templat ini tidak akan berfungsi:

{% untuk host di groups.foo-bar.xyz %}
{{ tuan rumah }}
{% akhir untuk %}

Ini karena - dan . memiliki arti khusus dalam hal ini. NS
notasi bertitik namun akan baik-baik saja jika grup Anda memiliki
beri nama foo_bar_xyz karena templatnya menjadi:

{% untuk host di groups.foo_bar_xyz %}
{{ tuan rumah }}
{% akhir untuk %}

Yang tentu saja baik-baik saja.

Dalam upaya untuk membuat segalanya lebih mudah bagi pengguna, Ansible tampaknya selalu
melakukan beberapa sanitasi untuk nama kelompok. Ini berarti itu (dan sampai 2.10
masih) mungkin untuk menggunakan foo_bar_xyz dalam contoh di atas meskipun
grup ini sebenarnya disebut foo-bar.xyz. Secara pribadi saya tidak berpikir ini
membuat segalanya lebih mudah dan tampaknya tim inti sekarang juga setuju
dengan itu.
Jadi upaya mereka selanjutnya untuk mengatasi masalah ini adalah membuatnya mustahil untuk dimiliki
nama grup "tidak valid" di tempat pertama. Namun sejauh yang saya mengerti
akan selalu memungkinkan untuk menyisih dari batasan ini dengan menyetel force_valid_group_names
= mengabaikan.

Singkat cerita sebenarnya ada dua perubahan berbeda yang terjadi
terjalin[1] satu sama lain. Dari mana nama dan kata-kata yang membingungkan?
peringatan.

Sekali lagi ini hanya bagaimana saya memahami masalah ini. Tolong perbaiki saya jika saya
salah!

[1] untuk detail lebih lanjut lihat RFC1925
http://www.faqs.org/rfcs/rfc1925.html Paragraf 2, Poin (5)


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/ansible/ansible/issues/56930?email_source=notifications&email_token=AA5N2CJCIELW7JWHC6OJ35DQEQHSPA5CNFSM4HPRGLKKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LN5WZHJKTDN5WZHJKTDN5
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AA5N2CIVT5PLD2QCAGGBK6LQEQHSPANCNFSM4HPRGLKA
.

Ini benar-benar keputusan yang salah menurut pendapat jujur ​​saya. Dan untuk alasan yang salah. Mengurangi jumlah permintaan dukungan, benarkah?

Ansible, sebagai alat, tidak boleh memaksakan detail khusus bahasa kepada pengguna akhir. Saya sudah sangat kesal dengan Terraform yang memaksakan semua Golang ke tenggorokan saya, sekarang hal yang sama terjadi di sini dengan Ansible dan gaya "pythonic". Jangan salah paham, saya bekerja cukup baik dengan Go dan Python, tetapi ketika datang ke infrastruktur sebagai kode, mengapa saya harus peduli? Dan apa yang terjadi dengan janji agar YAML mendikte bentuk basis kode untuk dikelola? "Infrastruktur sebagai data, yang dapat Anda baca dan jalankan", saya sering mendengarnya... Sejauh yang saya tahu, YAML sama sekali tidak peduli dengan tanda hubung dan garis bawah.

BTW, ada cukup banyak hal di luar sana yang tidak mendukung garis bawah. Nama host, wilayah AWS, dan ID untuk semuanya, hanya untuk menyebutkan beberapa yang sangat penting. Semoga berhasil dengan mempertahankan semua pengecualian di mana transformasi tidak seharusnya terjadi ...

Untuk orang-orang yang datang ke sini hanya mencari solusi cepat tentang cara menghilangkannya, tambahkan saja baris force_valid_group_names = ignore ke ansible.cfg dan berbahagialah.

Pemahaman saya adalah Anda tidak dapat menggunakan notasi titik untuk variabel dengan spasi, dan meskipun saya tidak pernah membuat variabel dengan spasi, sayangnya ada banyak vendor yang mengembalikan kunci kamus dengan spasi melalui respons json API. Opsi yang masuk akal bagi saya tampaknya beralih ke notasi braket persegi. Semoga pengaturan force_valid_group_names untuk diabaikan tidak menyebabkan efek buruk lebih jauh, siapa yang tahu apa lagi yang direncanakan di masa depan dengan perubahan ini.

Ini adalah keputusan yang cukup mengerikan terutama dalam hal bekerja dengan inventaris dinamis seperti Openstack (dan AWS).
Nama instans dan kunci metadata yang berisi "karakter terlarang" sering ditampilkan sebagai item inventaris dan/atau variabel grup dari cloud yang mendasarinya. Ini akan membuat hidup seperti neraka bagi banyak admin Openstack (dan AWS) yang mencoba mengelola armada mereka menggunakan tag meta dan atau ID instans seperti:
instance-8ca09c33-f255-440f-9544-b0ab318c79d9
meta-os_ubuntu

Pengembang yang mungkin harus menganggap serius pendapat @geerlingguy . Dia adalah salah satu kontributor terbesar untuk Ansible Galaxy dan Perannya dikonsumsi oleh banyak orang. Saya pikir perubahan ini sangat buruk bagi orang-orang yang memiliki ribuan host bernama seperti: $env-$role-[0..99] . Apakah kita harus mengganti nama semuanya untuk menenangkan tuan Ansible kita?

@ssbarnea Untuk satu hal, kami membuat Push untuk hanya mengizinkan nama variabel, dan kunci serupa lainnya, yang merupakan pengidentifikasi python yang valid. Untuk menjelaskan sedikit lebih jauh tentang nama grup, ini menyebabkan masalah bagi pengguna yang mencoba menggunakan "sintaks titik" seperti groups.foo-group , yang tidak melakukan apa yang diharapkan pengguna. Jumlah masalah dan permintaan dukungan yang disebabkan oleh masalah kecil seperti ini telah menyebabkan kami menempuh jalan ke nama penjaga aman untuk memastikan bahwa masalah seperti ini tidak terjadi.

Bagi mereka yang ingin mempertahankan apa yang kami anggap karakter tidak valid, dapat memilih keluar dari fungsi ini.

Berapa lama pengguna diizinkan untuk menyisih dari perilaku ini? Apakah akan ada opsi konfigurasi permanen untuk menonaktifkan perilaku ini di semua versi yang memungkinkan, atau hanya akan didukung hingga 2.11? Saya akan senang jika opsi diaktifkan secara default, selama saya selalu memiliki opsi untuk mematikannya.

Jika ini menjadi batasan keras di 2.11+, maka Anda mungkin akan kehilangan pelanggan yang terikat oleh batasan organisasi mereka (tidak semua pengguna yang memungkinkan memiliki kekuatan untuk mendikte konvensi penamaan yang digunakan oleh perusahaan mereka). Tampaknya perubahan ini juga akan menghadirkan tantangan yang signifikan bagi mereka yang menggunakan kemungkinan untuk mengelola infrastruktur cloud, di mana tanda hubung cenderung banyak digunakan.

Sekedar mengingatkan yang belum membaca keseluruhan thread disini. Ada juga utas di milis devel: https://groups.google.com/forum/#!topic/ansible -devel/bjAcM9ferIw

IMHO perubahan ini adalah pilihan yang sangat buruk. Perubahan sintaksis pemecah kode dalam versi rilis minor menahan kami untuk tidak memperluas penggunaan Ansible di lingkungan kami. Karena saya tidak akan dapat memperbarui Ansible ketika itu merusak buku pedoman pengguna saya.

Tetapi seperti yang dinyatakan @bcoca di atas, sebagian besar pengembang tidak melihat diskusi ini di sini secara teratur dan masalah ini mungkin bukan tempat yang tepat untuk membahas perubahan karena ini tentang dokumentasi yang benar.

@Tronde : orang akan berpendapat bahwa kontributor DAN pelanggan dikonsultasikan sebelum cerita ditulis untuk memahami dampaknya dan mengumpulkan umpan balik dengan baik sebelum seseorang memberi kode solusi. Seperti yang telah disebutkan beberapa orang di sini, ini adalah kegagalan produk yang telah kami lihat lebih dari sekali.

Sebagai contoh situasi yang dijelaskan @andyfeller tentang perubahan ini:

Kami memiliki masalah dengan ini di situs kami.

Kami menggunakan Red Hat Identity Manager sebagai inventaris eksternal, kami tidak mengontrolnya, berisi banyak grup host dengan tanda hubung alih-alih garis bawah. Ini tidak akan diubah (karena semua hal lain yang ada menggunakan nama-nama itu).

Jadi, kita membutuhkan:

  • Untuk mengonfigurasi Ansible untuk mempertahankan perilaku saat ini
  • Senyapkan peringatan penghentian
  • Lakukan ini untuk baris perintah Ansible dan Ansible Tower

FYI PR https://github.com/ansible/ansible/pull/66650 (tolong tidak ada garpu rumput di sana) dijadwalkan untuk 2.10 (pada saat ini), yang berarti siapa pun yang saat ini melihat peringatan ini akan (setelah mereka meningkatkan ke 2.10, lagi dengan asumsi bahwa PR digabungkan) mulai mengalami kegagalan playbook sebagai gantinya (sampai mereka menetapkan force_valid_group_names = ignore dalam ansible.cfg ).

Hanya memposting untuk visibilitas. Saya masih dengan tegas mendukung pernyataan saya

Praktis siapa pun yang menggunakan Ansible dengan AWS harus mengganti default.

@geerlingguy Apakah itu PR yang benar #? Sepertinya itu menunjuk ke masalah ini.

FYI ini dibahas pada Rapat Inti di sini , mulai dari 19:06:55

@ apple4ever oops, perbarui tautannya, ini https://github.com/ansible/ansible/pull/66650

Jadi saya telah melihat di atas banyak komentar tentang hal-hal yang sudah dijawab/dibantah/dll, jadi hanya akan menautkan di sini posting saya sebelumnya.

https://github.com/ansible/ansible/issues/56930#issuecomment -516863432

Tolong jangan tambahkan posting baru yang tidak menambahkan item BARU untuk diskusi karena mereka menyembunyikan yang sebelumnya sudah dijawab.

Omong-omong, di mana tempat yang baik untuk menautkan dalam dokumentasi Python tentang bagaimana nama variabel yang valid terlihat? Ada https://docs.python.org/3/reference/lexical_analysis.html#grammar -token-identifier , tetapi itu tidak benar-benar ramah pengguna atau dapat dibaca oleh orang-orang tanpa latar belakang Ilmu Komputer.

Alasan bertanya adalah karena saya tidak yakin apakah keluhan awal yang sebenarnya telah ditangani. Hanya ada peringatan bahwa ada sesuatu yang salah, tetapi dibutuhkan banyak penggalian untuk mengetahui apa sebenarnya dan bagaimana seseorang - jika mau atau mampu - benar-benar dapat memilih nama grup yang valid. Saya mengharapkan setidaknya "Nama grup foo-bar berisi karakter yang tidak valid ( - ). Nama grup yang valid harus berupa pengidentifikasi Python yang valid (lihat https://docs.python.org/??? untuk informasi lebih lanjut)" pesan, bukan hanya "ada karakter yang buruk, periksa lagi dengan -vvvv untuk benar-benar mengetahui yang mana!". Idealnya ini juga akan menyebutkan bahwa ini dapat dinonaktifkan, tetapi dapat menyebabkan masalah tak terduga lainnya (seperti mempersulit Ansible untuk membedakan grup foo-bar , foo.bar dan foo_bar ).

Saat ini lebih merupakan pesan "Anda melakukan sesuatu yang salah, perbaiki" tanpa cara yang jelas tentang cara melanjutkan yang mungkin juga berkontribusi pada respons yang kuat di sini.

@geerlingguy menulis di komentar 56930 :

(sampai mereka menetapkan force_valid_group_names = false dalam ansible.cfg)

Dokumentasi tidak menyebutkan 'false' sebagai nilai yang valid untuk kunci ini. Saya telah menetapkan nilai ke 'abaikan' yang seharusnya berhasil. Tetapi apakah 'false' merupakan kata kunci yang tidak valid atau benar dan dokumentasinya tidak lengkap di sini?

@bcoca dalam komentar sebelumnya:

Hanya untuk mengatakan ini sekali, jelas , ANDA AKAN SELALU DAPAT MENGGUNAKAN DASH PADA NAMA GRUP juga titik dan karakter lain yang sekarang dianggap 'tidak valid', hanya saja tidak secara default. 'Default' ini adalah yang tidak digunakan lagi, defaultnya adalah 'aman' di 2.11, tetapi Anda akan selalu memiliki opsi untuk 'memilih ikut' pada perilaku lama.

Anda telah berulang kali menyatakan bahwa perilaku saat ini dapat dipertahankan, tetapi pengaturan ansible.cfg apa yang tepat diperlukan untuk melakukan ini _now_ dan menekan peringatan penghentian.

Saya sudah mencoba seperti yang ditulis @geerlingguy di komentar 56930:

(sampai mereka menetapkan force_valid_group_names = false dalam ansible.cfg)

Yang menyebabkan buku pedoman saya gagal ketika tidak dapat menemukan host atau grup dengan tanda hubung (mereka datang dari plugin inventaris yang kami tulis BTW, apakah tesis harus melakukan transformasi juga, atau apakah itu dilakukan ketika Ansible menyerap inventaris dari pluginnya?)

Saya sudah mencoba seperti yang ditulis @geerlingguy di komentar 56930:

(sampai mereka menetapkan force_valid_group_names = false dalam ansible.cfg)

Yang menyebabkan buku pedoman saya gagal ketika tidak dapat menemukan host atau grup dengan tanda hubung (mereka datang dari plugin inventaris yang kami tulis BTW, apakah tesis harus melakukan transformasi juga, atau apakah itu dilakukan ketika Ansible menyerap inventaris dari pluginnya?)

Ini disebutkan dalam beberapa komentar dan dalam dokumentasi . Anda harus menggunakan never atau abaikan .

Jadi, apakah kita seharusnya tidak lagi menggunakan skrip inventaris dinamis EC2 karena skrip ini mengelompokkan semuanya berdasarkan 'us-timur-1', 'us-timur-2', dll? Atau ada rencana mau update? Saya baru saja membuka dokumentasi Ansible untuk skrip inventaris dinamis EC2 dan tautan untuk mengunduhnya di Github tidak berfungsi lagi, jadi itu menarik.

Saya baru saja membuka dokumentasi Ansible untuk skrip inventaris dinamis EC2 dan tautan untuk mengunduhnya di Github tidak berfungsi lagi, jadi itu menarik.

Lihat https://github.com/ansible/ansible/issues/68419

bagi anda yang tidak mau repot membaca log IRC, inilah keputusannya, yaitu no decision:

19:15:40 <sivel> I've got to say, that brining this topic up all the time isn't a good use of time
19:15:52 <cyberpear> bcoca nominated it
19:16:07 <felixfontein> I think the aim was to solve this once and for all (like, again :) )
19:16:29 <cyberpear> since bcoca is not here, move on to next topic?
19:16:34 <sivel> honestly, I don't think this is going to be the right forum to make a decision on this
19:16:45 <jillr> +2 moving on
19:16:47 <cyberpear> sivel: what's the correct forum?
19:16:55 <felixfontein> sivel: what is the right forum for making that decision?
19:17:02 <cyberpear> "declaration from Red Hat On High"?
19:17:15 <sivel> I'm going to abstain on that, but this project is not a democracy
19:17:16 <cyberpear> -1 to "declaration from Red Hat On High"
19:17:24 <sivel> too many cooks in the kitchen distract
19:17:45 <sivel> We know the arguments at this point
19:17:59 <sivel> anywho, next topic

ya, seseorang menulis "jangan ragu untuk mampir ML atau IRC". tidak, "proyek ini bukan demokrasi".

ya, seseorang menulis "jangan ragu untuk mampir ML atau IRC". tidak, "proyek ini bukan demokrasi".

Sejujurnya ini salah dengan opensource - Jika mengarah ke cara yang tidak populer - orang bisa melakukan fork, apakah bisa fork?

Saya dapat melihat menerima PR dalam kemungkinan sangat lambat. Tambalan terlihat jelas dibutuhkan dan perubahan sederhana tetapi tidak pernah masuk. Untungnya ansible sendiri fleksibel untuk memungkinkan orang menggunakan plugin khusus namun tampaknya basi akan membuat diri saya lebih sedikit dalam kontribusi - atau bahkan lebih merepotkan untuk melakukannya.

Merasa sedikit sedih, sungguh...

@sunshine69 Saya merasakan sakit Anda. Tapi itu adalah diskusi yang harus dilakukan di IRC atau Google Group for Ansible Development.

Masalah ini bukan tempat yang tepat untuk itu. Karena hanya sedikit orang yang membaca di sini.

@sunshine69 Saya merasakan sakit Anda. Tapi itu adalah diskusi yang harus dilakukan di IRC atau Google Group for Ansible Development.

Masalah ini bukan tempat yang tepat untuk itu. Karena hanya sedikit orang yang membaca di sini.

Sementara diskusi mungkin lebih produktif di saluran lain tersebut, transparansi dihargai untuk orang-orang yang mengikuti masalah ini secara khusus. IRC bukanlah pilihan semua orang.

FYI: Hapus penghentian untuk TRANSFORM_INVALID_GROUP_CHARS baru saja digabungkan kemarin. Ada PR backport untuk 2.9 (https://github.com/ansible/ansible/pull/69487) dan 2.8 (https://github.com/ansible/ansible/pull/69488) untuk menghapus peringatan penghentian di sana.

File yang diidentifikasi dalam deskripsi:

Jika file-file ini salah, harap perbarui bagian deskripsi component name atau gunakan perintah bot !component .

klik di sini untuk bantuan bot

Ketika saya mengatur force_valid_group_names = ignore PERINGATAN hilang, tetapi PEMBERITAHUAN PENGHENTIAN tidak hilang.

Akhirnya saya menemukan di dokumen: force_valid_group_names = silently yang akan melakukan penggantian dan tidak akan menyumbat output - jika itu yang ingin Anda lakukan.

Meskipun demikian, seluruh masalah ini dapat dihindari sejak awal jika perubahan yang tidak berguna seperti ini tidak dilakukan sejak awal.

@ emmm-dee - Untuk masalah khusus itu, saya membuka https://github.com/ansible/ansible/issues/70908 — perhatikan bahwa masalah ini masih berlanjut, karena masih belum ada dokumentasi resmi untuk apa karakter grup _are_ 'valid' .

terima kasih kepada @geerlingguy atas tindakan Anda! Anda adalah orang yang membuat ansible menjadi lebih baik.

Saya bekerja untuk aplikasi kami untuk bouncing (start/stop) tetapi saya tidak terhubung dengan host aplikasi.

Saya mencoba perintah ping, yang Anda kirim dan berhasil ...

[ webadmin@vlodjumpts00 ~]$ ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) byte data.

64 byte dari 8.8.8.8: icmp_seq=1 ttl=112 waktu=10.6 ms

[ webadmin@vlodjumpts00 ~]$ mirrorlist.centos.org

-bash: mirrorlist.centos.org: perintah tidak ditemukan

Saya ingin menggunakan ini untuk organisasi kami.. jika saya menjalankan perintah "ansible all -m ping". menghadapi kesalahan, di bawah ini adalah detailnya:

[ aa63457@vlodjumpts00 bin]$ memungkinkan semua -m ping

berubah, tetapi masih dapat dikonfigurasi pengguna pada penghentian. Fitur ini akan dihapus di versi 2.10. Peringatan penghentian dapat berupa

dinonaktifkan dengan menyetel deprecation_warnings=False di ansible.cfg.

RTE3EPAadmin | TIDAK TERJANGKAU! => {

"changed": false,

"msg": "Failed to connect to the host via ssh: ###############################################################################\n# CenturyLink computers and the CenturyLink computer network are CenturyLink  #\n# property. Only authorized persons may use them and only for legal and proper#\n# purposes as determined solely by CenturyLink. You consent to the monitoring #\n# of their use. You must use CenturyLink computers and the network in         #\n# accordance with the CenturyLink Code of Conduct, subject to discipline for  #\n# misuse. Customer use is governed by the CenturyLink Acceptable Use Policy.  #\n###############################################################################\nUse CTL credentials (login/password) on this server.\nAUTH-NOTICE:\nAUTH-NOTICE: Use your cuid as your username\nAUTH-NOTICE:\nPermission denied (publickey,password).",

"unreachable": true

}

localhost | SUKSES => {

"ansible_facts": {

    "discovered_interpreter_python": "/usr/bin/python"

},

"changed": false,

"ping": "pong"

}

Tolong bantu saya ... apa yang harus saya lakukan ini. Sebenarnya, kami tidak memiliki file UN/PWD untuk host untuk menghubungkan mesin host..

localhost ansible_connection=lokal

[RTE3VFO]

RTE3VFOAdmin ansible_host=vlddwblasts001.test.intranet

RTE3VFOManaged ansible_host=vlddwblasts002.test.intranet

[RTE3EP]

RTE3EPAdmin ansible_host=vlddwblasts002.test.intranet

RTE3EPDikelola ansible_host=vlddwblasts003.test.intranet

[RTE3RES]

RTE3RESAdmin ansible_host=vlddwblasts003.test.intranet

RTE3RESAManaged ansible_host=vlddwblasts004.test.intranet

[RTE3ORCH]

RTE3ORCHAdmin ansible_host=vlddwblasts004.test.intranet

RTE3ORCHDikelola ansible_host=vlddwblasts005.test.intranet

[RTE3EASE]

RTE3EASEAdmin ansible_host=vlddwblasts005.test.intranet

RTE3EASEManaged ansible_host=vlddwblasts006.test.intranet

[RTE3RTS]

RTE3RTSAadmin ansibke_host=vlddwblasts006.test.intranet

[EASE-ASR-Test2:anak-anak]

RTE3VFO

RTE3EP

RTE3RES

RTE3ORCH

RTE3EASE

RTE3RTS

dan struktur direktorinya adalah:

[ webadmin@vlodjumpts00 mungkin]$ pwd

/etc/mungkin

[ webadmin@vlodjumpts00 memungkinkan]$ ll

jumlah 84

-rw------- 1 webadmin webadmin 607 12 Jul 2017 1

-rw-r--r-- 1 webadmin webadmin 17910 19 Sep 09:55 ansible.cfg

-rw-r--r-- 1 root root 19985 8 Des 2019 ansible.cfg.rpmnew

-rw------- 1 webadmin webadmin 213 Jul 3 2017 easeasr-rte2-ease.yml

-rwxr-xr-x 1 webadmin webadmin 1034 19 Sep 09:16 easy-hosts

-rwxr-xr-x 1 webadmin webadmin 1647 19 Sep 10:50 host

-rw------- 1 webadmin webadmin 2679 3 Jul 2017 hosts.bkp

-rw------- 1 webadmin webadmin 273 6 Juli 2017 lineinsfile_tst.yml

drwx------ 4 webadmin webadmin 4096 2 Nov 2017 buku pedoman

drwxr-xr-x 3 root root 19 Des 8 2019 peran

-rwxr-xr-x 1 webadmin webadmin 7321 2 Nov 2017 servmix_hosts

-rw------- 1 webadmin webadmin 208 19 Sep 10:55 test.yml

-rw------- 1 webadmin webadmin 122 19 Sep 10:54 vars.yaml


Kami tidak terhubung langsung ke host ... pertama login server lompat kami dan dari ssh host ...

server lompat adalah port "vmdcltctws217" menggunakan =22, tipe koneksi = ssh

dan kemudian masuk dengan UN/PWD kami

setelah itu kami melakukan sudo untuk koneksi ke server host..

sudo su - easesqa

dan kemudian ssh host server seperti..

vlddwblasts001.test.intranet

lalu kita jalankan perintah start/stop dari sini..

Tolong bantu saya, untuk apa saya bisa melakukannya?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat