forked from rackerlabs/vagrant-solum-dev
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Vagrantfile
236 lines (200 loc) · 8.96 KB
/
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
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
#############################################################################
# This VagrantFile defines two configurations:
#
# Config 1:
# A separate VM for API server, git server, a server for support services
# such as MySQL and RabbitMQ, and DevStack that has Nova with Docker driver
#
# Config 2:
# One VM for DevStack with 'Dockerized' Nova and one VM for the rest of
# the components
#
# Set ENV['DEVSTACK_BRANCH'] to change the devstack branch to use
# Set ENV['SOLUM']='~/dev/solum' path on local system to solum repo
# Set ENV['SOLUM_CLI']='~/dev/python-solumclient' path on local system to solum repo
# Set ENV['SOLUM_IMAGE_FORMAT'] to "vm" if you don't want docker
#############################################################################
host_cache_path = File.expand_path("../.cache", __FILE__)
guest_cache_path = "/tmp/vagrant-cache"
if ARGV.include? '--provider=rackspace'
RACKSPACE = true
unless ENV['PUBLIC_KEY']
raise "Set ENV['PUBLIC_KEY'] to use rackspace provisioner"
end
unless ENV['PRIVATE_KEY']
raise "Set ENV['PRIVATE_KEY'] to use rackspace provisioner"
end
else
RACKSPACE = false
end
if ARGV[0] == 'help' and ARGV[1] == 'vagrantfile'
puts <<eof
How to use this Vagrantfile:
* [SOLUM=~/dev/solum] vagrant up devstack [--provider==rackspace]
see README.md for detailed instructions.
eof
ARGV.shift(2)
ARGV.unshift('status')
end
# ensure the cache path exists
FileUtils.mkdir(host_cache_path) unless File.exist?(host_cache_path)
############
# Variables and fun things to make my life easier.
############
DEVSTACK_BRANCH = ENV['DEVSTACK_BRANCH'] ||= "master"
DEVSTACK_REPO = ENV['DEVSTACK_REPO'] ||= "https://github.com/openstack-dev/devstack.git"
NOVADOCKER_BRANCH = ENV['NOVADOCKER_BRANCH'] ||= "master"
NOVADOCKER_REPO = ENV['NOVADOCKER_REPO'] ||= "https://github.com/stackforge/nova-docker.git"
SOLUM_BRANCH = ENV['SOLUM_BRANCH'] ||= "master"
SOLUM_CLI_BRANCH = ENV['SOLUM_CLI_BRANCH'] ||= "master"
SOLUM_CLI_REPO = ENV['SOLUM_CLI_REPO'] ||= "https://github.com/stackforge/python-solumclient.git"
SOLUM_IMAGE_FORMAT = ENV['SOLUM_IMAGE_FORMAT'] ||= "docker"
SOLUM_REPO = ENV['SOLUM_REPO'] ||= "https://github.com/stackforge/solum.git"
MISTRAL_BRANCH = ENV['MISTRAL_BRANCH'] ||= "master"
MISTRAL_REPO = ENV['MISTRAL_REPO'] ||= "https://github.com/stackforge/mistral.git"
############
# Chef provisioning stuff for non devstack boxes
############
# All servers get this
default_runlist = %w{ recipe[apt::default] recipe[solum::python] }
default_json = {
}
Vagrant.configure("2") do |config|
# box configs!
config.vm.box = 'ubuntu-12.04-docker'
config.vm.box_url = 'http://55e99fc2f9b7a4001bc8-51d789ac964757728410a7d1f622e9af.r39.cf1.rackcdn.com/ubuntu-12.04-amd64-vbox.box'
# all good servers deserve a solum
if ENV['SOLUM']
config.vm.synced_folder ENV['SOLUM'], "/opt/stack/solum"
end
if ENV['NOVADOCKER']
config.vm.synced_folder ENV['NOVADOCKER'], '/opt/stack/nova-docker'
end
if ENV['SOLUM_CLI']
config.vm.synced_folder ENV['SOLUM_CLI'], "/opt/stack/python-solumclient"
end
if ENV['MISTRAL']
config.vm.synced_folder ENV['MISTRAL'], "/opt/stack/mistral"
end
if RACKSPACE
unless ENV['OS_USERNAME']
puts "Set ENV['OS_USERNAME'] to use rackspace provisioner"
end
unless ENV['OS_PASSWORD']
puts "Set ENV['OS_PASSWORD'] to use rackspace provisioner"
end
config.vm.provision :shell, :inline => <<-SCRIPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -i eth0 -j DROP
echo 'UseDNS no' >> /etc/ssh/sshd_config
echo 'PasswordAuthentication no' >> /etc/ssh/sshd_config
service ssh reload
SCRIPT
end
config.vm.provider :rackspace do |rs|
rs.username = ENV['OS_USERNAME']
rs.api_key = ENV['OS_PASSWORD']
rs.flavor = /4 GB Performance/
rs.image = /Ubuntu 13.10/
rs.server_name = "#{ENV['USER']}_Vagrant"
rs.public_key_path = ENV['PUBLIC_KEY']
end
if ENV['PRIVATE_KEY']
config.ssh.private_key_path = ENV['PRIVATE_KEY']
end
# DevStack with Nova that may have Docker driver and/or Solum.
config.vm.define :devstack do |devstack|
devstack.vm.hostname = 'devstack'
devstack.vm.network "forwarded_port", guest: 80, host: 8080 # Horizon
devstack.vm.network "forwarded_port", guest: 9001, host: 9001 # Solum Demo GUI
devstack.vm.network "forwarded_port", guest: 8774, host: 8774 # Compute API
devstack.vm.network :private_network, ip: '192.168.76.2'
devstack.vm.network :private_network, ip: '172.24.4.225', :netmask => "255.255.255.224", :auto_config => false
devstack.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--memory", 4096]
v.customize ["modifyvm", :id, "--cpus", 2]
v.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"]
end
devstack.vm.provider :rackspace do |rs|
rs.server_name = "#{ENV['USER']}_#{devstack.vm.hostname}"
end
if ENV['TESTS']
devstack.berkshelf.enabled = true
devstack.omnibus.chef_version = :latest
devstack.vm.provision :chef_solo do |chef|
chef.provisioning_path = guest_cache_path
#chef.log_level = :debug
chef.json = default_json.merge(api_json)
chef.run_list = default_runlist + api_runlist
end
else
devstack.vm.provision :shell, :inline => <<-SCRIPT
grep "vagrant" /etc/passwd || useradd -m -s /bin/bash -d /home/vagrant vagrant
grep "vagrant" /etc/sudoers || echo 'vagrant ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
SCRIPT
devstack.vm.provision :shell, :inline => <<-SCRIPT
apt-get update
apt-get -y install git socat curl wget build-essential python-mysqldb \
python-dev libssl-dev python-pip git-core libxml2-dev libxslt-dev \
python-pip libmysqlclient-dev vim screen
pip install virtualenv
pip install tox==1.6.1
mkdir -p /opt/stack
chown vagrant /opt/stack
SCRIPT
end
unless ENV['SOLUM']
devstack.vm.provision :shell, :inline => <<-SCRIPT
echo su - vagrant -c "git clone #{SOLUM_REPO} /opt/stack/solum || echo /opt/stack/solum already exists"
su - vagrant -c "git clone #{SOLUM_REPO} /opt/stack/solum || echo /opt/stack/solum already exists"
cd /opt/stack/solum
su vagrant -c "git checkout #{SOLUM_BRANCH}"
SCRIPT
end
unless ENV['MISTRAL']
devstack.vm.provision :shell, :inline => <<-SCRIPT
echo su - vagrant -c "git clone #{MISTRAL_REPO} /opt/stack/mistral || echo /opt/stack/mistral already exists"
su - vagrant -c "git clone #{MISTRAL_REPO} /opt/stack/mistral || echo /opt/stack/mistral already exists"
cd /opt/stack/mistral
su vagrant -c "git checkout #{MISTRAL_BRANCH}"
SCRIPT
end
devstack.vm.provision :shell, :inline => <<-SCRIPT
su - vagrant -c "git clone #{DEVSTACK_REPO} /home/vagrant/devstack || echo devstack already exists"
cd /home/vagrant/devstack
su vagrant -c "git checkout #{DEVSTACK_BRANCH}"
su vagrant -c "touch local.conf"
cp -R /opt/stack/solum/contrib/devstack/lib/* /home/vagrant/devstack/lib/
cp /opt/stack/solum/contrib/devstack/extras.d/* /home/vagrant/devstack/extras.d/
SCRIPT
devstack.vm.provision :shell, :inline => <<-SCRIPT
cp -R /opt/stack/mistral/contrib/devstack/lib/* /home/vagrant/devstack/lib/
cp /opt/stack/mistral/contrib/devstack/extras.d/* /home/vagrant/devstack/extras.d/
SCRIPT
if SOLUM_IMAGE_FORMAT == 'docker'
devstack.vm.provision :shell, :inline => <<-SCRIPT
echo 'Set up Nova Docker Driver'
su - vagrant -c "git clone #{NOVADOCKER_REPO} /opt/stack/nova-docker || echo novadocker already exists"
cd /opt/stack/nova-docker
su vagrant -c "git checkout #{NOVADOCKER_BRANCH}"
cp -R /opt/stack/nova-docker/contrib/devstack/lib/* /home/vagrant/devstack/lib/
cp /opt/stack/nova-docker/contrib/devstack/extras.d/* /home/vagrant/devstack/extras.d/
useradd docker || echo "user docker already exists"
usermod -a -G docker vagrant || echo "vagrant already in docker group"
cat /vagrant/local.conf.docker > /home/vagrant/devstack/local.conf
su vagrant -c "/home/vagrant/devstack/stack.sh"
# just in case the rootwrap.d didn't make it.
[[ -e /etc/nova/rootwrap.d/docker.filters ]] || cp /opt/stack/nova-docker/etc/nova/rootwrap.d/docker.filters /etc/nova/rootwrap.d/docker.filters
docker pull solum/slugrunner
docker tag solum/slugrunner 127.0.0.1:5042/slugrunner
docker push 127.0.0.1:5042/slugrunner
SCRIPT
else
devstack.vm.provision :shell, :inline => <<-SCRIPT
cat /vagrant/local.conf.vm > /home/vagrant/devstack/local.conf
su vagrant -c "/home/vagrant/devstack/stack.sh"
SCRIPT
end
end
end