knife-cosmic 0.2.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/CHANGES.rdoc +186 -0
- data/LICENSE +202 -0
- data/README.rdoc +427 -0
- data/lib/chef/knife/cosmic_aag_list.rb +58 -0
- data/lib/chef/knife/cosmic_account_list.rb +87 -0
- data/lib/chef/knife/cosmic_base.rb +108 -0
- data/lib/chef/knife/cosmic_baselist.rb +111 -0
- data/lib/chef/knife/cosmic_cluster_list.rb +60 -0
- data/lib/chef/knife/cosmic_config_list.rb +56 -0
- data/lib/chef/knife/cosmic_disk_list.rb +58 -0
- data/lib/chef/knife/cosmic_domain_list.rb +53 -0
- data/lib/chef/knife/cosmic_firewallrule_create.rb +138 -0
- data/lib/chef/knife/cosmic_firewallrule_list.rb +62 -0
- data/lib/chef/knife/cosmic_forwardrule_create.rb +145 -0
- data/lib/chef/knife/cosmic_host_list.rb +61 -0
- data/lib/chef/knife/cosmic_hosts.rb +58 -0
- data/lib/chef/knife/cosmic_iso_list.rb +89 -0
- data/lib/chef/knife/cosmic_keypair_create.rb +72 -0
- data/lib/chef/knife/cosmic_keypair_delete.rb +60 -0
- data/lib/chef/knife/cosmic_keypair_list.rb +44 -0
- data/lib/chef/knife/cosmic_network_list.rb +63 -0
- data/lib/chef/knife/cosmic_oscategory_list.rb +50 -0
- data/lib/chef/knife/cosmic_ostype_list.rb +52 -0
- data/lib/chef/knife/cosmic_pod_list.rb +60 -0
- data/lib/chef/knife/cosmic_project_list.rb +63 -0
- data/lib/chef/knife/cosmic_publicip_list.rb +55 -0
- data/lib/chef/knife/cosmic_router_list.rb +64 -0
- data/lib/chef/knife/cosmic_securitygroup_list.rb +59 -0
- data/lib/chef/knife/cosmic_server_add_nic.rb +109 -0
- data/lib/chef/knife/cosmic_server_create.rb +674 -0
- data/lib/chef/knife/cosmic_server_delete.rb +153 -0
- data/lib/chef/knife/cosmic_server_list.rb +167 -0
- data/lib/chef/knife/cosmic_server_passwordreset.rb +91 -0
- data/lib/chef/knife/cosmic_server_reboot.rb +99 -0
- data/lib/chef/knife/cosmic_server_remove_nic.rb +101 -0
- data/lib/chef/knife/cosmic_server_start.rb +104 -0
- data/lib/chef/knife/cosmic_server_stop.rb +118 -0
- data/lib/chef/knife/cosmic_server_update.rb +47 -0
- data/lib/chef/knife/cosmic_service_list.rb +74 -0
- data/lib/chef/knife/cosmic_stack_create.rb +298 -0
- data/lib/chef/knife/cosmic_stack_delete.rb +79 -0
- data/lib/chef/knife/cosmic_template_create.rb +129 -0
- data/lib/chef/knife/cosmic_template_extract.rb +104 -0
- data/lib/chef/knife/cosmic_template_list.rb +88 -0
- data/lib/chef/knife/cosmic_template_register.rb +187 -0
- data/lib/chef/knife/cosmic_user_list.rb +62 -0
- data/lib/chef/knife/cosmic_volume_attach.rb +70 -0
- data/lib/chef/knife/cosmic_volume_create.rb +108 -0
- data/lib/chef/knife/cosmic_volume_delete.rb +97 -0
- data/lib/chef/knife/cosmic_volume_detach.rb +61 -0
- data/lib/chef/knife/cosmic_volume_list.rb +77 -0
- data/lib/chef/knife/cosmic_zone_list.rb +53 -0
- data/lib/knife-cosmic/connection.rb +1046 -0
- metadata +127 -0
@@ -0,0 +1,79 @@
|
|
1
|
+
#
|
2
|
+
# Original knife-cloudstack author:: Ryan Holmes (<rholmes@edmunds.com>)
|
3
|
+
# Copyright:: Copyright (c) 2011 Edmunds, Inc.
|
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
|
+
require 'chef/knife/cosmic_base'
|
20
|
+
|
21
|
+
module Knifecosmic
|
22
|
+
class CosmicStackDelete < Chef::Knife
|
23
|
+
|
24
|
+
include Chef::Knife::KnifecosmicBase
|
25
|
+
|
26
|
+
deps do
|
27
|
+
require 'chef/json_compat'
|
28
|
+
require 'chef/mash'
|
29
|
+
require 'knife-cosmic/connection'
|
30
|
+
require 'chef/knife'
|
31
|
+
Chef::Knife.load_deps
|
32
|
+
Knifecosmic::CosmicServerDelete.load_deps
|
33
|
+
end
|
34
|
+
|
35
|
+
banner "knife cosmic stack delete JSON_FILE (options)"
|
36
|
+
|
37
|
+
def run
|
38
|
+
if @name_args.first.nil?
|
39
|
+
ui.error "Please specify json file eg: knife cosmic stack delete JSON_FILE"
|
40
|
+
exit 1
|
41
|
+
end
|
42
|
+
file_path = File.expand_path(@name_args.first)
|
43
|
+
unless File.exist?(file_path) then
|
44
|
+
ui.error "Stack file '#{file_path}' not found. Please check the path."
|
45
|
+
exit 1
|
46
|
+
end
|
47
|
+
|
48
|
+
data = File.read file_path
|
49
|
+
stack = Chef::JSONCompat.from_json data
|
50
|
+
delete_stack stack
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
def delete_stack(stack)
|
55
|
+
current_stack = Mash.new(stack)
|
56
|
+
current_stack[:servers].each do |server|
|
57
|
+
if server[:name]
|
58
|
+
|
59
|
+
# delete server(s)
|
60
|
+
names = server[:name].split(/[\s,]+/)
|
61
|
+
names.each do |name|
|
62
|
+
delete_server(name)
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def delete_server(server_name)
|
71
|
+
cmd = Knifecosmic::CosmicServerDelete.new([server_name])
|
72
|
+
cmd.config[:yes] = true
|
73
|
+
cmd.config[:expunge] = true
|
74
|
+
cmd.run_with_pretty_exceptions
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
#
|
2
|
+
# Original knife-cloudstack author:: Sander Botman (<sbotman@schubergphilis.com>)
|
3
|
+
# Original knife-cloudstack author:: Frank Breedijk (<fbreedijk@schubergphilis.com>)
|
4
|
+
# Copyright:: Copyright (c) 2013
|
5
|
+
# License:: Apache License, Version 2.0
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
#
|
19
|
+
|
20
|
+
require 'chef/knife/cosmic_base'
|
21
|
+
|
22
|
+
module Knifecosmic
|
23
|
+
class CosmicTemplateCreate < Chef::Knife
|
24
|
+
|
25
|
+
include Chef::Knife::KnifecosmicBase
|
26
|
+
|
27
|
+
deps do
|
28
|
+
require 'knife-cosmic/connection'
|
29
|
+
Chef::Knife.load_deps
|
30
|
+
end
|
31
|
+
|
32
|
+
banner "knife cosmic template create NAME (options)"
|
33
|
+
|
34
|
+
option :displaytext,
|
35
|
+
:long => "--displaytext DISPLAYTEXT",
|
36
|
+
:description => "The display text of the template",
|
37
|
+
:on => :head
|
38
|
+
|
39
|
+
option :name,
|
40
|
+
:long => "--name NAME",
|
41
|
+
:description => "Specify templatename (without format checking)"
|
42
|
+
|
43
|
+
option :ostypeid,
|
44
|
+
:long => "--ostypeid ID",
|
45
|
+
:description => "Specify OS type ID",
|
46
|
+
:on => :head
|
47
|
+
|
48
|
+
option :volumeid,
|
49
|
+
:long => "--volumeid ID",
|
50
|
+
:description => "Specify volume ID",
|
51
|
+
:on => :head
|
52
|
+
|
53
|
+
option :hypervisor,
|
54
|
+
:long => "--hypervisor=TYPE",
|
55
|
+
:description => "Specify hypervisor type",
|
56
|
+
:on => :head
|
57
|
+
|
58
|
+
option :optimisefor,
|
59
|
+
:long => "--optimisefor PROFILE",
|
60
|
+
:description => "Specify hardware optimisation (Generic vs Windows)",
|
61
|
+
:on => :head
|
62
|
+
|
63
|
+
option :ispublic,
|
64
|
+
:long => "--[no-]public",
|
65
|
+
:description => "Make the template public after creation",
|
66
|
+
:boolean => true,
|
67
|
+
:default => false
|
68
|
+
|
69
|
+
option :isfeatured,
|
70
|
+
:long => "--[no-]featured",
|
71
|
+
:description => "Make the template featured after creation",
|
72
|
+
:boolean => true,
|
73
|
+
:default => false
|
74
|
+
|
75
|
+
option :passwordenabled,
|
76
|
+
:long => "--[no-]passwordenabled",
|
77
|
+
:description => "Make the template password reset enabled after creation",
|
78
|
+
:boolean => true,
|
79
|
+
:default => true
|
80
|
+
|
81
|
+
option :extractable,
|
82
|
+
:long => "--[no-]extractable",
|
83
|
+
:description => "Make the template extractable after creation",
|
84
|
+
:boolean => "true",
|
85
|
+
:default => false
|
86
|
+
|
87
|
+
def run
|
88
|
+
validate_base_options
|
89
|
+
|
90
|
+
Chef::Log.debug("Validate hostname and options")
|
91
|
+
if locate_config_value(:name)
|
92
|
+
templatename = locate_config_value(:name)
|
93
|
+
else
|
94
|
+
templatename = @name_args.first
|
95
|
+
unless /^[a-zA-Z0-9][a-zA-Z0-9_\-#]*$/.match templatename then
|
96
|
+
ui.error "Invalid templatename. Please specify a simple name without any spaces"
|
97
|
+
exit 1
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
print "#{ui.color("Creating template: #{templatename}", :magenta)}\n"
|
102
|
+
|
103
|
+
params = {
|
104
|
+
'command' => 'createTemplate',
|
105
|
+
'name' => templatename,
|
106
|
+
'displaytext' => locate_config_value(:displaytext),
|
107
|
+
'ostypeid' => locate_config_value(:ostypeid),
|
108
|
+
'volumeid' => locate_config_value(:volumeid),
|
109
|
+
'hypervisor' => locate_config_value(:hypervisor)
|
110
|
+
}
|
111
|
+
params['ispublic'] = locate_config_value(:ispublic) if locate_config_value(:ispublic)
|
112
|
+
params['isfeatured'] = locate_config_value(:isfeatured) if locate_config_value(:isfeatured)
|
113
|
+
params['optimisefor'] = locate_config_value(:optimisefor) if locate_config_value(:optimisefor)
|
114
|
+
params['passwordenabled'] = locate_config_value(:passwordenabled) if locate_config_value(:passwordenabled)
|
115
|
+
params['isextractable'] = locate_config_value(:extractable) if locate_config_value(:extractable)
|
116
|
+
json = connection.send_request(params)
|
117
|
+
|
118
|
+
if ! json then
|
119
|
+
ui.error("Unable to create template")
|
120
|
+
exit 1
|
121
|
+
end
|
122
|
+
|
123
|
+
print "Template #{json['id']} is being created in the background\n";
|
124
|
+
|
125
|
+
return json['id']
|
126
|
+
end
|
127
|
+
|
128
|
+
end # class
|
129
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
#
|
2
|
+
# Original knife-cloudstack author:: Frank Breedijk (<fbreedijk@schubergphilis.com>)
|
3
|
+
# Original knife-cloudstack author:: Sander Botman (<sbotman@schubergphilis.com>)
|
4
|
+
# Copyright:: Copyright (c) 2013
|
5
|
+
# License:: Apache License, Version 2.0
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
#
|
19
|
+
|
20
|
+
require 'chef/knife/cosmic_base'
|
21
|
+
|
22
|
+
module Knifecosmic
|
23
|
+
class CosmicTemplateExtract < Chef::Knife
|
24
|
+
|
25
|
+
include Chef::Knife::KnifecosmicBase
|
26
|
+
|
27
|
+
deps do
|
28
|
+
require 'knife-cosmic/connection'
|
29
|
+
Chef::Knife.load_deps
|
30
|
+
end
|
31
|
+
|
32
|
+
banner "knife cosmic template extract NAME (options)"
|
33
|
+
|
34
|
+
option :name,
|
35
|
+
:long => "--name NAME",
|
36
|
+
:description => "Name of template to extract (without format checking)"
|
37
|
+
|
38
|
+
option :zone,
|
39
|
+
:long => "--zone NAME",
|
40
|
+
:description => "Name of the zone to extract the template in"
|
41
|
+
|
42
|
+
def run
|
43
|
+
validate_base_options
|
44
|
+
|
45
|
+
Chef::Log.debug("Validate template name")
|
46
|
+
if locate_config_value(:name)
|
47
|
+
templatename = locate_config_value(:name)
|
48
|
+
else
|
49
|
+
templatename = @name_args.first
|
50
|
+
unless /^[a-zA-Z0-9][a-zA-Z0-9_\-# ]*$/.match templatename then
|
51
|
+
ui.error "Invalid templatename."
|
52
|
+
exit 1
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
zonename = locate_config_value(:zone)
|
57
|
+
if ! zonename
|
58
|
+
then
|
59
|
+
ui.error "No zone specified"
|
60
|
+
exit 1
|
61
|
+
end
|
62
|
+
|
63
|
+
print "#{ui.color("Extracting template: #{templatename}", :magenta)}\n"
|
64
|
+
|
65
|
+
Chef::Log.debug("Getting zone")
|
66
|
+
|
67
|
+
zone = connection.get_zone(
|
68
|
+
zonename,
|
69
|
+
)
|
70
|
+
if ! zone then
|
71
|
+
ui.error "Zone #{zonename} not found"
|
72
|
+
exit 1
|
73
|
+
end
|
74
|
+
|
75
|
+
Chef::Log.debug("Getting template")
|
76
|
+
|
77
|
+
template = connection.get_template(
|
78
|
+
templatename,
|
79
|
+
)
|
80
|
+
if ! template then
|
81
|
+
ui.error "Template #{templatename} not found"
|
82
|
+
exit 1
|
83
|
+
end
|
84
|
+
|
85
|
+
Chef::Log.debug("Extracting template")
|
86
|
+
params = {
|
87
|
+
'command' => 'extractTemplate',
|
88
|
+
'id' => template["id"],
|
89
|
+
'mode' => "HTTP_DOWNLOAD",
|
90
|
+
'zoneid' => zone["id"]
|
91
|
+
}
|
92
|
+
json = connection.send_async_request(params)
|
93
|
+
|
94
|
+
if json then
|
95
|
+
url = json["template"]["url"]
|
96
|
+
print "\n#{url}\n"
|
97
|
+
else
|
98
|
+
ui.error "Template extraction failed.\n"
|
99
|
+
exit 1
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
end # class
|
104
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
#
|
2
|
+
# Original knife-cloudstack author:: Ryan Holmes (<rholmes@edmunds.com>)
|
3
|
+
# Original knife-cloudstack author:: Sander Botman (<sbotman@schubergphilis.com>)
|
4
|
+
# Copyright:: Copyright (c) 2011 Edmunds, Inc.
|
5
|
+
# Copyright:: Copyright (c) 2013 Sander Botman.
|
6
|
+
# License:: Apache License, Version 2.0
|
7
|
+
#
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
+
# you may not use this file except in compliance with the License.
|
10
|
+
# You may obtain a copy of the License at
|
11
|
+
#
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
13
|
+
#
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
17
|
+
# See the License for the specific language governing permissions and
|
18
|
+
# limitations under the License.
|
19
|
+
#
|
20
|
+
|
21
|
+
require 'chef/knife'
|
22
|
+
require 'chef/knife/cosmic_baselist'
|
23
|
+
|
24
|
+
module Knifecosmic
|
25
|
+
class CosmicTemplateList < Chef::Knife
|
26
|
+
|
27
|
+
include Chef::Knife::KnifecosmicBaseList
|
28
|
+
|
29
|
+
banner "knife cosmic template list (options)"
|
30
|
+
|
31
|
+
option :listall,
|
32
|
+
:long => "--listall",
|
33
|
+
:description => "List all templates",
|
34
|
+
:boolean => true
|
35
|
+
|
36
|
+
option :index,
|
37
|
+
:long => "--index",
|
38
|
+
:description => "Add index numbers to the output",
|
39
|
+
:boolean => true
|
40
|
+
|
41
|
+
option :templatefilter,
|
42
|
+
:long => "--templatefilter FILTER",
|
43
|
+
:description => "Default: 'featured'. Options: 'self','selfexecutable','sharedexecutable','executable','community'",
|
44
|
+
:default => "featured"
|
45
|
+
|
46
|
+
def run
|
47
|
+
validate_base_options
|
48
|
+
|
49
|
+
columns = [
|
50
|
+
'Name :name',
|
51
|
+
'Size :size',
|
52
|
+
'Zone :zonename',
|
53
|
+
'Public :ispublic',
|
54
|
+
'Created :created'
|
55
|
+
]
|
56
|
+
|
57
|
+
params = { 'command' => "listTemplates" }
|
58
|
+
params['filter'] = locate_config_value(:filter) if locate_config_value(:filter)
|
59
|
+
params['listall'] = locate_config_value(:listall) if locate_config_value(:listall)
|
60
|
+
params['keyword'] = locate_config_value(:keyword) if locate_config_value(:keyword)
|
61
|
+
params['name'] = locate_config_value(:name) if locate_config_value(:name)
|
62
|
+
|
63
|
+
if ['all','featured','self','selfexecutable','sharedexecutable','executable','community'].include?(locate_config_value(:templatefilter))
|
64
|
+
params['templatefilter'] = locate_config_value(:templatefilter)
|
65
|
+
else
|
66
|
+
params['templatefilter'] = 'featured'
|
67
|
+
end
|
68
|
+
|
69
|
+
result = connection.list_object(params, "template")
|
70
|
+
|
71
|
+
result.each do |r|
|
72
|
+
r['size'] = human_file_size(r['size']) if r['size']
|
73
|
+
end
|
74
|
+
|
75
|
+
list_object(columns, result)
|
76
|
+
end
|
77
|
+
|
78
|
+
def human_file_size n
|
79
|
+
count = 0
|
80
|
+
while n >= 1024 and count < 4
|
81
|
+
n /= 1024.0
|
82
|
+
count += 1
|
83
|
+
end
|
84
|
+
format("%.0f", n) + %w(B KB MB GB TB)[count]
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,187 @@
|
|
1
|
+
#
|
2
|
+
# Original knife-cloudstack author:: Frank Breedijk (<fbreedijk@schubergphilis.com>)
|
3
|
+
# Original knife-cloudstack author:: Sander Botman (<sbotman@schubergphilis.com>)
|
4
|
+
# Copyright:: Copyright (c) 2013
|
5
|
+
# License:: Apache License, Version 2.0
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
#
|
19
|
+
|
20
|
+
require 'chef/knife/cosmic_base'
|
21
|
+
|
22
|
+
module Knifecosmic
|
23
|
+
class CosmicTemplateRegister < Chef::Knife
|
24
|
+
|
25
|
+
include Chef::Knife::KnifecosmicBase
|
26
|
+
|
27
|
+
deps do
|
28
|
+
require 'knife-cosmic/connection'
|
29
|
+
Chef::Knife.load_deps
|
30
|
+
end
|
31
|
+
|
32
|
+
banner "knife cosmic template register NAME (options)"
|
33
|
+
|
34
|
+
option :name,
|
35
|
+
:long => "--name NAME",
|
36
|
+
:description => "Name of template to register (without format checking)"
|
37
|
+
|
38
|
+
option :displaytext,
|
39
|
+
:long => "--displaytext DESCRIPTION",
|
40
|
+
:description => "Description of the template as shown in cosmic"
|
41
|
+
|
42
|
+
option :format,
|
43
|
+
:long => "--format FORMAT",
|
44
|
+
:description => "Format of the template file QCOW2, RAW or VHD (default)",
|
45
|
+
:default => "VHD"
|
46
|
+
|
47
|
+
option :hypervisor,
|
48
|
+
:long => "--hypervisor NAME",
|
49
|
+
:description => "Target hypervisor for the template (default XEN)",
|
50
|
+
:default => "XenServer"
|
51
|
+
|
52
|
+
option :ostypeid,
|
53
|
+
:long => '--ostypeid OSTYPEID',
|
54
|
+
:description => "The ID of the OS Type that best represents the OS of this template"
|
55
|
+
|
56
|
+
option :url,
|
57
|
+
:long => '--url URL',
|
58
|
+
:description => "The URL of where the template is hosted. Including http:// and https://"
|
59
|
+
|
60
|
+
option :zone,
|
61
|
+
:long => "--zone NAME",
|
62
|
+
:description => "Name of the zone to register the template in. Default: All zones",
|
63
|
+
:default => -1
|
64
|
+
|
65
|
+
option :bits,
|
66
|
+
:long => "--bits 32|64",
|
67
|
+
:description => "32 or 64 bits support, defaults to 64",
|
68
|
+
:default => 64
|
69
|
+
|
70
|
+
option :isextractable,
|
71
|
+
:long => "--[no-]isextractable",
|
72
|
+
:description => "Is the template extractable. Default: NO",
|
73
|
+
:boolean => true,
|
74
|
+
:default => false
|
75
|
+
|
76
|
+
option :isdynamicallyscalable,
|
77
|
+
:long => "--isdynamicallyscalable",
|
78
|
+
:description => "Is the template dynamically scalable. Default: NO",
|
79
|
+
:boolean => true,
|
80
|
+
:default => false
|
81
|
+
|
82
|
+
option :featured,
|
83
|
+
:long => "--[no-]featured",
|
84
|
+
:description => "Is the tempalte featured? Default: NO",
|
85
|
+
:boolean => true,
|
86
|
+
:default => false
|
87
|
+
|
88
|
+
option :public,
|
89
|
+
:long => "--[no-]public",
|
90
|
+
:description => "Is the template public? Default: NO",
|
91
|
+
:boolean => true,
|
92
|
+
:default => false
|
93
|
+
|
94
|
+
option :passwordenabled,
|
95
|
+
:long => "--[no-]passwordenabled",
|
96
|
+
:description => "Is the password reset feature enabled, Default: YES",
|
97
|
+
:boolean => true,
|
98
|
+
:default => true
|
99
|
+
|
100
|
+
option :requireshvm,
|
101
|
+
:long => "--[no-]requireshvm",
|
102
|
+
:description => "Does the template require HVM? Default: NO",
|
103
|
+
:boolean => true,
|
104
|
+
:default => false
|
105
|
+
|
106
|
+
option :sshkeyenabled,
|
107
|
+
:long => "--[no-]sshkeyenabled",
|
108
|
+
:description => "Does this tempalte support the sshkey upload feature? Default: NO",
|
109
|
+
:boolean => true,
|
110
|
+
:default => false
|
111
|
+
|
112
|
+
def run
|
113
|
+
validate_base_options
|
114
|
+
|
115
|
+
Chef::Log.debug("Validate template name")
|
116
|
+
if locate_config_value(:name)
|
117
|
+
templatename = locate_config_value(:name)
|
118
|
+
else
|
119
|
+
templatename = @name_args.first
|
120
|
+
unless /^[a-zA-Z0-9][a-zA-Z0-9_\-# ]*$/.match templatename then
|
121
|
+
ui.error "Invalid templatename."
|
122
|
+
exit 1
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
unless locate_config_value(:ostypeid) then
|
127
|
+
ui.error "No os type id specified"
|
128
|
+
exit 1
|
129
|
+
end
|
130
|
+
|
131
|
+
unless /^http(s)?\:\/\//.match locate_config_value(:url) then
|
132
|
+
ui.error "URL (#{locate_config_value(:url)}) is not a well formatted url"
|
133
|
+
exit 1
|
134
|
+
end
|
135
|
+
|
136
|
+
unless (locate_config_value(:bits) == 64 or locate_config_value(:bits) == 32 ) then
|
137
|
+
ui.error "Bits must be 32 or 64"
|
138
|
+
exit 1
|
139
|
+
end
|
140
|
+
|
141
|
+
if (locate_config_value(:zone) == -1)
|
142
|
+
zoneid = -1
|
143
|
+
else
|
144
|
+
Chef::Log.debug("Resolving zone #{locate_config_value(:zone)}\n")
|
145
|
+
|
146
|
+
zone = connection.get_zone(locate_config_value(:zone))
|
147
|
+
|
148
|
+
if ! zone then
|
149
|
+
ui.error "Unable to resolve zone #{locate_config_value(:zone)}\n"
|
150
|
+
exit 1
|
151
|
+
end
|
152
|
+
zoneid = zone['id']
|
153
|
+
end
|
154
|
+
|
155
|
+
print "#{ui.color("Registring template: #{templatename}", :magenta)}\n"
|
156
|
+
|
157
|
+
params = {
|
158
|
+
'command' => 'registerTemplate',
|
159
|
+
'name' => templatename,
|
160
|
+
'displaytext' => locate_config_value(:displaytext),
|
161
|
+
'format' => locate_config_value(:format),
|
162
|
+
'hypervisor' => locate_config_value(:hypervisor),
|
163
|
+
'ostypeid' => locate_config_value(:ostypeid),
|
164
|
+
'url' => locate_config_value(:url),
|
165
|
+
'zoneid' => zoneid,
|
166
|
+
'bits' => locate_config_value(:bits),
|
167
|
+
}
|
168
|
+
params['isdynamicallyscalable'] = locate_config_value(:isdynamicallyscalable) if locate_config_value(:isdynamicallyscalable)
|
169
|
+
params['isextractable'] = locate_config_value(:isextractable) if locate_config_value(:isextractable)
|
170
|
+
params['ispublic'] = locate_config_value(:public) if locate_config_value(:public)
|
171
|
+
params['isfeatured'] = locate_config_value(:featured) if locate_config_value(:featured)
|
172
|
+
params['passwordenabled'] = locate_config_value(:passwordenabled) if locate_config_value(:passwordenabled)
|
173
|
+
params['sshkeyenabled'] = locate_config_value(:sshkeyenabled) if locate_config_value(:sshkeyenabled)
|
174
|
+
params['requireshvm'] = locate_config_value(:requireshvm) if locate_config_value(:requireshvm)
|
175
|
+
|
176
|
+
json = connection.send_request(params)
|
177
|
+
|
178
|
+
if ! json then
|
179
|
+
ui.error "Template #{templatename} not registered\n"
|
180
|
+
exit 1
|
181
|
+
end
|
182
|
+
|
183
|
+
print "TemplateId #{json['template'][0]['id']} is being created\n"
|
184
|
+
end
|
185
|
+
|
186
|
+
end # class
|
187
|
+
end
|