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 Dukungan Tim di AWS re:Post
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 bawaanport
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
-
Jalankan
kitchen destroy
untuk memulai dengan instance bersih. -
Ganti kode
recipes/default.rb
dengan contoh resep sebelumnya. -
Buat subdirektori
createdir
bernamaattributes
dan tambahkan file bernamadefault.rb
yang berisi definisi atribut. -
Edit
.kitchen.yml
untuk menghapus CentOS dari daftar platform. -
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 kustom JSON 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 kustom JSON 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 kustom JSON untuk mengganti nilai itu dengan yang asli.
Untuk informasi selengkapnya tentang cara menggunakan kustom JSON untuk mengganti atribut, lihatMengesampingkan 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
-
Jalankan
kitchen destroy
untuk memulai dengan contoh baru. -
Ganti kode
attributes/default.rb
dengan contoh sebelumnya. -
Edit
.kitchen.yml
untuk menambahkan platform CentOS ke bagian platform, seperti yang dijelaskan dalam. Logika Bersyarat -
Jalankan
kitchen 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.