This commit was added so that the puppetmaster can always be ubunut, even when swift is being tested on rhel. it allows for the nodes to override operatingsystem. It also adds code so that the puppetmaster does override its operatingsystem to always be ubuntu.
235 lines
6.5 KiB
Ruby
235 lines
6.5 KiB
Ruby
def parse_vagrant_config(
|
|
config_file=File.expand_path(File.join(File.dirname(__FILE__), 'config.yaml'))
|
|
)
|
|
require 'yaml'
|
|
config = {
|
|
'gui_mode' => "false",
|
|
'operatingsystem' => 'ubuntu',
|
|
'verbose' => false,
|
|
'update_repos' => true
|
|
}
|
|
if File.exists?(config_file)
|
|
overrides = YAML.load_file(config_file)
|
|
config.merge!(overrides)
|
|
end
|
|
config
|
|
end
|
|
|
|
Vagrant::Config.run do |config|
|
|
|
|
v_config = parse_vagrant_config
|
|
|
|
|
|
ssh_forward_port = 2244
|
|
|
|
[
|
|
{'devstack' =>
|
|
{
|
|
'memory' => 512,
|
|
'ip1' => '172.16.0.2',
|
|
}
|
|
},
|
|
{'openstack_controller' =>
|
|
{'memory' => 2000,
|
|
'ip1' => '172.16.0.3'
|
|
}
|
|
},
|
|
{'compute1' =>
|
|
{
|
|
'memory' => 2512,
|
|
'ip1' => '172.16.0.4'
|
|
}
|
|
},
|
|
# huge compute instance with tons of RAM
|
|
# intended to be used for tempest tests
|
|
{'compute2' =>
|
|
{
|
|
'memory' => 8000,
|
|
'ip1' => '172.16.0.14'
|
|
}
|
|
},
|
|
{'nova_controller' =>
|
|
{
|
|
'memory' => 512,
|
|
'ip1' => '172.16.0.5'
|
|
}
|
|
},
|
|
{'glance' =>
|
|
{
|
|
'memory' => 512,
|
|
'ip1' => '172.16.0.6'
|
|
}
|
|
},
|
|
{'keystone' =>
|
|
{
|
|
'memory' => 512,
|
|
'ip1' => '172.16.0.7'
|
|
}
|
|
},
|
|
{'mysql' =>
|
|
{
|
|
'memory' => 512,
|
|
'ip1' => '172.16.0.8'
|
|
}
|
|
},
|
|
{'cinder' =>
|
|
{
|
|
'memory' => 512,
|
|
'ip1' => '172.16.0.9'
|
|
}
|
|
},
|
|
{ 'quantum_agent' => {
|
|
'memory' => 512,
|
|
'ip1' => '172.16.0.10'
|
|
}
|
|
},
|
|
{ 'swift_proxy' => {
|
|
'memory' => 512,
|
|
'ip1' => '172.16.0.21',
|
|
'run_mode' => :agent
|
|
}
|
|
},
|
|
{ 'swift_storage_1' => {
|
|
'memory' => 512,
|
|
'ip1' => '172.16.0.22',
|
|
'run_mode' => :agent
|
|
}
|
|
},
|
|
{ 'swift_storage_2' => {
|
|
'memory' => 512,
|
|
'ip1' => '172.16.0.23',
|
|
'run_mode' => :agent
|
|
}
|
|
},
|
|
{ 'swift_storage_3' => {
|
|
'memory' => 512,
|
|
'ip1' => '172.16.0.24',
|
|
'run_mode' => :agent
|
|
}
|
|
},
|
|
# keystone instance to build out for testing swift
|
|
{
|
|
'swift_keystone' => {
|
|
'memory' => 512,
|
|
'ip1' => '172.16.0.25',
|
|
'run_mode' => :agent
|
|
}
|
|
},
|
|
{ 'puppetmaster' => {
|
|
'memory' => 512,
|
|
'ip1' => '172.16.0.31',
|
|
# I dont care for the moment if this suppors redhat
|
|
# eventually it should, but I care a lot more about testing
|
|
# openstack on RHEL than the puppetmaster
|
|
'operatingsystem' => 'ubuntu'
|
|
}
|
|
},
|
|
{ 'openstack_all' => { 'memory' => 2512, 'ip1' => '172.16.0.11'} }
|
|
].each do |hash|
|
|
|
|
name = hash.keys.first
|
|
props = hash.values.first
|
|
raise "Malformed vhost hash" if hash.size > 1
|
|
|
|
config.vm.define name.intern do |agent|
|
|
|
|
# let nodes override their OS
|
|
operatingsystem = (props['operatingsystem'] || v_config['operatingsystem']).downcase
|
|
|
|
# default to config file, but let hosts override it
|
|
if operatingsystem and operatingsystem != ''
|
|
if operatingsystem == 'redhat'
|
|
os_name = 'centos'
|
|
agent.vm.box = 'centos'
|
|
agent.vm.box_url = 'https://dl.dropbox.com/u/7225008/Vagrant/CentOS-6.3-x86_64-minimal.box'
|
|
elsif operatingsystem == 'ubuntu'
|
|
os_name = 'precise64'
|
|
agent.vm.box = 'precise64'
|
|
agent.vm.box_url = 'http://files.vagrantup.com/precise64.box'
|
|
else
|
|
raise(Exception, "undefined operatingsystem: #{operatingsystem}")
|
|
end
|
|
end
|
|
|
|
number = props['ip1'].gsub(/\d+\.\d+\.\d+\.(\d+)/, '\1').to_i
|
|
agent.vm.forward_port(22, ssh_forward_port + number)
|
|
# host only network
|
|
agent.vm.network :hostonly, props['ip1'], :adapter => 2
|
|
agent.vm.network :hostonly, props['ip1'].gsub(/(\d+\.\d+)\.\d+\.(\d+)/) {|x| "#{$1}.1.#{$2}" }, :adapter => 3
|
|
agent.vm.network :hostonly, props['ip1'].gsub(/(\d+\.\d+)\.\d+\.(\d+)/) {|x| "#{$1}.2.#{$2}" }, :adapter => 4
|
|
#agent.vm.customize ["modifyvm", :id, "--nicpromisc1", "allow-all"]
|
|
# natted network
|
|
#agent.vm.customize ["modifyvm", :id, "--nic3", "hostonly"]
|
|
#agent.vm.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"]
|
|
|
|
#agent.vm.customize ["modifyvm", :id, "--macaddress2", 'auto']
|
|
#agent.vm.customize ["modifyvm", :id, "--macaddress3", 'auto']
|
|
|
|
agent.vm.customize ["modifyvm", :id, "--memory", props['memory'] || 2048 ]
|
|
agent.vm.boot_mode = 'gui' if v_config['gui_mode'] == 'true'
|
|
agent.vm.customize ["modifyvm", :id, "--name", "#{name}.puppetlabs.lan"]
|
|
agent.vm.host_name = "#{name.gsub('_', '-')}.puppetlabs.lan"
|
|
|
|
if name == 'puppetmaster' || name =~ /^swift/
|
|
node_name = "#{name.gsub('_', '-')}.puppetlabs.lan"
|
|
else
|
|
node_name = "#{name.gsub('_', '-')}-#{Time.now.strftime('%Y%m%d%m%s')}"
|
|
end
|
|
|
|
if os_name =~ /precise/
|
|
agent.vm.provision :shell, :inline => "apt-get update"
|
|
elsif os_name =~ /centos/
|
|
agent.vm.provision :shell, :inline => "yum clean all"
|
|
end
|
|
|
|
puppet_options = ["--certname=#{node_name}"]
|
|
puppet_options.merge!({'--verbose', '--show_diff'}) if v_config['verbose']
|
|
|
|
if v_config['update_repos'] == true
|
|
|
|
agent.vm.provision(:puppet, :pp_path => "/etc/puppet") do |puppet|
|
|
puppet.manifests_path = 'manifests'
|
|
puppet.manifest_file = "setup/#{os_name}.pp"
|
|
puppet.module_path = 'modules'
|
|
puppet.options = puppet_options
|
|
end
|
|
|
|
else
|
|
|
|
agent.vm.provision(:puppet, :pp_path => "/etc/puppet") do |puppet|
|
|
puppet.manifests_path = 'manifests'
|
|
puppet.manifest_file = "setup/hosts.pp"
|
|
puppet.module_path = 'modules'
|
|
puppet.options = puppet_options
|
|
end
|
|
|
|
end
|
|
|
|
# export a data directory that can be used by hiera
|
|
agent.vm.share_folder("hiera_data", '/etc/puppet/hiera_data', './hiera_data/')
|
|
|
|
run_mode = props['run_mode'] || :apply
|
|
|
|
if run_mode == :apply
|
|
|
|
agent.vm.provision(:puppet, :pp_path => "/etc/puppet") do |puppet|
|
|
puppet.manifests_path = 'manifests'
|
|
puppet.manifest_file = 'site.pp'
|
|
puppet.module_path = 'modules'
|
|
puppet.options = puppet_options
|
|
end
|
|
|
|
elsif run_mode == :agent
|
|
|
|
agent.vm.provision(:puppet_server) do |puppet|
|
|
puppet.puppet_server = 'puppetmaster.puppetlabs.lan'
|
|
puppet.options = puppet_options + ['-t', '--pluginsync']
|
|
end
|
|
|
|
else
|
|
puts "Found unexpected run_mode #{run_mode}"
|
|
end
|
|
end
|
|
end
|
|
end
|