From ae35a4fc0d235f39a8036cc9ac6774f932a90f2e Mon Sep 17 00:00:00 2001 From: Dan Bode Date: Tue, 23 Oct 2012 11:49:40 -0700 Subject: [PATCH 1/3] update for essex make environment different than folsom env. update site manifest --- Puppetfile | 15 ++-- Rakefile | 117 +++++++++++++++++++++++++- Vagrantfile | 26 +++--- manifests/hosts.pp | 40 +++------ manifests/site.pp | 200 +++++++++------------------------------------ 5 files changed, 181 insertions(+), 217 deletions(-) diff --git a/Puppetfile b/Puppetfile index 4b51d94..5df6d4f 100644 --- a/Puppetfile +++ b/Puppetfile @@ -1,16 +1,12 @@ forge "http://forge.puppetlabs.com" -mod 'puppetlabs/openstack', :git => 'git://github.com/bodepd/puppetlabs-openstack', :ref => 'folsom' -mod 'puppetlabs/nova', :git => 'git://github.com/bodepd/puppetlabs-nova', :ref => 'folsom' -mod 'puppetlabs/glance', :git => 'git://github.com/bodepd/puppetlabs-glance', :ref => 'folsom' -mod 'puppetlabs/keystone', :git => 'git://github.com/bodepd/puppetlabs-keystone', :ref => 'folsom' -mod 'puppetlabs/horizon', :git => 'git://github.com/bodepd/puppetlabs-horizon', :ref => 'folsom' +mod 'puppetlabs/openstack', :git => 'git://github.com/puppetlabs/puppetlabs-openstack', :ref => 'essex' +mod 'puppetlabs/nova', :git => 'git://github.com/puppetlabs/puppetlabs-nova', :ref => 'essex' +mod 'puppetlabs/glance', :git => 'git://github.com/puppetlabs/puppetlabs-glance', :ref => 'essex' +mod 'puppetlabs/keystone', :git => 'git://github.com/puppetlabs/puppetlabs-keystone', :ref => 'essex' +mod 'puppetlabs/horizon', :git => 'git://github.com/puppetlabs/puppetlabs-horizon', :ref => 'essex' mod 'puppetlabs/swift', :git => 'git://github.com/puppetlabs/puppetlabs-swift' -mod 'bodepd/devstack', :git => 'git://github.com/bodepd/puppetlabs-devstack' -mod 'puppet/cinder', :git => 'git://github.com/bodepd/puppet-cinder' -mod 'puppet/quantum', :git => 'git://github.com/bodepd/openstack-quantum-puppet/', :ref => 'folsom' # openstack middleware -mod 'puppet/vswitch', :git => 'git://github.com/bodepd/puppet-vswitch' mod 'puppetlabs/rabbitmq', :git => 'git://github.com/puppetlabs/puppetlabs-rabbitmq' mod 'puppetlabs/mysql', :git => 'git://github.com/puppetlabs/puppetlabs-mysql' mod 'puppetlabs/git', :git => 'git://github.com/puppetlabs/puppetlabs-git' @@ -26,4 +22,3 @@ mod 'puppetlabs/stdlib', :git => 'git://github.com/puppetlabs/puppetlabs-stdlib' mod 'puppetlabs/apt', :git => 'git://github.com/puppetlabs/puppetlabs-apt' mod 'ripienaar/concat', :git => 'git://github.com/ripienaar/puppet-concat' mod 'duritong/sysctl', :git => 'git://github.com/duritong/puppet-sysctl.git' -mod 'cprice/inifile', :git => 'git://github.com/bodepd/puppetlabs-inifile' diff --git a/Rakefile b/Rakefile index 5f7c02e..139ec13 100644 --- a/Rakefile +++ b/Rakefile @@ -1,8 +1,6 @@ require 'yaml' require 'rubygems' -require 'vagrant' -env = Vagrant::Environment.new(:cwd => File.dirname(__FILE__), :ui_class => Vagrant::UI::Colored) def cmd_system (cmd) result = system cmd @@ -42,6 +40,9 @@ namespace :openstack do end task 'destroy' do + require 'vagrant' + env = Vagrant::Environment.new(:cwd => File.dirname(__FILE__), :ui_class => Vagrant::UI::Colored) + puts "About to destroy all vms..." env.cli('vagrant destroy -f') puts "Destroyed all vms" @@ -49,8 +50,120 @@ namespace :openstack do desc 'deploys the entire environment' task :deploy_two_node do + require 'vagrant' + env = Vagrant::Environment.new(:cwd => File.dirname(__FILE__), :ui_class => Vagrant::UI::Colored) build(:openstack_controller, env) build(:compute1, env) end end + + +remote_name = 'bodepd' + +# returns an array of the stdout lines with leading and trailing whitespace removed +def get_stdout(cmd) + # need to do this smarter... + `#{cmd}`.split("\n").collect {|x| x.strip } +end + +namespace :paven do + + cwd = File.expand_path(File.dirname(__FILE__)) + + desc 'for all repos in the module directory, add a read/write remote' + task :dev_setup do + + each_repo do |repo| + # need to handle more failure cases + remotes = repo.remote_names + if remotes.include?(remote_name) + puts "Did not have to add remote #{remote_name} to #{File.basename(repo.path)}" + elsif ! remotes.include?('origin') + raise(Exception, "The repo #{File.basename(repo.path)} does not have a remote called origin, failing") + else + url = repo.remote_push_url('origin').gsub(/(git|https?):\/\/(.+)\/(.+)?\/(.+)/) do + "git@#{$2}:#{remote_name}/#{$4}" + end + puts "Adding remote #{remote_name} as #{url}" + repo.add_remote(remote_name, url) + end + end + end + + desc 'pull the latest version of all code' + task :pull_all do + each_repo do |repo| + puts "Pulling repo: #{File.basename(repo.path)}" + puts ' ' + repo.pull.join("\n ") + end + end + + desc 'shows the current state of code that has not been commited' + task :status_all do + each_repo do |repo| + status = repo.status + if status.include?('nothing to commit (working directory clean)') + puts "Module #{File.basename(repo.path)} has not changed" if verbose + else + puts "Uncommitted changes for: #{File.basename(repo.path)}" + puts " #{get_stdout('git status').join("\n ")}" + end + end + end + + desc 'make sure that the current version from the module file matches the last tagged version' + task :check_tags do + # I need to be able to return this as a data structure + # when I start to do more complicated things like + # automated releases, I will need this data + each_repo do |repo| + require 'puppet' + modulefile = File.join(repo.path, 'Modulefile') + if File.exists?(modulefile) + print File.basename(repo.path) + metadata = ::Puppet::ModuleTool::Metadata.new + ::Puppet::ModuleTool::ModulefileReader.evaluate(metadata, modulefile) + print ':' + metadata.version + branch_output = get_stdout('git branch') + if branch_output.first =~ /\* (.+)/ + puts ":#{$1}" + git_cmd = %W(log #{metadata.version}..HEAD --oneline) + puts ' ' + repo.git_cmd(git_cmd).join("\n ") + else + puts ' ' + branch_output.join("\n ") + end + else + puts "#{File.basename(repo.path)} does not have a Modulefile" + end + end + end + + task :check_sha do + each_repo do |repo| + print File.basename(repo.path) + ':' + puts repo.current_commit_hash + end + end + + +end + +def each_repo(&block) + require 'librarian/puppet' + require 'librarian/puppet/source/git' + # create a manifest + # TODO replace this to use librarian puppet + env = Librarian::Puppet::Environment.new() + # this is the lock file, so it assumes that install has been run + env.lock.manifests.each do |manifest| + # I only care about git sources + if manifest.source.is_a? Librarian::Puppet::Source::Git + module_name = manifest.name.split('/', 2)[1] + module_path = File.join(env.install_path,module_name) + yield Librarian::Source::Git::Repository.new(env, module_path) + else + puts "Found a non-git manifest: #{manifest.class}, ignoring" + end + end +end diff --git a/Vagrantfile b/Vagrantfile index 33aee3f..51f68b0 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -9,65 +9,65 @@ Vagrant::Config.run do |config| gui_mode = true end - ssh_forward_port = 2244 + ssh_forward_port = 2444 [ {'devstack' => { 'memory' => 512, - 'ip1' => '172.16.0.2', + 'ip1' => '172.16.5.2', } }, {'openstack_controller' => {'memory' => 2000, - 'ip1' => '172.16.0.3' + 'ip1' => '172.16.5.3' } }, {'compute1' => { 'memory' => 2512, - 'ip1' => '172.16.0.4' + 'ip1' => '172.16.5.4' } }, {'nova_controller' => { 'memory' => 512, - 'ip1' => '172.16.0.5' + 'ip1' => '172.16.5.5' } }, {'glance' => { 'memory' => 512, - 'ip1' => '172.16.0.6' + 'ip1' => '172.16.5.6' } }, {'keystone' => { 'memory' => 512, - 'ip1' => '172.16.0.7' + 'ip1' => '172.16.5.7' } }, {'mysql' => { 'memory' => 512, - 'ip1' => '172.16.0.8' + 'ip1' => '172.16.5.8' } }, {'cinder' => { 'memory' => 512, - 'ip1' => '172.16.0.9' + 'ip1' => '172.16.5.9' } }, { 'quantum_agent' => { 'memory' => 512, - 'ip1' => '172.16.0.10' + 'ip1' => '172.16.5.10' } #{'compute_1' => - # {'ip1' => '172.16.0.4'} + # {'ip1' => '172.16.5.4'} #}, #{'compute_2' => - # {'ip1' => '172.16.0.5'} + # {'ip1' => '172.16.5.5'} } ].each do |hash| @@ -77,7 +77,7 @@ Vagrant::Config.run do |config| raise "Malformed vhost hash" if hash.size > 1 - config.vm.define name.intern do |agent| + config.vm.define "#{name}-essex".intern do |agent| ssh_forward_port = ssh_forward_port + 1 agent.vm.forward_port(22, ssh_forward_port) # host only network diff --git a/manifests/hosts.pp b/manifests/hosts.pp index 58f8afd..bf36db0 100644 --- a/manifests/hosts.pp +++ b/manifests/hosts.pp @@ -1,46 +1,26 @@ -# -# This puppet manifest is already applied first to do some environment specific things -# - -apt::source { 'openstack_folsom': - location => "http://ubuntu-cloud.archive.canonical.com/ubuntu", - release => "precise-updates/folsom", - repos => "main", - required_packages => 'ubuntu-cloud-keyring', -} - # # configure apt to use my squid proxy # I highly recommend that anyone doing development on # OpenStack set up a proxy to cache packages. # class { 'apt': - proxy_host => '172.16.0.1', + proxy_host => '172.16.5.1', proxy_port => '3128', } -# an apt-get update is usally required to ensure that -# we get the latest version of the openstack packages -exec { '/usr/bin/apt-get update': - require => Class['apt'], - refreshonly => true, - subscribe => [Class['apt'], Apt::Source["openstack_folsom"]], - logoutput => true, -} - # # specify a connection to the hardcoded puppet master # host { - 'puppet': ip => '172.16.0.2'; - 'openstackcontroller': ip => '172.16.0.3'; - 'compute1': ip => '172.16.0.4'; - 'novacontroller': ip => '172.16.0.5'; - 'glance': ip => '172.16.0.6'; - 'keystone': ip => '172.16.0.7'; - 'mysql': ip => '172.16.0.8'; - 'cinderclient': ip => '172.16.0.9'; - 'quantumagent': ip => '172.16.0.10'; + 'puppet': ip => '172.16.5.2'; + 'openstackcontroller': ip => '172.16.5.3'; + 'compute1': ip => '172.16.5.4'; + 'novacontroller': ip => '172.16.5.5'; + 'glance': ip => '172.16.5.6'; + 'keystone': ip => '172.16.5.7'; + 'mysql': ip => '172.16.5.8'; + 'cinderclient': ip => '172.16.5.9'; + 'quantumagent': ip => '172.16.5.10'; } group { 'puppet': diff --git a/manifests/site.pp b/manifests/site.pp index 24e44ef..e017433 100644 --- a/manifests/site.pp +++ b/manifests/site.pp @@ -15,8 +15,6 @@ $keystone_db_password = 'keystone_db_password' $glance_db_password = 'glance_db_password' $nova_db_password = 'nova_db_password' -$cinder_db_password = 'cinder_db_password' -$quantum_db_password = 'quantum_db_password' $allowed_hosts = ['keystone', 'glance', 'novacontroller', 'compute1', '%'] @@ -26,8 +24,6 @@ $admin_password = 'ChangeMe' $glance_user_password = 'glance_user_password' $nova_user_password = 'nova_user_password' -$cinder_user_password = 'cinder_user_password' -$quantum_user_password = 'quantum_user_password' $verbose = 'True' @@ -44,12 +40,12 @@ #### end shared variables ################# #### controller/compute mode settings #### -$mysql_host = '172.16.0.8' -$keystone_host = '172.16.0.7' -$glance_host = '172.16.0.6' -$nova_host = '172.16.0.5' +$mysql_host = '172.16.5.8' +$keystone_host = '172.16.5.7' +$glance_host = '172.16.5.6' +$nova_host = '172.16.5.5' #### controller/compute mode settings #### -$openstack_controller = '172.16.0.3' +$openstack_controller = '172.16.5.3' #### controller/compute mode settings #### node /mysql/ { @@ -59,8 +55,6 @@ keystone_db_password => $keystone_db_password, glance_db_password => $glance_db_password, nova_db_password => $nova_db_password, - cinder_db_password => $cinder_db_password, - quantum_db_password => $quantum_db_password, allowed_hosts => $allowed_hosts, } @@ -68,12 +62,6 @@ node /keystone/ { - # TODO keystone logging seems to be totally broken in folsom - # this can be removed once it starts working - keystone_config { - 'DEFAULT/log_config': ensure => absent, - } - class { 'openstack::keystone': db_host => $mysql_host, db_password => $keystone_db_password, @@ -82,8 +70,6 @@ admin_password => $admin_password, glance_user_password => $glance_user_password, nova_user_password => $nova_user_password, - cinder_user_password => $cinder_user_password, - quantum_user_password => $quantum_user_password, public_address => $keystone_host, glance_public_address => $glance_host, nova_public_address => $nova_host, @@ -117,10 +103,9 @@ # class { 'nova::volume': enabled => true } # class { 'nova::volume::iscsi': } - include apache - class { 'openstack::controller': #floating_range => $floating_network_range, + internal_address => $openstack_controller, # Required Network public_address => $openstack_controller, public_interface => $public_interface, @@ -138,109 +123,50 @@ # Required Nov a nova_db_password => $nova_db_password, nova_user_password => $nova_user_password, - # cinder - cinder_db_password => $cinder_db_password, - cinder_user_password => $cinder_user_password, - # quantum - quantum_db_password => $quantum_db_password, - quantum_user_password => $quantum_user_password, # Required Horizon secret_key => $secret_key, # need to sort out networking... network_manager => 'nova.network.manager.FlatDHCPManager', fixed_range => '10.0.0.0/24', - floating_range => '172.16.0.64/25', + floating_range => '172.16.5.64/25', create_networks => true, multi_host => true, - db_host => '127.0.0.1', - db_type => 'mysql', - mysql_account_security => true, + # not supported for essex + #db_host => '127.0.0.1', + #db_type => 'mysql', + #mysql_account_security => true, + # # TODO - this should not allow all - allowed_hosts => '%', + # allowed in folsom + #allowed_hosts => '%', # Keystone # Glance - glance_api_servers => '127.0.0.1:9292', + # folsome release only param + #glance_api_servers => '127.0.0.1:9292', rabbit_password => $rabbit_password, rabbit_user => $rabbit_user, # Horizon cache_server_ip => '127.0.0.1', cache_server_port => '11211', swift => false, - quantum => true, + quantum => false, horizon_app_links => undef, # Genera verbose => $verbose, - purge_nova_config => false, + # not supported in essex branch + # purge_nova_config => false, export_resources => false, } -# # set up a quantum server - class { 'quantum': - rabbit_user => $rabbit_user, - rabbit_password => $rabbit_password, - sql_connection => "mysql://quantum:${quantum_db_password}@localhost/quantum?charset=utf8", - } - - class { 'quantum::server': - keystone_password => $quantum_user_password, - } - - class { 'quantum::plugins::ovs': - sql_connection => "mysql://quantum:${quantum_db_password}@localhost/quantum?charset=utf8", - tenant_network_type => 'gre', - # I need to know what this does... - local_ip => '10.0.0.1', - } - - class { 'nova::network::quantum': - #$fixed_range, - quantum_admin_password => $quantum_user_password, - #$use_dhcp = 'True', - #$public_interface = undef, - quantum_connection_host => 'localhost', - quantum_auth_strategy => 'keystone', - quantum_url => "http://${openstack_controller}:9696", - quantum_admin_tenant_name => 'services', - #quantum_admin_username => 'quantum', - quantum_admin_auth_url => "http://${openstack_controller}:35357/v2.0", - } - - package { 'python-cliff': - ensure => present, - } - class { 'openstack::auth_file': admin_password => $admin_password, keystone_admin_token => $admin_token, controller_node => '127.0.0.1', } - keystone_config { - 'DEFAULT/log_config': ensure => absent, - } -} - -node /cinder/ { - - - class { 'cinder': - rabbit_password => $rabbit_password, - # TODO what about the rabbit user? - rabbit_host => $openstack_controller, - sql_connection => "mysql://cinder:${cinder_db_password}@${openstack_controller}/cinder?charset=utf8", - verbose => $verbose, - } - - class { 'cinder::volume': } - - class { 'cinder::volume::iscsi': } - } - - - node /nova-controller/ { # deploy a script that can be used to test nova @@ -250,18 +176,18 @@ # class { 'nova::volume::iscsi': } class { 'openstack::nova::controller': - public_address => '172.16.0.5', + public_address => '172.16.5.5', public_interface => $public_interface, private_interface => $private_interface, - db_host => '172.16.0.8', + db_host => '172.16.5.8', rabbit_password => $rabbit_password, nova_user_password => $nova_user_password, nova_db_password => $nova_db_password, network_manager => 'nova.network.manager.FlatDHCPManager', verbose => $verbose, multi_host => true, - glance_api_servers => '172.16.0.6:9292', - keystone_host => '172.16.0.7', + glance_api_servers => '172.16.5.6:9292', + keystone_host => '172.16.5.7', #floating_range => $floating_network_range, #fixed_range => $fixed_network_range, } @@ -273,14 +199,14 @@ swift => false, quantum => false, horizon_app_links => undef, - keystone_host => '172.16.0.7', + keystone_host => '172.16.5.7', keystone_default_role => 'Member', } class { 'openstack::auth_file': admin_password => $admin_password, keystone_admin_token => $admin_token, - controller_node => '172.16.0.7', + controller_node => '172.16.5.7', } } @@ -288,16 +214,16 @@ node /compute/ { # TODO not sure why this is required - Package['libvirt'] -> - file_line { 'quemu_hack': - line => 'cgroup_device_acl = [ - "/dev/null", "/dev/full", "/dev/zero", - "/dev/random", "/dev/urandom", - "/dev/ptmx", "/dev/kvm", "/dev/kqemu", - "/dev/rtc", "/dev/hpet", "/dev/net/tun",]', - path => '/etc/libvirt/qemu.conf', - ensure => present, - } ~> Service['libvirt'] + #Package['libvirt'] -> + #file_line { 'quemu_hack': + # line => 'cgroup_device_acl = [ + # "/dev/null", "/dev/full", "/dev/zero", + # "/dev/random", "/dev/urandom", + # "/dev/ptmx", "/dev/kvm", "/dev/kqemu", + # "/dev/rtc", "/dev/hpet", "/dev/net/tun",]', + # path => '/etc/libvirt/qemu.conf', + # ensure => present, + #} ~> Service['libvirt'] # deploy a script that can be used to test nova class { 'openstack::test_file': } @@ -309,10 +235,12 @@ # $glance_api_addr = unique(query_nodes('Class[glance::api]', 'ipaddress_eth1')) class { 'openstack::compute': + private_interface => $private_interface, + public_interface => $public_interface, internal_address => $::ipaddress_eth1, libvirt_type => $libvirt_type, sql_connection => "mysql://nova:${nova_db_password}@${openstack_controller}/nova", - #multi_host => true, + multi_host => true, nova_user_password => $nova_user_password, rabbit_host => $openstack_controller, rabbit_password => $rabbit_password, @@ -322,58 +250,6 @@ verbose => $verbose, } - class { 'openstack::cinder': - sql_connection => "mysql://cinder:${cinder_db_password}@${openstack_controller}/cinder", - rabbit_host => $openstack_controller, - # TODO where is rabbit host? - rabbit_password => $rabbit_password, - volume_group => 'precise64', - } - - # manual steps - # apt-get update - # apt-get upgrade - # apt-get -y install linux-headers-3.2.0-23-generic - # apt-get -y install quantum-plugin-openvswitch-agent - # apt-get -y install openvswitch-datapath-dkms-source - # module-assistant auto-install openvswitch-datapath - # service openvswitch-switch restart - - class { 'quantum': - verbose => $verbose, - debug => $verbose, - rabbit_host => $openstack_controller, - rabbit_user => $rabbit_user, - rabbit_password => $rabbit_password, - sql_connection => "mysql://quantum:${quantum_db_password}@${openstack_controller}/quantum?charset=utf8", - } - - class { 'quantum::agents::ovs': - bridge_uplinks => ['br-virtual:eth2'], - } - - class { 'quantum::agents::dhcp': } - - class { 'nova::compute::quantum': } - - class { 'nova::network::quantum': - #$fixed_range, - quantum_admin_password => $quantum_user_password, - #$use_dhcp = 'True', - #$public_interface = undef, - quantum_connection_host => $openstack_controller, - #quantum_auth_strategy => 'keystone', - quantum_url => "http://${openstack_controller}:9696", - quantum_admin_tenant_name => 'services', - #quantum_admin_username => 'quantum', - quantum_admin_auth_url => "http://${openstack_controller}:35357/v2.0" - } - - nova_config { - 'linuxnet_interface_driver': value => 'nova.network.linux_net.LinuxOVSInterfaceDriver'; - 'linuxnet_ovs_integration_bridge': value => 'br-int'; - } - } node /devstack/ { From 54ecf481407e9da03206dd5fb96147250e27b07e Mon Sep 17 00:00:00 2001 From: Dan Bode Date: Tue, 23 Oct 2012 13:59:05 -0700 Subject: [PATCH 2/3] shorten vm name It was too long for vagrant to render properly. This also changes the - in the name to _ (I hate dashes) --- Rakefile | 4 ++-- Vagrantfile | 4 ++-- manifests/site.pp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Rakefile b/Rakefile index 139ec13..b523c5f 100644 --- a/Rakefile +++ b/Rakefile @@ -52,8 +52,8 @@ namespace :openstack do task :deploy_two_node do require 'vagrant' env = Vagrant::Environment.new(:cwd => File.dirname(__FILE__), :ui_class => Vagrant::UI::Colored) - build(:openstack_controller, env) - build(:compute1, env) + build(:controller_essex, env) + build(:compute1_essex, env) end end diff --git a/Vagrantfile b/Vagrantfile index 51f68b0..6f4e2ae 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -18,7 +18,7 @@ Vagrant::Config.run do |config| 'ip1' => '172.16.5.2', } }, - {'openstack_controller' => + {'controller' => {'memory' => 2000, 'ip1' => '172.16.5.3' } @@ -77,7 +77,7 @@ Vagrant::Config.run do |config| raise "Malformed vhost hash" if hash.size > 1 - config.vm.define "#{name}-essex".intern do |agent| + config.vm.define "#{name}_essex".intern do |agent| ssh_forward_port = ssh_forward_port + 1 agent.vm.forward_port(22, ssh_forward_port) # host only network diff --git a/manifests/site.pp b/manifests/site.pp index e017433..42ec5d9 100644 --- a/manifests/site.pp +++ b/manifests/site.pp @@ -95,7 +95,7 @@ } } -node /openstack-controller/ { +node /controller/ { # deploy a script that can be used to test nova class { 'openstack::test_file': } From 8bfb2d4f063c442fd35c3fabf5f2be226f8a6d66 Mon Sep 17 00:00:00 2001 From: Dan Bode Date: Tue, 23 Oct 2012 13:59:23 -0700 Subject: [PATCH 3/3] Change floating ip cidr The old value conflicting with the vm network. --- manifests/site.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/site.pp b/manifests/site.pp index 42ec5d9..40c1194 100644 --- a/manifests/site.pp +++ b/manifests/site.pp @@ -129,7 +129,7 @@ # need to sort out networking... network_manager => 'nova.network.manager.FlatDHCPManager', fixed_range => '10.0.0.0/24', - floating_range => '172.16.5.64/25', + floating_range => '172.16.5.192/26', create_networks => true, multi_host => true, # not supported for essex