X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=Vagrantfile;h=8ab75edeede568e2460268144f360deff34b7237;hb=8fcb874a6e5ec52b4a6ac80cb7f34c7baccd8c17;hp=aa6d2d12b4ac996971a867731fe43bb593c9773c;hpb=d637d7a8c792223a0645bd36f474d46136369249;p=icn.git diff --git a/Vagrantfile b/Vagrantfile index aa6d2d1..8ab75ed 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -1,5 +1,8 @@ # -*- mode: ruby -*- # vi: set ft=ruby : +require 'ipaddr' +require 'uri' +require 'yaml' # IMPORTANT To bring up the machines, use the "--no-parallel" option # to vagrant up. This is to workaround dependencies between the jump @@ -7,11 +10,29 @@ # machines will fail to come up until the baremetal network (created # by vagrant from the jump machine definition) is up. -vars = { - :site => 'vm', - :baremetal_cidr => '192.168.151.0/24', - :num_machines => 2 -} +site = ENV['ICN_SITE'] || 'vm' + +# Calculate the baremetal network address from the bmcAddress (aka +# IPMI address) specified in the machine pool values. IPMI in the +# virtual environment is emulated by virtualbmc listening on the host. +baremetal_cidr = nil +registry_mirrors = nil +Dir.glob("deploy/site/#{site}/*.yaml") do |file| + YAML.load_stream(File.read(file)) do |document| + values = document.fetch('spec', {}).fetch('values', {}) + unless values['bmcAddress'].nil? + bmc_host = URI.parse(values['bmcAddress']).host + baremetal_cidr = "#{IPAddr.new(bmc_host).mask(24)}/24" + end + unless values['dockerRegistryMirrors'].nil? + registry_mirrors = values['dockerRegistryMirrors'].join(' ') + end + end +end +if baremetal_cidr.nil? + puts "Missing bmcAddress value in site definition, can't determine baremetal network address" + exit 1 +end $post_up_message = < "#{vars[:site]}-provisioning", + :libvirt__network_name => "#{site}-provisioning", :type => 'dhcp' # IPMI control of machines is provided by vbmc on the host @@ -86,7 +107,7 @@ Vagrant.configure("2") do |config| m.trigger.after [:up] do |trigger| trigger.name = 'Creating ICN user_config.sh' - trigger.run = {inline: "./tools/vagrant/create_user_config.sh"} + trigger.run = {inline: "bash -c 'DOCKER_REGISTRY_MIRRORS=\"#{registry_mirrors}\" ./tools/vagrant/create_user_config.sh'"} end m.vm.provision 'Configuring ICN prerequisites', type: 'shell', privileged: true, inline: <<-SHELL ssh-keygen -f "${HOME}/.ssh/id_rsa" -P "" << 50, :type => 'raw', :cache => 'none' - # Management attach is false so that vagrant will not interfere - # with these machines: the jump server will manage them - # completely - libvirt.mgmt_attach = false - end - # The provisioning network must be listed first for PXE boot to - # the metal3/ironic provided image - m.vm.network :private_network, - :libvirt__network_name => "#{vars[:site]}-provisioning", - :type => 'dhcp' - m.vm.network :private_network, - :libvirt__network_name => "#{vars[:site]}-baremetal", - :type => 'dhcp' - - # IPMI control - m.trigger.after [:up] do |trigger| - trigger.name = 'Adding machine to IPMI network' - trigger.run = {inline: "./tools/vagrant/add_machine_to_vbmc.sh #{i} #{vars[:site]} machine-#{i}"} - end - m.trigger.after [:destroy] do |trigger| - trigger.name = 'Removing machine from IPMI network' - trigger.run = {inline: "./tools/vagrant/remove_machine_from_vbmc.sh #{i} #{vars[:site]} machine-#{i}"} - end + # Look for any HelmReleases in the site directory with machineName in + # the values dictionary. This will provide the values needed to + # create the machine pool. + legacy_machine_args = "" + Dir.glob("deploy/site/#{site}/*.yaml") do |file| + YAML.load_stream(File.read(file)) do |document| + values = document.fetch('spec', {}).fetch('values', {}) + next if values['machineName'].nil? || values['bootMACAddress'].nil? + machine_name = values['machineName'] + boot_mac_address = values['bootMACAddress'] + bmc_port = URI.parse(values['bmcAddress']).port + config.vm.define machine_name do |m| + m.vm.hostname = machine_name + m.vm.provider :libvirt do |libvirt| + libvirt.graphics_ip = '0.0.0.0' + libvirt.default_prefix = "#{site}-" + libvirt.cpu_mode = 'host-passthrough' + libvirt.cpus = 8 + libvirt.memory = 16384 + libvirt.nested = true + # The image will be provisioned by ICN so just create an empty + # disk for the machine + libvirt.storage :file, :size => 50, :type => 'raw', :cache => 'none' + # Management attach is false so that vagrant will not interfere + # with these machines: the jump server will manage them + # completely + libvirt.mgmt_attach = false + end + # The provisioning network must be listed first for PXE boot to + # the metal3/ironic provided image + m.vm.network :private_network, + :libvirt__network_name => "#{site}-provisioning", + :mac => boot_mac_address, + :type => 'dhcp' + m.vm.network :private_network, + :libvirt__network_name => "#{site}-baremetal", + :type => 'dhcp' - # Create configuration for ICN provisioning - m.trigger.after [:up] do |trigger| - if i == vars[:num_machines] then + # IPMI control + m.trigger.after [:up] do |trigger| + trigger.name = 'Adding machine to IPMI network' + trigger.run = {inline: "./tools/vagrant/add_machine_to_vbmc.sh #{site} #{machine_name} #{bmc_port}"} + end + m.trigger.after [:destroy] do |trigger| + trigger.name = 'Removing machine from IPMI network' + trigger.run = {inline: "./tools/vagrant/remove_machine_from_vbmc.sh #{site} #{machine_name} #{bmc_port}"} + end + + # Create configuration for ICN provisioning + legacy_machine_args = "#{legacy_machine_args} #{machine_name} #{bmc_port}" + m.trigger.after [:up] do |trigger| trigger.info = 'Creating nodes.json.sample describing the machines' - trigger.run = {inline: "./tools/vagrant/create_nodes_json_sample.sh #{vars[:num_machines]} #{vars[:site]} machine-"} + trigger.run = {inline: "./tools/vagrant/create_nodes_json_sample.sh #{site} #{legacy_machine_args}"} end - end - m.trigger.after [:up] do |trigger| - if i == vars[:num_machines] then + m.trigger.after [:up] do |trigger| trigger.info = 'Creating Provisioning resource describing the cluster' - trigger.run = {inline: "./tools/vagrant/create_provisioning_cr.sh #{vars[:num_machines]} #{vars[:site]} machine-"} + trigger.run = {inline: "./tools/vagrant/create_provisioning_cr.sh #{site} #{legacy_machine_args}"} end end end