Contoh 5: Menggunakan Atribut - AWS OpsWorks

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Contoh 5: Menggunakan Atribut

penting

AWS OpsWorks Stacks Layanan ini mencapai akhir masa pakai pada 26 Mei 2024 dan telah dinonaktifkan untuk pelanggan baru dan yang sudah ada. Kami sangat menyarankan pelanggan untuk memindahkan beban kerja mereka ke solusi lain sesegera mungkin. Jika Anda memiliki pertanyaan tentang migrasi, hubungi AWS Support Tim di AWS re:Post atau melalui AWS Dukungan Premium.

Resep di bagian sebelumnya menggunakan nilai hard-code untuk segala sesuatu selain platform. Pendekatan ini bisa merepotkan jika, misalnya, Anda ingin menggunakan nilai yang sama di lebih dari satu resep. Anda dapat menentukan nilai secara terpisah dari resep dengan menyertakan file atribut di buku masak Anda.

File atribut adalah aplikasi Ruby yang memberikan nilai ke satu atau lebih atribut. Itu harus ada di attributes folder buku masak. Chef menggabungkan atribut ke dalam objek node dan resep apa pun dapat menggunakan nilai atribut dengan mereferensikan atribut. Topik ini menunjukkan cara memodifikasi resep dari Iterasi untuk menggunakan atribut. Inilah resep asli untuk referensi.

[ "/srv/www/config", "/srv/www/shared" ].each do |path| directory path do mode 0755 owner 'root' group 'root' recursive true action :create end end

Berikut ini mendefinisikan atribut untuk nama subdirektori, mode, pemilik, dan nilai grup.

default['createdir']['shared_dir'] = 'shared' default['createdir']['config_dir'] = 'config' default['createdir']['mode'] = 0755 default['createdir']['owner'] = 'root' default['createdir']['group'] = 'root'

Perhatikan hal berikut:

  • Setiap definisi dimulai dengan tipe atribut.

    Jika atribut didefinisikan lebih dari sekali — mungkin dalam file atribut yang berbeda — tipe atribut menentukan prioritas atribut, yang menentukan definisi mana yang dimasukkan ke dalam objek node. Untuk informasi selengkapnya, lihat Atribut Prioritas. Semua definisi dalam contoh ini memiliki tipe default atribut, yang merupakan tipe biasa untuk tujuan ini.

  • Atribut memiliki nama bersarang.

    Objek node pada dasarnya adalah tabel hash yang dapat bersarang secara sewenang-wenang, sehingga nama atribut dapat dan umumnya bersarang. File atribut ini mengikuti praktik standar menggunakan nama bersarang dengan nama buku masak,createdir, sebagai elemen pertama.

Alasan untuk menggunakan createdir sebagai elemen pertama atribut adalah bahwa ketika Anda menjalankan Chef, Chef menggabungkan atribut dari setiap buku masak ke dalam objek node. Dengan AWS OpsWorks Stacks, objek node menyertakan sejumlah besar atribut dari buku masak bawaan selain atribut apa pun yang Anda tentukan. Menyertakan nama buku masak dalam nama atribut mengurangi risiko tabrakan nama dengan atribut dari buku masak lain, terutama jika atribut Anda memiliki nama seperti atau. port user Jangan beri nama atribut seperti [:apache2][:user], misalnya, kecuali jika Anda ingin mengganti nilai atribut itu. Untuk informasi selengkapnya, lihat Menggunakan Atribut Buku Masak Kustom.

Contoh berikut menunjukkan resep asli menggunakan atribut bukan nilai hard-code.

[ "/srv/www/#{node['createdir']['shared_dir']}", "/srv/www/#{node['createdir']['config_dir']}" ].each do |path| directory path do mode node['createdir']['mode'] owner node['createdir']['owner'] group node['createdir']['group'] recursive true action :create end end
catatan

Jika Anda ingin memasukkan nilai atribut ke dalam string, bungkus dengan#{}. Pada contoh sebelumnya, #{node['createdir']['shared_dir']} tambahkan “shared” ke “/srv/www/”.

Untuk menjalankan resep
  1. Jalankan kitchen destroy untuk memulai dengan instance bersih.

  2. Ganti kode recipes/default.rb dengan contoh resep sebelumnya.

  3. Buat subdirektori createdir bernama attributes dan tambahkan file bernama default.rb yang berisi definisi atribut.

  4. Edit .kitchen.yml untuk menghapus CentOS dari daftar platform.

  5. Jalankan kitchen converge dan kemudian masuk ke instance dan verifikasi itu /srv/www/shared dan /srv/www/config ada di sana.

catatan

Dengan AWS OpsWorks Stacks, mendefinisikan nilai sebagai atribut memberikan manfaat tambahan; Anda dapat menggunakan JSON khusus untuk mengganti nilai tersebut berdasarkan per-stack atau bahkan per-deployment. Ini dapat berguna untuk berbagai tujuan, termasuk yang berikut:

  • Anda dapat menyesuaikan perilaku resep Anda, seperti pengaturan konfigurasi atau nama pengguna, tanpa harus mengubah buku masak.

    Anda dapat, misalnya, menggunakan buku masak yang sama untuk tumpukan yang berbeda dan menggunakan JSON khusus untuk menentukan pengaturan konfigurasi kunci untuk tumpukan tertentu. Ini menghemat waktu dan upaya yang diperlukan untuk memodifikasi buku masak atau menggunakan buku masak yang berbeda untuk setiap tumpukan.

  • Anda tidak perlu memasukkan informasi yang berpotensi sensitif seperti kata sandi basis data di repositori buku masak Anda.

    Sebagai gantinya, Anda dapat menggunakan atribut untuk menentukan nilai default dan kemudian menggunakan JSON khusus untuk mengganti nilai itu dengan yang asli.

Untuk informasi selengkapnya tentang cara menggunakan JSON kustom untuk mengganti atribut, lihat. Mengesampingkan Atribut

File atribut dinamai default.rb karena merupakan aplikasi Ruby, jika agak sederhana. Itu berarti Anda dapat, misalnya, menggunakan logika bersyarat untuk menentukan nilai atribut berdasarkan sistem operasi. DiLogika Bersyarat, Anda menentukan nama subdirektori yang berbeda untuk keluarga Linux yang berbeda dalam resep. Dengan file atribut, Anda dapat menempatkan logika kondisional dalam file atribut.

File atribut berikut menggunakan value_for_platform untuk menentukan nilai ['shared_dir'] atribut yang berbeda, tergantung pada sistem operasi. Untuk kondisi lain, Anda dapat menggunakan if-elsif-else logika Ruby atau case pernyataan.

data_dir = value_for_platform( "centos" => { "default" => "shared" }, "ubuntu" => { "default" => "data" }, "default" => "user_data" ) default['createdir']['shared_dir'] = data_dir default['createdir']['config_dir'] = "config" default['createdir']['mode'] = 0755 default['createdir']['owner'] = 'root' default['createdir']['group'] = 'root'
Untuk menjalankan resep
  1. Jalankan kitchen destroy untuk memulai dengan contoh baru.

  2. Ganti kode attributes/default.rb dengan contoh sebelumnya.

  3. Edit .kitchen.yml untuk menambahkan platform CentOS ke bagian platform, seperti yang dijelaskan dalam. Logika Bersyarat

  4. Jalankankitchen converge, lalu masuk ke instance untuk memverifikasi bahwa direktori ada di sana.

Setelah selesai, jalankan kitchen destroy untuk menghentikan instance. Contoh selanjutnya menggunakan buku masak baru.