@@ -27,14 +27,46 @@ $minion_ips = $num_minion.times.collect { |n| $minion_ip_base + "#{n+3}" }
27
27
# Determine the OS platform to use
28
28
$kube_os = ENV [ 'KUBERNETES_OS' ] || "fedora"
29
29
30
- # Check if we already have kube box
31
- $kube_box_url = ENV [ 'KUBERNETES_BOX_URL' ] || "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_fedora-20_chef-provisionerless.box"
32
-
33
- # OS platform to box information
34
- $kube_box = {
35
- "fedora" => {
36
- "name" => "fedora20" ,
37
- "box_url" => $kube_box_url
30
+ # To override the vagrant provider, use (e.g.):
31
+ # KUBERNETES_PROVIDER=vagrant VAGRANT_DEFAULT_PROVIDER=... .../cluster/kube-up.sh
32
+ # To override the box, use (e.g.):
33
+ # KUBERNETES_PROVIDER=vagrant KUBERNETES_BOX_NAME=... .../cluster/kube-up.sh
34
+ # You can specify a box version:
35
+ # KUBERNETES_PROVIDER=vagrant KUBERNETES_BOX_NAME=... KUBERNETES_BOX_VERSION=... .../cluster/kube-up.sh
36
+ # You can specify a box location:
37
+ # KUBERNETES_PROVIDER=vagrant KUBERNETES_BOX_NAME=... KUBERNETES_BOX_URL=... .../cluster/kube-up.sh
38
+ # KUBERNETES_BOX_URL and KUBERNETES_BOX_VERSION will be ignored unless
39
+ # KUBERNETES_BOX_NAME is set
40
+
41
+ # Default OS platform to provider/box information
42
+ $kube_provider_boxes = {
43
+ :parallels => {
44
+ 'fedora' => {
45
+ # :box_url and :box_version are optional (and mutually exclusive);
46
+ # if :box_url is omitted the box will be retrieved by :box_name (and
47
+ # :box_version if provided) from
48
+ # http://atlas.hashicorp.com/boxes/search (formerly
49
+ # http://vagrantcloud.com/); this allows you override :box_name with
50
+ # your own value so long as you provide :box_url; for example, the
51
+ # "official" name of this box is "rickard-von-essen/
52
+ # opscode_fedora-20", but by providing the URL and our own name, we
53
+ # make it appear as yet another provider under the "kube-fedora20"
54
+ # box
55
+ :box_name => 'kube-fedora20' ,
56
+ :box_url => 'https://atlas.hashicorp.com/rickard-von-essen/boxes/opscode_fedora-20/versions/0.4.0/providers/parallels.box'
57
+ }
58
+ } ,
59
+ :virtualbox => {
60
+ 'fedora' => {
61
+ :box_name => 'kube-fedora20' ,
62
+ :box_url => 'http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_fedora-20_chef-provisionerless.box'
63
+ }
64
+ } ,
65
+ :vmware_desktop => {
66
+ 'fedora' => {
67
+ :box_name => 'kube-fedora20' ,
68
+ :box_url => 'http://opscode-vm-bento.s3.amazonaws.com/vagrant/vmware/opscode_fedora-20-i386_chef-provisionerless.box'
69
+ }
38
70
}
39
71
}
40
72
54
86
# In Fedora VM, tmpfs device is mapped to /tmp. tmpfs is given 50% of RAM allocation.
55
87
# When doing Salt provisioning, we copy approximately 200MB of content in /tmp before anything else happens.
56
88
# This causes problems if anything else was in /tmp or the other directories that are bound to tmpfs device (i.e /run, etc.)
57
- $vm_mem = ( ENV [ 'KUBERNETES_MEMORY' ] || 1024 ) . to_i
89
+ $vm_master_mem = ( ENV [ 'KUBERNETES_MASTER_MEMORY' ] || ENV [ 'KUBERNETES_MEMORY' ] || 1024 ) . to_i
90
+ $vm_minion_mem = ( ENV [ 'KUBERNETES_MINION_MEMORY' ] || ENV [ 'KUBERNETES_MEMORY' ] || 1024 ) . to_i
58
91
59
92
Vagrant . configure ( VAGRANTFILE_API_VERSION ) do |config |
60
- def customize_vm ( config )
61
- config . vm . box = $kube_box [ $kube_os ] [ "name" ]
62
- config . vm . box_url = $kube_box [ $kube_os ] [ "box_url" ]
93
+ def setvmboxandurl ( config , provider )
94
+ if ENV [ 'KUBERNETES_BOX_NAME' ] then
95
+ config . vm . box = ENV [ 'KUBERNETES_BOX_NAME' ]
63
96
64
- config . vm . provider :virtualbox do |v |
65
- v . customize [ "modifyvm" , :id , "--memory" , $vm_mem]
66
- v . customize [ "modifyvm" , :id , "--cpus" , $vm_cpus]
97
+ if ENV [ 'KUBERNETES_BOX_URL' ] then
98
+ config . vm . box_url = ENV [ 'KUBERNETES_BOX_URL' ]
99
+ end
100
+
101
+ if ENV [ 'KUBERNETES_BOX_VERSION' ] then
102
+ config . vm . box_version = ENV [ 'KUBERNETES_BOX_VERSION' ]
103
+ end
104
+ else
105
+ config . vm . box = $kube_provider_boxes[ provider ] [ $kube_os] [ :box_name ]
106
+
107
+ if $kube_provider_boxes[ provider ] [ $kube_os] [ :box_url ] then
108
+ config . vm . box_url = $kube_provider_boxes[ provider ] [ $kube_os] [ :box_url ]
109
+ end
110
+
111
+ if $kube_provider_boxes[ provider ] [ $kube_os] [ :box_version ] then
112
+ config . vm . box_version = $kube_provider_boxes[ provider ] [ $kube_os] [ :box_version ]
113
+ end
114
+ end
115
+ end
116
+
117
+ def customize_vm ( config , vm_mem )
118
+ # Try VMWare Fusion first (see
119
+ # https://docs.vagrantup.com/v2/providers/basic_usage.html)
120
+ config . vm . provider :vmware_fusion do |v , override |
121
+ setvmboxandurl ( override , :vmware_desktop )
122
+ v . vmx [ 'memsize' ] = vm_mem
123
+ v . vmx [ 'numvcpus' ] = $vm_cpus
124
+ end
125
+
126
+ # Then try VMWare Workstation
127
+ config . vm . provider :vmware_workstation do |v , override |
128
+ setvmboxandurl ( override , :vmware_desktop )
129
+ v . vmx [ 'memsize' ] = vm_mem
130
+ v . vmx [ 'numvcpus' ] = $vm_cpus
131
+ end
132
+
133
+ # Then try Parallels
134
+ config . vm . provider :parallels do |v , override |
135
+ setvmboxandurl ( override , :parallels )
136
+ v . memory = vm_mem # v.customize ['set', :id, '--memsize', vm_mem]
137
+ v . cpus = $vm_cpus # v.customize ['set', :id, '--cpus', $vm_cpus]
138
+
139
+ # Don't attempt to update the Parallels tools on the image (this can
140
+ # be done manually if necessary)
141
+ v . update_guest_tools = false # v.customize ['set', :id, '--tools-autoupdate', 'off']
142
+
143
+ # Set up Parallels folder sharing to behave like VirtualBox (i.e.,
144
+ # mount the current directory as /vagrant and that's it)
145
+ v . customize [ 'set' , :id , '--shf-guest' , 'off' ]
146
+ v . customize [ 'set' , :id , '--shf-guest-automount' , 'off' ]
147
+ v . customize [ 'set' , :id , '--shf-host' , 'on' ]
148
+
149
+ # Remove all auto-mounted "shared folders"; the result seems to
150
+ # persist between runs (i.e., vagrant halt && vagrant up)
151
+ override . vm . provision :shell , :inline => ( %q{
152
+ set -ex
153
+ if [ -d /media/psf ]; then
154
+ for i in /media/psf/*; do
155
+ if [ -d "${i}" ]; then
156
+ umount "${i}" || true
157
+ rmdir -v "${i}"
158
+ fi
159
+ done
160
+ rmdir -v /media/psf
161
+ fi
162
+ exit
163
+ } ) . strip
164
+ end
165
+
166
+ # Finally, fall back to VirtualBox
167
+ config . vm . provider :virtualbox do |v , override |
168
+ setvmboxandurl ( override , :virtualbox )
169
+ v . memory = vm_mem # v.customize ["modifyvm", :id, "--memory", vm_mem]
170
+ v . cpus = $vm_cpus # v.customize ["modifyvm", :id, "--cpus", $vm_cpus]
67
171
68
172
# Use faster paravirtualized networking
69
173
v . customize [ "modifyvm" , :id , "--nictype1" , "virtio" ]
@@ -73,7 +177,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
73
177
74
178
# Kubernetes master
75
179
config . vm . define "master" do |c |
76
- customize_vm c
180
+ customize_vm c , $vm_master_mem
77
181
if ENV [ 'KUBE_TEMP' ] then
78
182
script = "#{ ENV [ 'KUBE_TEMP' ] } /master-start.sh"
79
183
c . vm . provision "shell" , run : "always" , path : script
@@ -84,17 +188,20 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
84
188
85
189
# Kubernetes minion
86
190
$num_minion. times do |n |
87
- config . vm . define "minion-#{ n +1 } " do |minion |
88
- customize_vm minion
191
+ minion_vm_name = "minion-#{ n +1 } "
192
+ minion_prefix = ENV [ 'INSTANCE_PREFIX' ] || 'kubernetes' # must mirror default in cluster/vagrant/config-default.sh
193
+ minion_hostname = "#{ minion_prefix } -#{ minion_vm_name } "
194
+
195
+ config . vm . define minion_vm_name do |minion |
196
+ customize_vm minion , $vm_minion_mem
89
197
90
- minion_index = n +1
91
198
minion_ip = $minion_ips[ n ]
92
199
if ENV [ 'KUBE_TEMP' ] then
93
200
script = "#{ ENV [ 'KUBE_TEMP' ] } /minion-start-#{ n } .sh"
94
201
minion . vm . provision "shell" , run : "always" , path : script
95
202
end
96
203
minion . vm . network "private_network" , ip : "#{ minion_ip } "
97
- minion . vm . hostname = " #{ ENV [ 'INSTANCE_PREFIX' ] } -minion- #{ minion_index } "
204
+ minion . vm . hostname = minion_hostname
98
205
end
99
206
end
100
207
end
0 commit comments