向vagrant中添加vagrant box:
vagrant box add centos64 http://public.thornelabs.net/centos-6.4-x86_64.box
vagrantfile文件内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 | # -*- mode: ruby -*- # vi: set ft=ruby : VAGRANTFILE_API_VERSION = "2" $commonscript = <<COMMONSCRIPT # Set verbose set -v # Set exit on error set -e # Silly Ubuntu 12.04 doesn't have the # --stdin option in the passwd utility echo root:vagrant | chpasswd cat << EOF >> /etc/hosts 192.168.236.10 chef 192.168.236.11 controller1 192.168.236.12 compute1 EOF COMMONSCRIPT $chefscript = <<CHEFSCRIPT # Set verbose set -v # Set exit on error set -e # Silly Ubuntu 12.04 doesn't have the # --stdin option in the passwd utility echo root:vagrant | chpasswd cat << EOF >> /etc/hosts 192.168.236.10 chef 192.168.236.11 controller1 192.168.236.12 compute1 EOF wget https://raw.github.com/rcbops/support-tools/master/chef-install/install-chef-server.sh -O /tmp/install-chef-server.sh --no-check-certificate chmod +x /tmp/install-chef-server.sh export CHEF_URL="https://chef:443" /tmp/install-chef-server.sh cd /root git clone https://github.com/rcbops/chef-cookbooks.git cd chef-cookbooks git checkout v4.2.1 git submodule init git submodule sync git submodule update knife cookbook upload -a -o cookbooks knife role from file roles/*rb cat << EOF >> /tmp/rpcv421.json { "name": "rpcv421", "description": "Rackspace Private Cloud v4.2.1", "cookbook_versions": {}, "json_class": "Chef::Environment", "chef_type": "environment", "default_attributes": {}, "override_attributes": { "nova": { "libvirt": { "virt_type": "qemu", "vncserver_listen": "0.0.0.0" }, "network": { "provider": "neutron" } }, "neutron": { "ovs": { "provider_networks": [ { "label": "ph-eth2", "bridge": "br-eth2" } ], "network_type": "gre", "network": "neutron" } }, "mysql": { "allow_remote_root": true, "root_network_acl": "%" }, "osops_networks": { "nova": "192.168.236.0/24", "public": "192.168.236.0/24", "management": "192.168.236.0/24", "neutron": "192.168.240.0/24" } } } EOF knife environment from file /tmp/rpcv421.json ssh-keygen -t rsa -N "" -f /root/.ssh/id_rsa ssh-keyscan controller1 >> /root/.ssh/known_hosts ssh-keyscan 192.168.236.11 >> /root/.ssh/known_hosts ssh-keyscan compute1 >> /root/.ssh/known_hosts ssh-keyscan 192.168.236.12 >> /root/.ssh/known_hosts yum install -y expect expect<<EOF spawn ssh-copy-id controller1 expect "root@controller1's password:" send "vagrant\n" expect eof EOF expect<<EOF spawn ssh-copy-id compute1 expect "root@compute1's password:" send "vagrant\n" expect eof EOF knife bootstrap controller1 --environment rpcv421 --run-list 'role[single-controller],role[single-network-node]' || while ! knife ssh "name:controller1" "chef-client"; do echo "chef-client failed, retrying"; sleep 5; done knife bootstrap compute1 --environment rpcv421 --run-list 'role[single-compute]' || while ! knife ssh "name:compute1" "chef-client"; do echo "chef-client failed, retrying"; sleep 5; done echo "All done!" CHEFSCRIPT Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "centos64" # Turn off shared folders config.vm.synced_folder ".", "/vagrant", id: "vagrant-root", disabled: true # Begin controller1 config.vm.define "controller1" do |controller1_config| controller1_config.vm.hostname = "controller1" controller1_config.vm.provision "shell", inline: $commonscript # eth1 controller1_config.vm.network "private_network", ip: "192.168.236.11" # eth2 controller1_config.vm.network "private_network", ip: "192.168.240.11" controller1_config.vm.provider "vmware_fusion" do |v| v.vmx["memsize"] = "2048" v.vmx["numvcpus"] = "2" end controller1_config.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--memory", "2048"] v.customize ["modifyvm", :id, "--cpus", "2"] end end # End controller1 # Begin compute1 config.vm.define "compute1" do |compute1_config| compute1_config.vm.hostname = "compute1" compute1_config.vm.provision "shell", inline: $commonscript # eth1 compute1_config.vm.network "private_network", ip: "192.168.236.12" # eth2 compute1_config.vm.network "private_network", ip: "192.168.240.12" compute1_config.vm.provider "vmware_fusion" do |v| v.vmx["memsize"] = "2048" v.vmx["numvcpus"] = "2" end compute1_config.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--memory", "2048"] v.customize ["modifyvm", :id, "--cpus", "2"] end end # End compute1 # Begin chef config.vm.define "chef" do |chef_config| chef_config.vm.hostname = "chef" chef_config.vm.provision "shell", inline: $chefscript # eth1 chef_config.vm.network "private_network", ip: "192.168.236.10" chef_config.vm.provider "vmware_fusion" do |v| v.vmx["memsize"] = "1024" v.vmx["numvcpus"] = "1" end chef_config.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--memory", "1024"] v.customize ["modifyvm", :id, "--cpus", "1"] end end # End chef end |