knife-cosmic 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES.rdoc +186 -0
  3. data/LICENSE +202 -0
  4. data/README.rdoc +427 -0
  5. data/lib/chef/knife/cosmic_aag_list.rb +58 -0
  6. data/lib/chef/knife/cosmic_account_list.rb +87 -0
  7. data/lib/chef/knife/cosmic_base.rb +108 -0
  8. data/lib/chef/knife/cosmic_baselist.rb +111 -0
  9. data/lib/chef/knife/cosmic_cluster_list.rb +60 -0
  10. data/lib/chef/knife/cosmic_config_list.rb +56 -0
  11. data/lib/chef/knife/cosmic_disk_list.rb +58 -0
  12. data/lib/chef/knife/cosmic_domain_list.rb +53 -0
  13. data/lib/chef/knife/cosmic_firewallrule_create.rb +138 -0
  14. data/lib/chef/knife/cosmic_firewallrule_list.rb +62 -0
  15. data/lib/chef/knife/cosmic_forwardrule_create.rb +145 -0
  16. data/lib/chef/knife/cosmic_host_list.rb +61 -0
  17. data/lib/chef/knife/cosmic_hosts.rb +58 -0
  18. data/lib/chef/knife/cosmic_iso_list.rb +89 -0
  19. data/lib/chef/knife/cosmic_keypair_create.rb +72 -0
  20. data/lib/chef/knife/cosmic_keypair_delete.rb +60 -0
  21. data/lib/chef/knife/cosmic_keypair_list.rb +44 -0
  22. data/lib/chef/knife/cosmic_network_list.rb +63 -0
  23. data/lib/chef/knife/cosmic_oscategory_list.rb +50 -0
  24. data/lib/chef/knife/cosmic_ostype_list.rb +52 -0
  25. data/lib/chef/knife/cosmic_pod_list.rb +60 -0
  26. data/lib/chef/knife/cosmic_project_list.rb +63 -0
  27. data/lib/chef/knife/cosmic_publicip_list.rb +55 -0
  28. data/lib/chef/knife/cosmic_router_list.rb +64 -0
  29. data/lib/chef/knife/cosmic_securitygroup_list.rb +59 -0
  30. data/lib/chef/knife/cosmic_server_add_nic.rb +109 -0
  31. data/lib/chef/knife/cosmic_server_create.rb +674 -0
  32. data/lib/chef/knife/cosmic_server_delete.rb +153 -0
  33. data/lib/chef/knife/cosmic_server_list.rb +167 -0
  34. data/lib/chef/knife/cosmic_server_passwordreset.rb +91 -0
  35. data/lib/chef/knife/cosmic_server_reboot.rb +99 -0
  36. data/lib/chef/knife/cosmic_server_remove_nic.rb +101 -0
  37. data/lib/chef/knife/cosmic_server_start.rb +104 -0
  38. data/lib/chef/knife/cosmic_server_stop.rb +118 -0
  39. data/lib/chef/knife/cosmic_server_update.rb +47 -0
  40. data/lib/chef/knife/cosmic_service_list.rb +74 -0
  41. data/lib/chef/knife/cosmic_stack_create.rb +298 -0
  42. data/lib/chef/knife/cosmic_stack_delete.rb +79 -0
  43. data/lib/chef/knife/cosmic_template_create.rb +129 -0
  44. data/lib/chef/knife/cosmic_template_extract.rb +104 -0
  45. data/lib/chef/knife/cosmic_template_list.rb +88 -0
  46. data/lib/chef/knife/cosmic_template_register.rb +187 -0
  47. data/lib/chef/knife/cosmic_user_list.rb +62 -0
  48. data/lib/chef/knife/cosmic_volume_attach.rb +70 -0
  49. data/lib/chef/knife/cosmic_volume_create.rb +108 -0
  50. data/lib/chef/knife/cosmic_volume_delete.rb +97 -0
  51. data/lib/chef/knife/cosmic_volume_detach.rb +61 -0
  52. data/lib/chef/knife/cosmic_volume_list.rb +77 -0
  53. data/lib/chef/knife/cosmic_zone_list.rb +53 -0
  54. data/lib/knife-cosmic/connection.rb +1046 -0
  55. metadata +127 -0
