I know is not the most optimized Vagrantfile written out there but, I’m going to post only the Vagrantfile for the moment and soon I will upload also the files used to create the databases and broker config:
# -*- mode: ruby -*- # vi: set ft=ruby : # Every Vagrant development environment requires a box. You can search for # boxes at https://atlas.hashicorp.com/search. var_BOX_IMAGE = "oraclebase/oracle-8" var_mem_size = 4096 var_cpus = 2 var_non_rotational = 'on' var_u01_disk_node1 = "ol8_19_dg1_u01.vdi" var_u01_disk_node2 = "ol8_19_dg2_u01.vdi" var_u01_disk_node3 = "ol8_19_dg3_u01.vdi" # Try to make it work on both Windows and Linux if (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil vboxmanage_path = "C:\\Program Files\\Oracle\\VirtualBox\\VBoxManage.exe" else vboxmanage_path = "VBoxManage" # Assume it's in the path on Linux end Vagrant.configure("2") do |config| config.vm.define "node1" do |subconfig| subconfig.vm.box = var_BOX_IMAGE subconfig.vm.network "forwarded_port", guest: 1521, host: 1521 subconfig.vm.network "forwarded_port", guest: 5500, host: 5500 subconfig.vm.network "private_network", ip: "192.168.56.101" subconfig.vm.synced_folder "config", "/vagrant_config" subconfig.vm.synced_folder "shared_scripts", "/vagrant_scripts" subconfig.vm.synced_folder "software", "/vagrant_software" if Vagrant.has_plugin?("vagrant-vbguest") then subconfig.vbguest.auto_update = false end subconfig.vm.provider "virtualbox" do |vb| vb.memory = var_mem_size vb.cpus = var_cpus vb.name = "ol8_19_dg1" # Get disk path line = `"#{vboxmanage_path}" list systemproperties`.split(/\n/).grep(/Default machine folder/).first vb_machine_folder = line.split(':', 2)[1].strip() second_disk = File.join(vb_machine_folder, vb.name, var_u01_disk_node1) vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', '0', '--nonrotational', var_non_rotational] vb.customize ["storagectl", :id,"--name", "SATA Controller","--hostiocache", "on"] unless File.exist?(var_u01_disk_node1) vb.customize ['createhd', '--filename', second_disk, '--size', 100 * 1024] end vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', second_disk, '--nonrotational', var_non_rotational] end subconfig.vm.provision "shell", inline: <<-SHELL sh /vagrant/node1/setup.sh SHELL end config.vm.define "node2" do |subconfig| subconfig.vm.box = var_BOX_IMAGE subconfig.vm.network "forwarded_port", guest: 1521, host: 1522 subconfig.vm.network "forwarded_port", guest: 5500, host: 5502 subconfig.vm.network "private_network", ip: "192.168.56.102" subconfig.vm.synced_folder "config", "/vagrant_config" subconfig.vm.synced_folder "shared_scripts", "/vagrant_scripts" subconfig.vm.synced_folder "software", "/vagrant_software" if Vagrant.has_plugin?("vagrant-vbguest") then subconfig.vbguest.auto_update = false end subconfig.vm.provider "virtualbox" do |vb| vb.memory = var_mem_size vb.cpus = var_cpus vb.name = "ol8_19_dg2" # Get disk path line = `"#{vboxmanage_path}" list systemproperties`.split(/\n/).grep(/Default machine folder/).first vb_machine_folder = line.split(':', 2)[1].strip() second_disk = File.join(vb_machine_folder, vb.name, var_u01_disk_node2) vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', '0', '--nonrotational', var_non_rotational] vb.customize ["storagectl", :id,"--name", "SATA Controller","--hostiocache", "on"] unless File.exist?(var_u01_disk_node2) vb.customize ['createhd', '--filename', second_disk, '--size', 100 * 1024] end vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', second_disk, '--nonrotational', var_non_rotational] end subconfig.vm.provision "shell", inline: <<-SHELL sh /vagrant/node2/setup.sh SHELL end config.vm.define "node3" do |subconfig| subconfig.vm.box = var_BOX_IMAGE subconfig.vm.network "forwarded_port", guest: 1521, host: 1523 subconfig.vm.network "forwarded_port", guest: 5500, host: 5503 subconfig.vm.network "private_network", ip: "192.168.56.103" subconfig.vm.synced_folder "config", "/vagrant_config" subconfig.vm.synced_folder "shared_scripts", "/vagrant_scripts" subconfig.vm.synced_folder "software", "/vagrant_software" if Vagrant.has_plugin?("vagrant-vbguest") then subconfig.vbguest.auto_update = false end subconfig.vm.provider "virtualbox" do |vb| vb.memory = var_mem_size vb.cpus = var_cpus vb.name = "ol8_19_dg3" # Get disk path line = `"#{vboxmanage_path}" list systemproperties`.split(/\n/).grep(/Default machine folder/).first vb_machine_folder = line.split(':', 2)[1].strip() second_disk = File.join(vb_machine_folder, vb.name, var_u01_disk_node3) vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', '0', '--nonrotational', var_non_rotational] vb.customize ["storagectl", :id,"--name", "SATA Controller","--hostiocache", "on"] unless File.exist?(var_u01_disk_node3) vb.customize ['createhd', '--filename', second_disk, '--size', 100 * 1024] end vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', second_disk, '--nonrotational', var_non_rotational] end subconfig.vm.provision "shell", inline: <<-SHELL sh /vagrant/node3/setup.sh SHELL end end
And the result would be something like this:
PS D:\vagrant\oracle_dg> vagrant global-status id name provider state directory ----------------------------------------------------------------------- 16870cd node1 virtualbox running D:/vagrant/oracle_dg 897179b node2 virtualbox running D:/vagrant/oracle_dg 79eeb5c node3 virtualbox running D:/vagrant/oracle_dg
Pingback: Oracle 19c – RMAN recover from service feature at work – Another Oracle blog