knife-vcloud 0.2.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +44 -1
- data/README.md +356 -91
- data/lib/chef/knife/{vc_catalog_item_show.rb → catalog/vc_catalog_item_show.rb} +13 -13
- data/lib/chef/knife/{vc_catalog_show.rb → catalog/vc_catalog_show.rb} +9 -12
- data/lib/chef/knife/common/vc_bootstrap_common.rb +208 -0
- data/lib/chef/knife/common/vc_catalog_common.rb +58 -0
- data/lib/chef/knife/common/vc_common.rb +165 -0
- data/lib/chef/knife/common/vc_network_common.rb +34 -0
- data/lib/chef/knife/common/vc_vapp_common.rb +49 -0
- data/lib/chef/knife/common/vc_vdc_common.rb +43 -0
- data/lib/chef/knife/common/vc_vm_common.rb +80 -0
- data/lib/chef/knife/network/vc_network_show.rb +45 -0
- data/lib/chef/knife/{vc_org_list.rb → org/vc_org_list.rb} +3 -5
- data/lib/chef/knife/{vc_org_show.rb → org/vc_org_show.rb} +10 -11
- data/lib/chef/knife/ovf/vc_ovf_upload.rb +71 -0
- data/lib/chef/knife/vapp/vc_vapp_bootstrap.rb +51 -0
- data/lib/chef/knife/vapp/vc_vapp_clone.rb +80 -0
- data/lib/chef/knife/{vc_vapp_create.rb → vapp/vc_vapp_create.rb} +10 -9
- data/lib/chef/knife/{vc_vapp_delete.rb → vapp/vc_vapp_delete.rb} +12 -10
- data/lib/chef/knife/vapp/vc_vapp_network_external.rb +101 -0
- data/lib/chef/knife/vapp/vc_vapp_network_internal.rb +151 -0
- data/lib/chef/knife/vapp/vc_vapp_reboot.rb +45 -0
- data/lib/chef/knife/vapp/vc_vapp_reset.rb +44 -0
- data/lib/chef/knife/vapp/vc_vapp_show.rb +90 -0
- data/lib/chef/knife/vapp/vc_vapp_snapshot.rb +58 -0
- data/lib/chef/knife/{vc_vapp_start.rb → vapp/vc_vapp_start.rb} +7 -7
- data/lib/chef/knife/{vc_vapp_stop.rb → vapp/vc_vapp_stop.rb} +7 -7
- data/lib/chef/knife/vapp/vc_vapp_suspend.rb +44 -0
- data/lib/chef/knife/vc_commands.rb +70 -0
- data/lib/chef/knife/vc_login.rb +2 -2
- data/lib/chef/knife/{vc_vdc_show.rb → vdc/vc_vdc_show.rb} +13 -14
- data/lib/chef/knife/vm/vc_vm_bootstrap.rb +48 -0
- data/lib/chef/knife/vm/vc_vm_config_guest.rb +110 -0
- data/lib/chef/knife/{vc_vm_config_network.rb → vm/vc_vm_config_network.rb} +17 -11
- data/lib/chef/knife/vm/vc_vm_reboot.rb +44 -0
- data/lib/chef/knife/vm/vc_vm_reset.rb +44 -0
- data/lib/chef/knife/vm/vc_vm_set_disks.rb +78 -0
- data/lib/chef/knife/vm/vc_vm_set_info.rb +79 -0
- data/lib/chef/knife/{vc_vm_show.rb → vm/vc_vm_show.rb} +35 -18
- data/lib/chef/knife/vm/vc_vm_start.rb +44 -0
- data/lib/chef/knife/vm/vc_vm_stop.rb +44 -0
- data/lib/chef/knife/vm/vc_vm_suspend.rb +44 -0
- data/lib/knife-vcloud/version.rb +3 -0
- metadata +69 -38
- data/lib/chef/knife/vc_common.rb +0 -103
- data/lib/chef/knife/vc_vapp_config_network.rb +0 -63
- data/lib/chef/knife/vc_vapp_show.rb +0 -59
- data/lib/chef/knife/vc_vm_config_guest.rb +0 -67
@@ -0,0 +1,34 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Stefano Tortarolo (<stefano.tortarolo@gmail.com>)
|
3
|
+
# Copyright:: Copyright (c) 2013
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
class Chef
|
20
|
+
class Knife
|
21
|
+
module VcNetworkCommon
|
22
|
+
def get_network(network_arg)
|
23
|
+
network = nil
|
24
|
+
org_name = locate_org_option
|
25
|
+
|
26
|
+
org = connection.get_organization_by_name org_name
|
27
|
+
network = connection.get_network_by_name org, network_arg
|
28
|
+
|
29
|
+
raise ArgumentError, "Network #{network_arg} not found" unless network
|
30
|
+
network
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Stefano Tortarolo (<stefano.tortarolo@gmail.com>)
|
3
|
+
# Copyright:: Copyright (c) 2013
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
class Chef
|
20
|
+
class Knife
|
21
|
+
module VcVappCommon
|
22
|
+
|
23
|
+
def self.included(includer)
|
24
|
+
includer.class_eval do
|
25
|
+
option :vcloud_vdc,
|
26
|
+
:long => "--vdc VDC_NAME",
|
27
|
+
:description => "VDC to whom vApp belongs",
|
28
|
+
:proc => Proc.new { |key| Chef::Config[:knife][:vcloud_vdc] = key }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def get_vapp(vapp_arg)
|
33
|
+
vapp = nil
|
34
|
+
vdc_name = locate_config_value(:vcloud_vdc)
|
35
|
+
|
36
|
+
unless vdc_name
|
37
|
+
notice_msg("--vdc not specified, assuming VAPP is an ID")
|
38
|
+
vapp = connection.get_vapp vapp_arg
|
39
|
+
else
|
40
|
+
org_name = locate_org_option
|
41
|
+
org = connection.get_organization_by_name org_name
|
42
|
+
vapp = connection.get_vapp_by_name org, vdc_name, vapp_arg
|
43
|
+
end
|
44
|
+
raise ArgumentError, "VApp #{vapp_arg} not found" unless vapp
|
45
|
+
vapp
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Stefano Tortarolo (<stefano.tortarolo@gmail.com>)
|
3
|
+
# Copyright:: Copyright (c) 2013
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
class Chef
|
20
|
+
class Knife
|
21
|
+
module VcVDCCommon
|
22
|
+
def self.included(includer)
|
23
|
+
includer.class_eval do
|
24
|
+
option :vcloud_org,
|
25
|
+
:long => "--org ORG_NAME",
|
26
|
+
:description => "Organization to whom VDC belongs",
|
27
|
+
:proc => Proc.new { |key| Chef::Config[:knife][:vcloud_org] = key }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def get_vdc(vdc_arg)
|
32
|
+
vdc = nil
|
33
|
+
org_name = locate_org_option
|
34
|
+
|
35
|
+
org = connection.get_organization_by_name org_name
|
36
|
+
vdc = connection.get_vdc_by_name org, vdc_arg
|
37
|
+
|
38
|
+
raise ArgumentError, "VDC #{vdc_arg} not found" unless vdc
|
39
|
+
vdc
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Stefano Tortarolo (<stefano.tortarolo@gmail.com>)
|
3
|
+
# Copyright:: Copyright (c) 2013
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
class Chef
|
20
|
+
class Knife
|
21
|
+
module VcVmCommon
|
22
|
+
|
23
|
+
def self.included(includer)
|
24
|
+
includer.class_eval do
|
25
|
+
option :vcloud_vdc,
|
26
|
+
:long => "--vdc VDC_NAME",
|
27
|
+
:description => "VDC to whom VM's vApp belongs",
|
28
|
+
:proc => Proc.new { |key| Chef::Config[:knife][:vcloud_vdc] = key }
|
29
|
+
|
30
|
+
option :vcloud_vapp,
|
31
|
+
:long => "--vapp VAPP_NAME",
|
32
|
+
:description => "vApp to whom VM belongs",
|
33
|
+
:proc => Proc.new { |key| Chef::Config[:knife][:vcloud_vapp] = key }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def get_vm(vm_arg)
|
38
|
+
vm = nil
|
39
|
+
vapp_name = locate_config_value(:vcloud_vapp)
|
40
|
+
org_name = locate_org_option
|
41
|
+
vdc_name = locate_config_value(:vcloud_vdc)
|
42
|
+
|
43
|
+
unless vdc_name && vapp_name
|
44
|
+
notice_msg("--vapp and --vdc not specified, assuming VM is an ID")
|
45
|
+
vm = connection.get_vm vm_arg
|
46
|
+
else
|
47
|
+
org = connection.get_organization_by_name org_name
|
48
|
+
vm = connection.get_vm_by_name org, vdc_name, vapp_name, vm_arg
|
49
|
+
end
|
50
|
+
raise ArgumentError, "VM #{vm_arg} not found" unless vm
|
51
|
+
vm
|
52
|
+
end
|
53
|
+
|
54
|
+
# Accept only characters and hyphens
|
55
|
+
#
|
56
|
+
# Underscores are converted to hyphens
|
57
|
+
def sanitize_guest_name(name)
|
58
|
+
name.gsub(/_/, '-').gsub(/[^[0-9]|^[a-z]|^[A-Z]|^-]/, '')
|
59
|
+
end
|
60
|
+
|
61
|
+
# Verify a VM and stop it if it's running
|
62
|
+
#
|
63
|
+
# Return :nothing if nothing was made
|
64
|
+
# :errored for errors
|
65
|
+
# :stopped if was stopped
|
66
|
+
def stop_if_running(connection, vm)
|
67
|
+
if vm[:status] == 'running'
|
68
|
+
if ui.confirm("Guest customizations must be applied to a stopped VM, " \
|
69
|
+
"but it's running. Can I #{ui.color('STOP', :red)} it")
|
70
|
+
ui.msg "Stopping VM..."
|
71
|
+
task_id, response = connection.poweroff_vm vm[:id]
|
72
|
+
return :errored unless wait_task(connection, task_id)
|
73
|
+
end
|
74
|
+
return :stopped
|
75
|
+
end
|
76
|
+
return :nothing
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Stefano Tortarolo (<stefano.tortarolo@gmail.com>)
|
3
|
+
# Copyright:: Copyright (c) 2013
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
class Chef
|
20
|
+
class Knife
|
21
|
+
class VcNetworkShow < Chef::Knife
|
22
|
+
include Knife::VcCommon
|
23
|
+
include Knife::VcNetworkCommon
|
24
|
+
|
25
|
+
banner "knife vc network show [network] (options)"
|
26
|
+
|
27
|
+
def run
|
28
|
+
$stdout.sync = true
|
29
|
+
|
30
|
+
network_arg = @name_args.shift
|
31
|
+
connection.login
|
32
|
+
network = get_network(network_arg)
|
33
|
+
connection.logout
|
34
|
+
|
35
|
+
out_msg('ID', network[:id])
|
36
|
+
out_msg('Name', network[:name])
|
37
|
+
out_msg('Description', network[:description])
|
38
|
+
out_msg('Gateway', network[:gateway])
|
39
|
+
out_msg('Netmask', network[:netmask])
|
40
|
+
out_msg('Fence mode', network[:fence_mode])
|
41
|
+
out_msg('IP Range', "#{network[:start_address]} - #{network[:end_address]}")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Stefano Tortarolo (<stefano.tortarolo@gmail.com>)
|
3
|
-
# Copyright:: Copyright (c) 2012
|
3
|
+
# Copyright:: Copyright (c) 2012-2013
|
4
4
|
# License:: Apache License, Version 2.0
|
5
5
|
#
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -16,8 +16,6 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
require 'chef/knife/vc_common'
|
20
|
-
|
21
19
|
class Chef
|
22
20
|
class Knife
|
23
21
|
class VcOrgList < Chef::Knife
|
@@ -34,14 +32,14 @@ class Chef
|
|
34
32
|
]
|
35
33
|
|
36
34
|
connection.login
|
37
|
-
org_list = connection.
|
35
|
+
org_list = connection.get_organizations
|
38
36
|
connection.logout
|
39
37
|
|
40
38
|
org_list.each do |k, v|
|
41
39
|
list << (k || '')
|
42
40
|
list << (v || '')
|
43
41
|
end
|
44
|
-
|
42
|
+
ui.msg ui.list(list, :columns_across, 2)
|
45
43
|
end
|
46
44
|
end
|
47
45
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# Author:: Stefano Tortarolo (<stefano.tortarolo@gmail.com>)
|
3
|
-
# Copyright:: Copyright (c) 2012
|
3
|
+
# Copyright:: Copyright (c) 2012-2013
|
4
4
|
# License:: Apache License, Version 2.0
|
5
5
|
#
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -16,19 +16,17 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
require 'chef/knife/vc_common'
|
20
|
-
|
21
19
|
class Chef
|
22
20
|
class Knife
|
23
21
|
class VcOrgShow < Chef::Knife
|
24
22
|
include Knife::VcCommon
|
25
23
|
|
26
|
-
banner "knife vc org show
|
24
|
+
banner "knife vc org show (options)"
|
27
25
|
|
28
26
|
def run
|
29
27
|
$stdout.sync = true
|
30
28
|
|
31
|
-
|
29
|
+
org = locate_org_option
|
32
30
|
|
33
31
|
connection.login
|
34
32
|
|
@@ -37,13 +35,14 @@ class Chef
|
|
37
35
|
ui.color('ID', :bold)
|
38
36
|
]
|
39
37
|
|
40
|
-
|
38
|
+
organization = connection.get_organization_by_name org
|
39
|
+
|
41
40
|
connection.logout
|
42
41
|
|
43
42
|
list = ["#{ui.color('CATALOGS', :cyan)}", '']
|
44
43
|
list << header
|
45
44
|
list.flatten!
|
46
|
-
catalogs.each do |k, v|
|
45
|
+
sort_by_key(organization[:catalogs]).each do |k, v|
|
47
46
|
list << (k || '')
|
48
47
|
list << (v || '')
|
49
48
|
end
|
@@ -51,7 +50,7 @@ class Chef
|
|
51
50
|
list << ['', '', "#{ui.color('VDCs', :cyan)}", '']
|
52
51
|
list << header
|
53
52
|
list.flatten!
|
54
|
-
vdcs.each do |k, v|
|
53
|
+
sort_by_key(organization[:vdcs]).each do |k, v|
|
55
54
|
list << (k || '')
|
56
55
|
list << (v || '')
|
57
56
|
end
|
@@ -59,7 +58,7 @@ class Chef
|
|
59
58
|
list << ['', '', "#{ui.color('NETWORKS', :cyan)}", '']
|
60
59
|
list << header
|
61
60
|
list.flatten!
|
62
|
-
networks.each do |k, v|
|
61
|
+
sort_by_key(organization[:networks]).each do |k, v|
|
63
62
|
list << (k || '')
|
64
63
|
list << (v || '')
|
65
64
|
end
|
@@ -67,12 +66,12 @@ class Chef
|
|
67
66
|
list << ['', '', "#{ui.color('TASKLISTS', :cyan)}", '']
|
68
67
|
list << header
|
69
68
|
list.flatten!
|
70
|
-
tasklists.each do |k, v|
|
69
|
+
sort_by_key(organization[:tasklists]).each do |k, v|
|
71
70
|
list << (k || '<unnamed list>')
|
72
71
|
list << (v || '')
|
73
72
|
end
|
74
73
|
|
75
|
-
|
74
|
+
ui.msg ui.list(list, :columns_across, 2)
|
76
75
|
end
|
77
76
|
end
|
78
77
|
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Stefano Tortarolo (<stefano.tortarolo@gmail.com>)
|
3
|
+
# Copyright:: Copyright (c) 2013
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
class Chef
|
20
|
+
class Knife
|
21
|
+
class VcOvfUpload < Chef::Knife
|
22
|
+
include Knife::VcCommon
|
23
|
+
include Knife::VcVDCCommon
|
24
|
+
include Knife::VcCatalogCommon
|
25
|
+
|
26
|
+
banner "knife vc ovf upload VDC CATALOG VAPP_NAME VAPP_DESCRIPTION OVF_FILENAME (options)"
|
27
|
+
|
28
|
+
option :ovf_show_progress_bar,
|
29
|
+
:long => "--[no-]progressbar",
|
30
|
+
:description => "Show a progress bar for uploads",
|
31
|
+
:proc => Proc.new { |key| Chef::Config[:knife][:ovf_show_progress_bar] = key },
|
32
|
+
:boolean => true,
|
33
|
+
:default => true
|
34
|
+
|
35
|
+
option :ovf_send_manifest,
|
36
|
+
:long => "--[no-]send-manifest",
|
37
|
+
:description => "Send a manifest",
|
38
|
+
:boolean => true,
|
39
|
+
:default => false
|
40
|
+
|
41
|
+
def run
|
42
|
+
$stdout.sync = true
|
43
|
+
|
44
|
+
vdc_arg = @name_args.shift
|
45
|
+
catalog_arg = @name_args.shift
|
46
|
+
vapp_name = @name_args.shift
|
47
|
+
vapp_description = @name_args.shift
|
48
|
+
ovf_filename = @name_args.shift
|
49
|
+
|
50
|
+
show_progress_bar = locate_config_value(:ovf_show_progress_bar)
|
51
|
+
send_manifest = locate_config_value(:ovf_send_manifest)
|
52
|
+
|
53
|
+
connection.login
|
54
|
+
|
55
|
+
vdc = get_vdc(vdc_arg)
|
56
|
+
catalog = get_catalog(catalog_arg)
|
57
|
+
|
58
|
+
ui.msg "Uploading OVF..."
|
59
|
+
|
60
|
+
result = connection.upload_ovf(vdc[:id], vapp_name,
|
61
|
+
vapp_description, ovf_filename, catalog[:id],
|
62
|
+
{ :send_manifest => send_manifest,
|
63
|
+
:progressbar_enable => show_progress_bar})
|
64
|
+
|
65
|
+
ui.msg "OVF uploaded. vAppTemplate created with ID: #{ui.color(result[:id], :cyan)}"
|
66
|
+
|
67
|
+
connection.logout
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Stefano Tortarolo (<stefano.tortarolo@gmail.com>)
|
3
|
+
# Copyright:: Copyright (c) 2013
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
class Chef
|
20
|
+
class Knife
|
21
|
+
class VcVappBootstrap < Chef::Knife
|
22
|
+
include Knife::VcCommon
|
23
|
+
include Knife::VcVappCommon
|
24
|
+
include Knife::VcBootstrapCommon
|
25
|
+
|
26
|
+
banner "knife vc vapp bootstrap [VAPP] (options)"
|
27
|
+
|
28
|
+
def run
|
29
|
+
$stdout.sync = true
|
30
|
+
@test_connection_timeout = 5
|
31
|
+
|
32
|
+
vapp_arg = @name_args.shift
|
33
|
+
|
34
|
+
connection.login
|
35
|
+
|
36
|
+
vapp = get_vapp(vapp_arg)
|
37
|
+
|
38
|
+
if locate_config_value(:bootstrap_windows)
|
39
|
+
ui.msg "Windows bootstrapping is not available, yet."
|
40
|
+
else
|
41
|
+
vapp[:vms_hash].each do |vm_name, details|
|
42
|
+
addresses = details[:addresses].reject(&:nil?)
|
43
|
+
bootstrap_vm(vm_name, details[:id], addresses)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
connection.logout
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|