1
1
# -*- mode: ruby -*-
2
2
# vi: set ft=ruby :
3
3
4
- ENV [ 'VAGRANT_DEFAULT_PROVIDER' ] = 'libvirt'
4
+ ENV [ 'VAGRANT_DEFAULT_PROVIDER' ] || = 'libvirt'
5
5
6
- # Allow for passing test versions with env vars
7
- if ENV [ 'QA_VAGRANT_VERSION' ] . nil? || ENV [ 'QA_VAGRANT_VERSION' ] == "latest"
8
- # If not specified, fetch the latest version using built-in 'version' plugin
9
- #
10
- # NOTE: we 'cd /tmp' to avoid invoking Vagrant against this very Vagrantfile but
11
- # that may not always work. There is probably a better way by leveraging
12
- # VagrantPlugins::CommandVersion::Command and using 'version-latest'
13
- #
14
- latest = `cd /tmp; vagrant version | grep Latest | awk '{ print $3 }'`
15
- QA_VAGRANT_VERSION = latest . strip
16
- else
17
- QA_VAGRANT_VERSION = ENV [ 'QA_VAGRANT_VERSION' ]
18
- end
19
-
20
- if ENV [ 'QA_VAGRANT_LIBVIRT_VERSION' ] . nil?
21
- # If not specified, we just install latest published version
22
- QA_VAGRANT_LIBVIRT_INSTALL_OPTS = "vagrant-libvirt"
23
- QA_VAGRANT_LIBVIRT_VERSION = "latest"
24
- elsif ENV [ 'QA_VAGRANT_LIBVIRT_VERSION' ] == "master"
25
- QA_VAGRANT_LIBVIRT_INSTALL_OPTS = "../vagrant-libvirt/vagrant-libvirt-*.gem"
26
- QA_VAGRANT_LIBVIRT_VERSION = "master"
27
- else
28
- QA_VAGRANT_LIBVIRT_VERSION = ENV [ 'QA_VAGRANT_LIBVIRT_VERSION' ]
29
- QA_VAGRANT_LIBVIRT_INSTALL_OPTS = "vagrant-libvirt --plugin-version #{ QA_VAGRANT_LIBVIRT_VERSION } "
30
- end
31
-
32
- APT_ENV_VARS = {
33
- 'DEBIAN_FRONTEND' : 'noninteractive' ,
34
- 'DEBCONF_NONINTERACTIVE_SEEN' : true ,
35
- }
36
-
37
- def setup_vm_provider ( vm )
38
- vm . provider :libvirt do |domain |
39
- domain . driver = 'kvm'
40
- domain . memory = 2048
41
- domain . cpus = 2
42
- domain . nested = true
43
- domain . cpu_mode = 'host-passthrough'
44
- end
45
- end
6
+ require_relative './boxes.rb'
46
7
47
8
def add_test_provisions ( vm )
48
9
# Workarond for Vagrant bug
@@ -56,9 +17,9 @@ def add_test_provisions(vm)
56
17
end
57
18
# Testing nested VM provisioning via nested kvm
58
19
vm . provision :file , :source => './Vagrantfile.test' , :destination => '~/Vagrantfile'
59
- vm . provision :shell , :privileged => false , :inline => <<-EOC
20
+ vm . provision :shell , :privileged => false , :env => { 'VAGRANT_LOG' : 'debug' } , : inline => <<-EOC
60
21
set -e
61
- vagrant destroy -f 2>/dev/null 1>/dev/null
22
+ vagrant destroy -f
62
23
vagrant up --provider=libvirt
63
24
vagrant halt
64
25
vagrant destroy -f
67
28
68
29
Vagrant . configure ( 2 ) do |config |
69
30
70
- config . vm . define "ubuntu-18.04" do |v |
71
- v . vm . hostname = "ubuntu-18.04"
72
- v . vm . box = "generic/ubuntu1804"
73
- v . vm . synced_folder "." , "/vagrant" , disabled : true
74
- setup_vm_provider ( v . vm )
75
- v . vm . provision :shell , :inline => 'ln -sf ../run/systemd/resolve/resolv.conf /etc/resolv.conf'
76
- v . vm . provision :shell , :privileged => false , :path => './scripts/install.bash' , :args => QA_VAGRANT_VERSION
77
- v . vm . provision :shell , :reset => true , :inline => 'usermod -a -G libvirt vagrant'
78
- add_test_provisions ( v . vm )
79
- end
80
-
81
- config . vm . define "ubuntu-20.04" do |v |
82
- v . vm . hostname = "ubuntu-20.04"
83
- v . vm . box = "generic/ubuntu2004"
84
- v . vm . synced_folder "." , "/vagrant" , disabled : true
85
- setup_vm_provider ( v . vm )
86
- v . vm . provision :shell , :inline => 'ln -sf ../run/systemd/resolve/resolv.conf /etc/resolv.conf'
87
- v . vm . provision :shell , :privileged => false , :path => './scripts/install.bash' , :args => QA_VAGRANT_VERSION
88
- v . vm . provision :shell , :reset => true , :inline => 'usermod -a -G libvirt vagrant'
89
- add_test_provisions ( v . vm )
90
- end
31
+ BOXES . each_pair do |name , settings |
32
+ config . vm . define name do |machine |
33
+ machine . vm . hostname = name
91
34
92
- config . vm . define "debian-10" do |v |
93
- v . vm . hostname = "debian-10"
94
- v . vm . box = "generic/debian10"
95
- v . vm . synced_folder "." , "/vagrant" , disabled : true
96
- setup_vm_provider ( v . vm )
97
- v . vm . provision :shell , :inline => 'sed -i -e "/^dns-nameserver/g" /etc/network/interfaces' , :reboot => true
98
- # restarting dnsmasq can require a retry after everything else to come up correctly.
99
- v . vm . provision :shell , :inline => 'apt update && apt install -y dnsmasq && systemctl restart dnsmasq' , :env => APT_ENV_VARS
100
- v . vm . provision :shell , :privileged => false , :path => './scripts/install.bash' , :args => QA_VAGRANT_VERSION
101
- v . vm . provision :shell , :reset => true , :inline => 'usermod -a -G libvirt vagrant'
102
- add_test_provisions ( v . vm )
103
- end
35
+ machine . vm . provider :docker do |docker , override |
36
+ docker . build_dir = "docker/#{ name } "
37
+ docker . build_args = "--pull"
38
+ docker . has_ssh = true
39
+ docker . volumes = [
40
+ # allow libvirt in the container to trigger loading modules such as ip6tables
41
+ "/lib/modules:/lib/modules" ,
42
+ # next two needed for systemd in container
43
+ "/sys/fs/cgroup:/sys/fs/cgroup:ro" ,
44
+ "/sys/fs/cgroup/systemd:/sys/fs/cgroup/systemd:rw" ,
45
+ ]
46
+ docker . create_args = [
47
+ "--privileged" ,
48
+ "--security-opt" , "apparmor=unconfined" ,
49
+ "--tmpfs=/run" ,
50
+ "--tmpfs=/tmp:exec" ,
51
+ ]
104
52
105
- config . vm . define "centos-7" do |v |
106
- v . vm . hostname = "centos-7"
107
- v . vm . box = "centos/7"
108
- v . vm . synced_folder "." , "/vagrant" , disabled : true
109
- setup_vm_provider ( v . vm )
110
- v . vm . provision :shell , :privileged => false , :path => './scripts/install.bash' , :args => QA_VAGRANT_VERSION
111
- v . vm . provision :shell , :reset => true , :inline => 'usermod -a -G libvirt vagrant'
112
- add_test_provisions ( v . vm )
113
- end
53
+ # Note that must add all provisioners using the same logic as vagrant does
54
+ # not order machine.vm.provision and override.vm.provision according to
55
+ # order in the Vagrantfile and instead override will always is appended last.
56
+ [ ] . concat (
57
+ settings . fetch ( :docker , { } ) . fetch ( :provision , [ ] )
58
+ ) . concat (
59
+ settings . fetch ( :provision , DEFAULT_PROVISION )
60
+ ) . concat (
61
+ settings . fetch ( :docker , { } ) . fetch ( :post_install , [ ] )
62
+ ) . each do |p |
63
+ override . vm . provision :shell , **p
64
+ end
114
65
115
- config . vm . define "centos-8" do |v |
116
- v . vm . hostname = "centos-8"
117
- v . vm . box = "centos/8"
118
- v . vm . synced_folder "." , "/vagrant" , disabled : true
119
- setup_vm_provider ( v . vm )
120
- v . vm . provision :shell , :privileged => false , :path => './scripts/install.bash' , :args => QA_VAGRANT_VERSION
121
- v . vm . provision :shell , :reset => true , :inline => 'usermod -a -G libvirt vagrant'
122
- add_test_provisions ( v . vm )
123
- end
66
+ add_test_provisions ( override . vm )
67
+ end
124
68
125
- config . vm . define "fedora-33" do |v |
126
- v . vm . hostname = "fedora-33"
127
- v . vm . box = "generic/fedora33"
128
- v . vm . synced_folder "." , "/vagrant" , disabled : true
129
- setup_vm_provider ( v . vm )
130
- v . vm . provision :shell , :privileged => false , :path => './scripts/install.bash' , :args => QA_VAGRANT_VERSION
131
- v . vm . provision :shell , :reset => true , :inline => 'usermod -a -G libvirt vagrant'
132
- add_test_provisions ( v . vm )
133
- end
69
+ machine . vm . provider :libvirt do |domain , override |
70
+ override . vm . box = settings [ :libvirt ] [ :box ]
71
+ domain . driver = ENV . fetch ( 'VAGRANT_LIBVIRT_DRIVER' , 'kvm' )
72
+ domain . memory = 4096
73
+ domain . cpus = 2
74
+ domain . nested = true
75
+ domain . disk_driver :io => 'threads' , :cache => 'unsafe'
134
76
135
- config . vm . define "fedora-34" do |v |
136
- v . vm . hostname = "fedora-34"
137
- v . vm . box = "generic/fedora34"
138
- v . vm . synced_folder "." , "/vagrant" , disabled : true
139
- setup_vm_provider ( v . vm )
140
- v . vm . provision :shell , :privileged => false , :path => './scripts/install.bash' , :args => QA_VAGRANT_VERSION
141
- v . vm . provision :shell , :reset => true , :inline => 'usermod -a -G libvirt vagrant'
142
- add_test_provisions ( v . vm )
143
- end
77
+ # Note that must add all provisioners using the same logic as vagrant does
78
+ # not order machine.vm.provision and override.vm.provision according to
79
+ # order in the Vagrantfile and instead override will always is appended last.
80
+ [ ] . concat (
81
+ settings . fetch ( :libvirt , { } ) . fetch ( :provision , [ ] )
82
+ ) . concat (
83
+ settings . fetch ( :provision , DEFAULT_PROVISION )
84
+ ) . each do |p |
85
+ override . vm . provision :shell , **p
86
+ end
144
87
145
- config . vm . define "arch" do |v |
146
- v . vm . hostname = "arch"
147
- v . vm . box = "archlinux/archlinux"
148
- v . vm . synced_folder "." , "/vagrant" , disabled : true
149
- setup_vm_provider ( v . vm )
150
- v . vm . provision :shell , :privileged => false , :path => './scripts/install.bash' , :args => QA_VAGRANT_VERSION
151
- v . vm . provision :shell , :privileged => false , :reset => true , :inline => 'sudo usermod -G kvm $(whoami)'
152
- add_test_provisions ( v . vm )
88
+ add_test_provisions ( override . vm )
89
+ end
90
+ end
153
91
end
154
92
end
0 commit comments