@@ -0,0 +1,58 @@
1
+ #
2
+ # Original knife-cloudstack author:: John E. Vincent (<lusis.org+github.com@gmail.com>)
3
+ # Copyright:: Copyright (c) 2013 John E. Vincent.
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'
20
+ require 'chef/knife/cosmic_baselist'
21
+
22
+ module Knifecosmic
23
+ class CosmicAagList < Chef::Knife
24
+
25
+ include Chef::Knife::KnifecosmicBaseList
26
+
27
+ banner "knife cosmic aag list (options)"
28
+
29
+ option :name,
30
+ :long => "--name NAME",
31
+ :description => "Specify aag name to list"
32
+
33
+ option :keyword,
34
+ :long => "--service NAME",
35
+ :description => "Specify part of aag name to list"
36
+
37
+ def run
38
+ validate_base_options
39
+
40
+ columns = [
41
+ 'Name :name',
42
+ 'Domain :domain',
43
+ 'Type :type',
44
+ 'Description :description',
45
+ 'Id :id'
46
+ ]
47
+
48
+ params = { 'command' => "listAffinityGroups" }
49
+ params['filter'] = locate_config_value(:filter) if locate_config_value(:filter)
50
+ params['keyword'] = locate_config_value(:keyword) if locate_config_value(:keyword)
51
+ params['name'] = locate_config_value(:name) if locate_config_value(:name)
52
+
53
+ result = connection.list_object(params, "affinitygroup")
54
+ list_object(columns, result)
55
+ end
56
+
57
+ end
58
+ end
@@ -0,0 +1,87 @@
1
+ #
2
+ # Original knife-cloudstack author:: Sander Botman (<sbotman@schubergphilis.com>)
3
+ # Copyright:: Copyright (c) 2013 Sander Botman.
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'
20
+ require 'chef/knife/cosmic_baselist'
21
+
22
+ module Knifecosmic
23
+ class CosmicAccountList < Chef::Knife
24
+
25
+ include Chef::Knife::KnifecosmicBaseList
26
+
27
+ banner "knife cosmic account list (options)"
28
+
29
+ option :listall,
30
+ :long => "--listall",
31
+ :description => "List all the accounts",
32
+ :boolean => true
33
+
34
+ option :name,
35
+ :long => "--name NAME",
36
+ :description => "Specify account name to list"
37
+
38
+ option :keyword,
39
+ :long => "--keyword KEY",
40
+ :description => "List by keyword"
41
+
42
+ def run
43
+ validate_base_options
44
+
45
+ if locate_config_value(:cosmic_project)
46
+ columns = [
47
+ 'Account :account',
48
+ 'Domain :domain',
49
+ 'Type :accounttype',
50
+ 'Role :role',
51
+ 'Users :user'
52
+ ]
53
+ params = { 'command' => "listProjectAccounts" }
54
+ else
55
+ columns = [
56
+ 'Name :name',
57
+ 'Domain :domain',
58
+ 'State :state',
59
+ 'Type :accounttype',
60
+ 'Users :user'
61
+ ]
62
+ params = { 'command' => "listAccounts" }
63
+ end
64
+
65
+ params['filter'] = locate_config_value(:filter) if locate_config_value(:filter)
66
+ params['listall'] = locate_config_value(:listall) if locate_config_value(:listall)
67
+ params['keyword'] = locate_config_value(:keyword) if locate_config_value(:keyword)
68
+ params['name'] = locate_config_value(:name) if locate_config_value(:name)
69
+
70
+ if locate_config_value(:cosmic_project)
71
+ result = connection.list_object(params, "projectaccount")
72
+ else
73
+ result = connection.list_object(params, "account")
74
+ end
75
+
76
+ result.each do |r|
77
+ r['accounttype'] = 'User' if r['accounttype'] == 0
78
+ r['accounttype'] = 'Admin' if r['accounttype'] == 1
79
+ r['accounttype'] = 'Domain Admin' if r['accounttype'] == 2
80
+ r['user'] = r['user'].count if r['user']
81
+ end
82
+
83
+ list_object(columns, result)
84
+ end
85
+
86
+ end
87
+ end
@@ -0,0 +1,108 @@
1
+ #
2
+ # Original knife-cloudstack author:: Sander Botman (<sbotman@schubergphilis.com>)
3
+ # Copyright:: Copyright (c) 2013 Sander Botman.
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 KnifecosmicBase
22
+
23
+ def self.included(includer)
24
+ includer.class_eval do
25
+
26
+ deps do
27
+ require 'knife-cosmic/connection'
28
+ end
29
+
30
+ option :cosmic_url,
31
+ :short => "-U URL",
32
+ :long => "--cosmic-url URL",
33
+ :description => "The cosmic endpoint URL",
34
+ :proc => Proc.new { |url| Chef::Config[:knife][:cosmic_url] = url }
35
+
36
+ option :cosmic_api_key,
37
+ :short => "-A KEY",
38
+ :long => "--cosmic-api-key KEY",
39
+ :description => "Your cosmic API key",
40
+ :proc => Proc.new { |key| Chef::Config[:knife][:cosmic_api_key] = key }
41
+
42
+ option :cosmic_secret_key,
43
+ :short => "-K SECRET",
44
+ :long => "--cosmic-secret-key SECRET",
45
+ :description => "Your cosmic secret key",
46
+ :proc => Proc.new { |key| Chef::Config[:knife][:cosmic_secret_key] = key }
47
+
48
+ option :cosmic_project,
49
+ :short => "-P PROJECT_NAME",
50
+ :long => '--cosmic-project PROJECT_NAME',
51
+ :description => "cosmic Project in which to create server",
52
+ :proc => Proc.new { |v| Chef::Config[:knife][:cosmic_project] = v },
53
+ :default => nil
54
+
55
+ option :cosmic_no_ssl_verify,
56
+ :long => '--cosmic-no-ssl-verify',
57
+ :description => "Disable certificate verify on SSL",
58
+ :boolean => true
59
+
60
+ option :cosmic_proxy,
61
+ :long => '--cosmic-proxy PROXY',
62
+ :description => "Enable proxy configuration for cosmic api access"
63
+
64
+ def validate_base_options
65
+ unless locate_config_value :cosmic_url
66
+ ui.error "cosmic URL not specified"
67
+ exit 1
68
+ end
69
+ unless locate_config_value :cosmic_api_key
70
+ ui.error "cosmic API key not specified"
71
+ exit 1
72
+ end
73
+ unless locate_config_value :cosmic_secret_key
74
+ ui.error "cosmic Secret key not specified"
75
+ exit 1
76
+ end
77
+ end
78
+
79
+ def connection
80
+ @connection ||= CosmicClient::Connection.new(
81
+ locate_config_value(:cosmic_url),
82
+ locate_config_value(:cosmic_api_key),
83
+ locate_config_value(:cosmic_secret_key),
84
+ locate_config_value(:cosmic_project),
85
+ locate_config_value(:cosmic_no_ssl_verify),
86
+ locate_config_value(:cosmic_proxy)
87
+ )
88
+ end
89
+
90
+ def locate_config_value(key)
91
+ key = key.to_sym
92
+ config[key] || Chef::Config[:knife][key] || nil
93
+ end
94
+
95
+ def exit_with_error(error)
96
+ ui.error error
97
+ exit 1
98
+ end
99
+
100
+ def valid_cosmic_name?(name)
101
+ !!(name && /^[a-zA-Z0-9][a-zA-Z0-9_\-#]*$/.match(name))
102
+ end
103
+
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,111 @@
1
+ #
2
+ # Original knife-cloudstack author:: Sander Botman (<sbotman@schubergphilis.com>)
3
+ # Copyright:: Copyright (c) 2013 Sander Botman.
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 'json'
20
+ require 'chef/knife/cosmic_base'
21
+
22
+ class Chef
23
+ class Knife
24
+ module KnifecosmicBaseList
25
+
26
+ def self.included(includer)
27
+ includer.class_eval do
28
+ include Chef::Knife::KnifecosmicBase
29
+
30
+ option :filter,
31
+ :long => "--filter 'FIELD:NAME'",
32
+ :description => "Specify field and part of name to list"
33
+
34
+ option :fields,
35
+ :long => "--fields 'NAME, NAME'",
36
+ :description => "The fields to output, comma-separated"
37
+
38
+ option :fieldlist,
39
+ :long => "--fieldlist",
40
+ :description => "The available fields to output/filter",
41
+ :boolean => true
42
+
43
+ option :noheader,
44
+ :long => "--noheader",
45
+ :description => "Removes header from output",
46
+ :boolean => true
47
+ end
48
+ end
49
+
50
+ def output_format(json)
51
+ if locate_config_value(:format) =~ /^j/i
52
+ json_hash = {};
53
+ json.each { |k| json_hash.merge!( k['id'] => k) }
54
+ puts JSON.pretty_generate(json_hash)
55
+ exit 0
56
+ end
57
+ end
58
+
59
+ def list_object_fields(object)
60
+ exit 1 if object.nil? || object.empty?
61
+ object_fields = [
62
+ ui.color('Key', :bold),
63
+ ui.color('Type', :bold),
64
+ ui.color('Value', :bold)
65
+ ]
66
+
67
+ object.first.sort.each do |k,v|
68
+ object_fields << ui.color(k, :yellow, :bold)
69
+ object_fields << v.class.to_s
70
+ if v.kind_of?(Hash)
71
+ object_fields << '<Hash>'
72
+ elsif v.kind_of?(Array)
73
+ object_fields << '<Array>'
74
+ else
75
+ object_fields << ("#{v}").strip.to_s
76
+ end
77
+ end
78
+ puts "\n"
79
+ puts ui.list(object_fields, :uneven_columns_across, 3)
80
+ end
81
+
82
+ def list_object(columns, object)
83
+
84
+ output_format(object)
85
+ object_list = []
86
+ if locate_config_value(:fields)
87
+ locate_config_value(:fields).split(',').each { |n| object_list << ui.color(("#{n}").strip, :bold) }
88
+ else
89
+ columns.each do |column|
90
+ n = (column.split(':').first).strip
91
+ object_list << (ui.color("#{n}", :bold) || 'N/A')
92
+ end
93
+ end
94
+
95
+ n_columns = object_list.count
96
+ object_list = [] if locate_config_value(:noheader)
97
+
98
+ object.each do |r|
99
+ if locate_config_value(:fields)
100
+ locate_config_value(:fields).downcase.split(',').each { |n| object_list << ((r[("#{n}").strip]).to_s || 'N/A') }
101
+ else
102
+ columns.each { |column| object_list << (r["#{column.split(':').last.strip}"].to_s || 'N/A') }
103
+ end
104
+ end
105
+ puts ui.list(object_list, :uneven_columns_across, n_columns)
106
+ list_object_fields(object) if locate_config_value(:fieldlist)
107
+ end
108
+
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,60 @@
1
+ #
2
+ # Original knife-cloudstack author:: Sander Botman (<sbotman@schubergphilis.com>)
3
+ # Copyright:: Copyright (c) 2013 Sander Botman.
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'
20
+ require 'chef/knife/cosmic_baselist'
21
+
22
+ module Knifecosmic
23
+ class CosmicClusterList < Chef::Knife
24
+
25
+ include Chef::Knife::KnifecosmicBaseList
26
+
27
+ banner "knife cosmic cluster list (options)"
28
+
29
+ option :name,
30
+ :long => "--name NAME",
31
+ :description => "Specify cluster name to list"
32
+
33
+ option :keyword,
34
+ :long => "--keyword KEY",
35
+ :description => "List by keyword"
36
+
37
+ def run
38
+ validate_base_options
39
+
40
+ columns = [
41
+ 'Name :name',
42
+ 'Pod :podname',
43
+ 'Zone :zonename',
44
+ 'HypervizorType :hypervisortype',
45
+ 'ClusterType :clustertype',
46
+ 'AllocationState :allocationstate',
47
+ 'ManagedState :managedstate'
48
+ ]
49
+
50
+ params = { 'command' => "listClusters" }
51
+ params['filter'] = locate_config_value(:filter) if locate_config_value(:filter)
52
+ params['keyword'] = locate_config_value(:keyword) if locate_config_value(:keyword)
53
+ params['name'] = locate_config_value(:name) if locate_config_value(:name)
54
+
55
+ result = connection.list_object(params, "cluster")
56
+ list_object(columns, result)
57
+ end
58
+
59
+ end
60
+ end
@@ -0,0 +1,56 @@
1
+ #
2
+ # Original knife-cloudstack author:: Sander Botman (<sbotman@schubergphilis.com>)
3
+ # Copyright:: Copyright (c) 2013 Sander Botman.
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'
20
+ require 'chef/knife/cosmic_baselist'
21
+
22
+ module Knifecosmic
23
+ class CosmicConfigList < Chef::Knife
24
+
25
+ include Chef::Knife::KnifecosmicBaseList
26
+
27
+ banner "knife cosmic config list (options)"
28
+
29
+ option :name,
30
+ :long => "--name NAME",
31
+ :description => "Specify router name to list"
32
+
33
+ option :keyword,
34
+ :long => "--keyword KEY",
35
+ :description => "List by keyword"
36
+
37
+ def run
38
+ validate_base_options
39
+
40
+ columns = [
41
+ 'Category :category',
42
+ 'Name :name',
43
+ 'Value :value'
44
+ ]
45
+
46
+ params = { 'command' => "listConfigurations" }
47
+ params['filter'] = locate_config_value(:filter) if locate_config_value(:filter)
48
+ params['keyword'] = locate_config_value(:keyword) if locate_config_value(:keyword)
49
+ params['name'] = locate_config_value(:name) if locate_config_value(:name)
50
+
51
+ result = connection.list_object(params, "configuration")
52
+ list_object(columns, result)
53
+ end
54
+
55
+ end
56
+ end