Tôi rất muốn giới thiệu bạn hãy kiểm tra bài viết trên blog Mike Greiling của Simplify OpsWorks Development With Packer và repo github mình opsworks-vmđó giúp bạn để thử toàn bộ opsworks ngăn xếp bao gồm các cài đặt của đại lý opsworks vì vậy bạn cũng có thể ứng dụng thử nghiệm triển khai công thức nấu ăn, nhiều lớp, nhiều phiên bản cùng một lúc, v.v.. Nó cực kỳ ấn tượng.
Quick Start trên Ubuntu 14.04
Chú ý: Đây có thể KHÔNG được thực hiện từ một máy ảo ubuntu vì VirtualBox không hỗ trợ ảo hóa lồng nhau của các máy 64-bit.
- Install ChefDK
mkdir /tmp/packages && cd /tmp/packages
wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chefdk_0.8.1-1_amd64.deb
sudo dpkg -i chefdk_0.8.0-1_amd64.deb
cd /opt/chefdk/
chef verify
which ruby
echo 'eval "$(chef shell-init bash)"' >> ~/.bash_profile && source ~/.bash_profile
- Install VirtualBox
echo 'deb http://download.virtualbox.org/virtualbox/debian vivid contrib' > /etc/apt/sources.list.d/virtualbox.list
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
sudo apt-get update -qqy
sudo apt-get install virtualbox-5.0 dkms
- Install 01.
cd /tmp/packages
wget https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.4_x86_64.deb
sudo dpkg -i vagrant_1.7.4_x86_64.deb
vagrant plugin install vagrant-berkshelf
vagrant plugin install vagrant-omnibus
vagrant plugin list
- Install Packer
mkdir /opt/packer && cd /opt/packer
wget https://dl.bintray.com/mitchellh/packer/packer_0.8.6_linux_amd64.zip
unzip packer_0.8.6_linux_amd64.zip
echo 'PATH=$PATH:/opt/packer' >> ~/.bash_profile && source ~/.bash_profile
- xây dựng hình ảnh opsworks-vm VirtualBox Mike Greiling bằng cách sử dụng Packer
mkdir ~/packer && cd ~/packer
git clone https://github.com/pixelcog/opsworks-vm.git
cd opsworks-vm
rake build install
- này sẽ cài đặt một máy ảo VirtualBox mới tới ~/.vagrant.d/hộp/ubuntu1404-opsworks/
Để thử một opsworks trường hợp duy nhất, tạo ra một Vagrantfile mới như vậy:
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu1404-opsworks"
config.vm.provision :opsworks, type: 'shell', args: 'path/to/dna.json'
end
Đường dẫn dna.json
tập tin được thiết lập tương đối so với Vagrantfile và nên chứa bất kỳ dữ liệu JSON nào bạn muốn gửi tới OpsWorks Chef.
Ví dụ:
{
"deploy": {
"my-app": {
"application_type": "php",
"scm": {
"scm_type": "git",
"repository": "path/to/my-app"
}
}
},
"opsworks_custom_cookbooks": {
"enabled": true,
"scm": {
"repository": "path/to/my-cookbooks"
},
"recipes": [
"recipe[opsworks_initial_setup]",
"recipe[dependencies]",
"recipe[mod_php5_apache2]",
"recipe[deploy::default]",
"recipe[deploy::php]",
"recipe[my_custom_cookbook::configure]"
]
}
}
Để thử nhiều opsworks trường và bao gồm các lớp thấy AWS OpsWorks "Getting Started" Example mình trong đó bao gồm các stack.json dưới đây.
Vagrantfile (đối với nhiều trường hợp)
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu1404-opsworks"
# Create the php-app layer
config.vm.define "app" do |layer|
layer.vm.provision "opsworks", type:"shell", args:[
'ops/dna/stack.json',
'ops/dna/php-app.json'
]
# Forward port 80 so we can see our work
layer.vm.network "forwarded_port", guest: 80, host: 8080
layer.vm.network "private_network", ip: "10.10.10.10"
end
# Create the db-master layer
config.vm.define "db" do |layer|
layer.vm.provision "opsworks", type:"shell", args:[
'ops/dna/stack.json',
'ops/dna/db-master.json'
]
layer.vm.network "private_network", ip: "10.10.10.20"
end
end
stack.json
{
"opsworks": {
"layers": {
"php-app": {
"instances": {
"php-app1": {"private-ip": "10.10.10.10"}
}
},
"db-master": {
"instances": {
"db-master1": {"private-ip": "10.10.10.20"}
}
}
}
},
"deploy": {
"simple-php": {
"application_type": "php",
"document_root": "web",
"scm": {
"scm_type": "git",
"repository": "dev/simple-php"
},
"memcached": {},
"database": {
"host": "10.10.10.20",
"database": "simple-php",
"username": "root",
"password": "correcthorsebatterystaple",
"reconnect": true
}
}
},
"mysql": {
"server_root_password": "correcthorsebatterystaple",
"tunable": {"innodb_buffer_pool_size": "256M"}
},
"opsworks_custom_cookbooks": {
"enabled": true,
"scm": {
"repository": "ops/cookbooks"
}
}
}
Đối với những người không quen thuộc với lang thang bạn chỉ cần làm một vagrant up
để bắt đầu dụ (s). Sau đó, bạn có thể sửa đổi sách dạy nấu ăn của mình tại địa phương và bất kỳ thay đổi nào có thể được áp dụng bởi bếp trưởng chạy lại đối với (các) cá thể hiện tại với vagrant provision.
Bạn có thể làm vagrant destroy
và vagrant up
để bắt đầu từ đầu.
Điều đó vẫn không thực sự giải quyết vấn đề thử nghiệm đối với công thức nấu ăn phụ thuộc vào công thức nấu ăn được xây dựng của Amazon. Bạn có gợi ý rằng tôi sử dụng Berkshelf để kéo tất cả các công thức nấu ăn của OpsWorks, chạy chúng, sau đó chạy công thức nấu ăn của tôi? Nếu tôi muốn, ví dụ, cài đặt 'mysql :: client' yêu cầu' nút [: opsworks] [: lớp] [: db-master] 'hoặc' nút [: opsworks] [: stack] [: rds_instances] [i] [: engine] == 'mysql''? Tôi hiểu cách chạy các công thức nấu ăn này, nhưng làm cách nào để kiểm tra chúng bằng cách sử dụng cookspec? – davepgreene
Có, Berksfile hiện tại của bạn là chính xác như xa như kéo trong sách dạy nấu ăn phù hợp. ChefSpec chỉ là thử nghiệm đơn vị nên các phụ thuộc không nên quan trọng, nhưng bạn sẽ làm điều tương tự như với Test Kitchen với dữ liệu nút được đóng hộp. – coderanger
Tôi hiểu. Tôi đánh dấu đây là câu trả lời vì bạn đã chỉ cho tôi đúng hướng. Cảm ơn! – davepgreene