vi consiglio vivamente di controllare post sul blog di Mike Greiling Simplify OpsWorks Development With Packer e il suo repo github opsworks-vmche vi aiutano a deridere l'intero opsworks pila compresa l'installazione dell'agente opsworks modo da poter Test App distribuire ricette, strati multipli, più istanze allo stesso tempo, ecc.. È estremamente impressionante.
Quick Start su Ubuntu 14.04
NOTA: questo non può essere fatto da una macchina virtuale Ubuntu perché VirtualBox non supporta la virtualizzazione annidata di macchine a 64-bit.
- Installare 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
- Installare 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
- Installare Vagrant
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
- Installare 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
- costruire l'immagine opsworks-vm virtualbox di Mike Greiling utilizzando Packer
mkdir ~/packer && cd ~/packer
git clone https://github.com/pixelcog/opsworks-vm.git
cd opsworks-vm
rake build install
- Questo installerà una nuova VM VirtualBox a ~/.vagrant.d/scatole/ubuntu1404-opsworks/
prendere in giro una singola istanza opsworks, creare un nuovo Vagrantfile in questo modo:
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu1404-opsworks"
config.vm.provision :opsworks, type: 'shell', args: 'path/to/dna.json'
end
Il percorso dna.json
file viene impostato rispetto al Vagrantfile e dovrebbe contiene tutti i dati JSON che desideri inviare a OpsWorks Chef.
Ad esempio:
{
"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]"
]
}
}
per deridere le istanze multiple opsworks e comprendono strati vedere la sua AWS OpsWorks "Getting Started" Example che include il stack.json di seguito.
Vagrantfile (per istanze multiple)
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"
}
}
}
Per chi non ha familiarità con il vagabondo si basta fare una vagrant up
per avviare l'istanza (s). Quindi puoi modificare il tuo libro di cucina localmente ed eventuali modifiche possono essere applicate da chef di re-running contro l'istanza (i) esistente con vagrant provision.
Puoi fare un vagrant destroy
e vagrant up
per iniziare da zero.
Questo ancora non risolve il problema di testare le ricette che dipendono dalle ricette integrate di Amazon. Stai suggerendo di utilizzare Berkshelf per inserire tutte le ricette OpsWorks, eseguirle, quindi eseguire le mie ricette? E se volessi, per esempio, installare 'mysql :: client' che richiede' node [: opsworks] [: layers] [: db-master] 'o' node [: opsworks] [: stack] [: rds_instances] [i] [: engine] == 'mysql''? Capisco come eseguire queste ricette, ma come faccio a testarle usando chefspec? – davepgreene
Sì, il tuo Berksfile esistente è corretto per quanto riguarda i libri di cucina giusti. ChefSpec è solo un test unitario, quindi le dipendenze in genere non dovrebbero importare, ma tu faresti la stessa cosa con Test Kitchen con i dati del nodo fisso. – coderanger
Capisco. Segnalo come risposta perché mi hai indicato nella giusta direzione. Grazie! – davepgreene