knife-cloudstack 0.0.15 → 0.0.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. data/CHANGES.rdoc +15 -0
  2. data/README.rdoc +18 -0
  3. data/lib/chef/knife/cs_aag_list.rb +58 -0
  4. data/lib/chef/knife/cs_account_list.rb +32 -75
  5. data/lib/chef/knife/cs_base.rb +2 -5
  6. data/lib/chef/knife/cs_baselist.rb +37 -7
  7. data/lib/chef/knife/cs_cluster_list.rb +18 -51
  8. data/lib/chef/knife/cs_config_list.rb +14 -43
  9. data/lib/chef/knife/cs_disk_list.rb +16 -47
  10. data/lib/chef/knife/cs_domain_list.rb +15 -45
  11. data/lib/chef/knife/cs_firewallrule_list.rb +19 -52
  12. data/lib/chef/knife/cs_host_list.rb +19 -53
  13. data/lib/chef/knife/cs_iso_list.rb +30 -44
  14. data/lib/chef/knife/cs_keypair_list.rb +12 -51
  15. data/lib/chef/knife/cs_network_list.rb +20 -51
  16. data/lib/chef/knife/cs_oscategory_list.rb +12 -40
  17. data/lib/chef/knife/cs_ostype_list.rb +15 -43
  18. data/lib/chef/knife/cs_pod_list.rb +18 -51
  19. data/lib/chef/knife/cs_project_list.rb +16 -45
  20. data/lib/chef/knife/cs_publicip_list.rb +16 -49
  21. data/lib/chef/knife/cs_router_list.rb +16 -46
  22. data/lib/chef/knife/cs_securitygroup_list.rb +14 -89
  23. data/lib/chef/knife/cs_server_add_nic.rb +109 -0
  24. data/lib/chef/knife/cs_server_create.rb +25 -5
  25. data/lib/chef/knife/cs_server_list.rb +35 -62
  26. data/lib/chef/knife/cs_server_remove_nic.rb +101 -0
  27. data/lib/chef/knife/cs_service_list.rb +19 -59
  28. data/lib/chef/knife/cs_stack_create.rb +2 -0
  29. data/lib/chef/knife/cs_template_list.rb +26 -55
  30. data/lib/chef/knife/cs_template_register.rb +4 -4
  31. data/lib/chef/knife/cs_user_list.rb +19 -50
  32. data/lib/chef/knife/cs_volume_list.rb +17 -46
  33. data/lib/chef/knife/cs_zone_list.rb +13 -57
  34. data/lib/knife-cloudstack/connection.rb +60 -9
  35. metadata +5 -3
data/CHANGES.rdoc CHANGED
@@ -1,5 +1,20 @@
1
1
  = Changes
2
2
 
3
+ == 2014-02-12 (0.0.16)
4
+ * Added support for --no-public-ip for <tt>cs server list</tt> (Sander Botman, 12 Feb 2014)
5
+ * Added support for secret and secret_file in <tt>cs server create</tt> (Jeremy Baumont, 10 Feb 2014)
6
+ * Bugfix: correction in isextractable on <tt>cs template register</tt> (Etharin, 30 Jan 2014
7
+ * Added support for private-ip in <tt>cs server create</tt> (Joaquim Dos Santos, 26 Jan 2014)
8
+ * Bugfix: Keypair support on stack create (Ben Langfeld, 29 Nov 2013)
9
+ * Bugfix: Bootstrap even without port_rules options (Ben Langfeld, 29 Nov 2013)
10
+ * Bugfix: Option to specify iso as template when deploying instance <tt>cs server create</tt> (Sander Botman, 28 Nov 2013)
11
+ * Restructure all list commands (Sander Botman, 28 Nov 2013)
12
+ * Added subcommand: <tt>cs aag list</tt> (John E. Vincent, 23 Nov 2013)
13
+ * Added support for anti-affinity groups in <tt>cs server create</tt> (John E. Vincent, 23 Nov 2013)
14
+ * Added subcommand: <tt>cs server add nic</tt> (John E. Vincent, 13 Nov 2014)
15
+ * Added Trademark (David Nalley, 08 Nov 2013)
16
+ * Bugfix: fixing server creation inside basic networks (Sander Botman, 07 Nov 2013)
17
+
3
18
  == 2013-11-04 (0.0.15)
4
19
  * Bugfix: fixed the proxy with the option: --cloudstack-proxy http://username:password@yourproxy:8080 or use config file. (Sander Botman, 04 Nov 2013)
5
20
  * Added subcommand: <tt>cs publicip list</tt> (Sander Botman, 03 Nov 2013)
data/README.rdoc CHANGED
@@ -1,5 +1,8 @@
1
1
  = knife-cloudstack
2
2
 
3
+ {<img src="https://codeclimate.com/github/CloudStack-extras/knife-cloudstack.png" />}[https://codeclimate.com/github/CloudStack-extras/knife-cloudstack]
4
+ {<img src="https://gemnasium.com/CloudStack-extras/knife-cloudstack.png" alt="Dependency Status" />}[https://gemnasium.com/CloudStack-extras/knife-cloudstack]
5
+
3
6
  == DESCRIPTION:
4
7
 
5
8
  This is the Edmunds Knife plugin for CloudStack. This plugin gives Knife the ability to create, bootstrap and manage
@@ -72,6 +75,12 @@ VM provided with <tt>--no-bootstrap</tt> option have no forwarded ports or forwa
72
75
 
73
76
  By default, new servers are allocated a public IP address mapping to the CloudStack private IP address. If you do not want this behavior, pass the <tt>--no-public-ip</tt> option.
74
77
 
78
+ Forcing cloustack to reserve and use a certain private ipv4 address when deploying an instance inside an advanced zone is possible by passing <option>--private-ip</option> followed by the intended ipv4 address. Ip Address must be contained within the network mask of the isolated network, of course.
79
+
80
+ Example: knife cs server create testvm --private-ip 192.168.1.1 --networks mynetwork
81
+
82
+ Here mynetwork must have a network mask for example like 192.168.1.0/24.
83
+
75
84
  ==== Port forwarding rules for virtual networks
76
85
  The <tt>--port-rules</tt> option takes a comma separated list of port forwarding rules. These rules are created on the
77
86
  virtual public ip address of the server. Note that this option only applies to servers using a virtual network; it is
@@ -405,3 +414,12 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
405
414
  See the License for the specific language governing permissions and
406
415
  limitations under the License.
407
416
 
417
+ == Trademark Attribution
418
+
419
+ knife is a trademark of Opscode
420
+
421
+ CloudStack is a trademark or registered trademark of The Apache Software Foundation
422
+
423
+ The use of these marks is nominative in describing the function and integration of
424
+ this software and does not imply endorsement by Opscode, the Apache Software Foundation,
425
+ or Apache CloudStack.
@@ -0,0 +1,58 @@
1
+ #
2
+ # 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/cs_baselist'
21
+
22
+ module KnifeCloudstack
23
+ class CsAagList < Chef::Knife
24
+
25
+ include Chef::Knife::KnifeCloudstackBaseList
26
+
27
+ banner "knife cs 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
@@ -16,20 +16,14 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- require 'chef/knife/cs_base'
19
+ require 'chef/knife'
20
20
  require 'chef/knife/cs_baselist'
21
21
 
22
22
  module KnifeCloudstack
23
23
  class CsAccountList < Chef::Knife
24
24
 
25
- include Chef::Knife::KnifeCloudstackBase
26
25
  include Chef::Knife::KnifeCloudstackBaseList
27
26
 
28
- deps do
29
- require 'knife-cloudstack/connection'
30
- Chef::Knife::Bootstrap.load_deps
31
- end
32
-
33
27
  banner "knife cs account list (options)"
34
28
 
35
29
  option :listall,
@@ -48,82 +42,45 @@ module KnifeCloudstack
48
42
  def run
49
43
  validate_base_options
50
44
 
51
- if locate_config_value(:fields)
52
- object_list = []
53
- locate_config_value(:fields).split(',').each { |n| object_list << ui.color(("#{n}").strip, :bold) }
45
+ if locate_config_value(:cloudstack_project)
46
+ columns = [
47
+ 'Account :account',
48
+ 'Domain :domain',
49
+ 'Type :accounttype',
50
+ 'Role :role',
51
+ 'Users :user'
52
+ ]
53
+ params = { 'command' => "listProjectAccounts" }
54
54
  else
55
- if locate_config_value(:cloudstack_project)
56
- object_list = [
57
- ui.color('Account', :bold),
58
- ui.color('Domain', :bold),
59
- ui.color('Type', :bold),
60
- ui.color('Role', :bold),
61
- ui.color('Users', :bold)
62
- ]
63
- else
64
- object_list = [
65
- ui.color('Name', :bold),
66
- ui.color('Domain', :bold),
67
- ui.color('State', :bold),
68
- ui.color('Type', :bold),
69
- ui.color('Users', :bold)
70
- ]
71
- end
55
+ columns = [
56
+ 'Name :name',
57
+ 'Domain :domain',
58
+ 'State :state',
59
+ 'Type :accounttype',
60
+ 'Users :user'
61
+ ]
62
+ params = { 'command' => "listAccounts" }
72
63
  end
73
64
 
74
- columns = object_list.count
75
- object_list = [] if locate_config_value(:noheader)
76
-
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
+
77
70
  if locate_config_value(:cloudstack_project)
78
- api_command = "listProjectAccounts"
79
- api_result = "projectaccount"
71
+ result = connection.list_object(params, "projectaccount")
80
72
  else
81
- api_command = "listAccounts"
82
- api_result = "account"
73
+ result = connection.list_object(params, "account")
83
74
  end
84
75
 
85
- connection_result = connection.list_object(
86
- api_command,
87
- api_result,
88
- locate_config_value(:filter),
89
- locate_config_value(:listall),
90
- locate_config_value(:keyword),
91
- locate_config_value(:name)
92
- )
93
-
94
- output_format(connection_result)
95
-
96
- connection_result.each do |r|
97
- if locate_config_value(:fields)
98
- locate_config_value(:fields).downcase.split(',').each { |n| object_list << ((r[("#{n}").strip]).to_s || 'N/A') }
99
- else
100
- if locate_config_value(:cloudstack_project)
101
- object_list << r['account'].to_s
102
- object_list << r['domain'].to_s
103
- case r['accounttype']
104
- when 0 then object_list << "User"
105
- when 1 then object_list << "Admin"
106
- when 2 then object_list << "Domain Admin"
107
- else object_list << "unknown"
108
- end
109
- object_list << r['role'].to_s
110
- object_list << r['user'].count.to_s
111
- else
112
- object_list << r['name'].to_s
113
- object_list << r['domain'].to_s
114
- object_list << r['state'].to_s
115
- case r['accounttype']
116
- when 0 then object_list << "User"
117
- when 1 then object_list << "Admin"
118
- when 2 then object_list << "Domain Admin"
119
- else object_list << "unknown"
120
- end
121
- object_list << r['user'].count.to_s
122
- end
123
- end
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']
124
81
  end
125
- puts ui.list(object_list, :uneven_columns_across, columns)
126
- list_object_fields(connection_result) if locate_config_value(:fieldlist)
82
+
83
+ list_object(columns, result)
127
84
  end
128
85
 
129
86
  end
@@ -16,8 +16,6 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- require 'chef/knife'
20
-
21
19
  class Chef
22
20
  class Knife
23
21
  module KnifeCloudstackBase
@@ -26,8 +24,7 @@ class Chef
26
24
  includer.class_eval do
27
25
 
28
26
  deps do
29
- require 'readline'
30
- require 'chef/json_compat'
27
+ require 'knife-cloudstack/connection'
31
28
  end
32
29
 
33
30
  option :cloudstack_url,
@@ -92,7 +89,7 @@ class Chef
92
89
 
93
90
  def locate_config_value(key)
94
91
  key = key.to_sym
95
- config[key] || Chef::Config[:knife][key]
92
+ config[key] || Chef::Config[:knife][key] || nil
96
93
  end
97
94
 
98
95
  end
@@ -17,7 +17,7 @@
17
17
  #
18
18
 
19
19
  require 'json'
20
- require 'chef/knife'
20
+ require 'chef/knife/cs_base'
21
21
 
22
22
  class Chef
23
23
  class Knife
@@ -25,6 +25,7 @@ class Chef
25
25
 
26
26
  def self.included(includer)
27
27
  includer.class_eval do
28
+ include Chef::Knife::KnifeCloudstackBase
28
29
 
29
30
  option :filter,
30
31
  :long => "--filter 'FIELD:NAME'",
@@ -47,10 +48,10 @@ class Chef
47
48
  end
48
49
 
49
50
  def output_format(json)
50
- if locate_config_value(:format) =~ /json/i
51
- json_hash = {};
52
- json.each { |k| json_hash.merge!( k['id'] => k) }
53
- puts JSON.pretty_generate(json_hash)
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)
54
55
  exit 0
55
56
  end
56
57
  end
@@ -66,7 +67,9 @@ class Chef
66
67
  object.first.sort.each do |k,v|
67
68
  object_fields << ui.color(k, :yellow, :bold)
68
69
  object_fields << v.class.to_s
69
- if v.kind_of?(Array)
70
+ if v.kind_of?(Hash)
71
+ object_fields << '<Hash>'
72
+ elsif v.kind_of?(Array)
70
73
  object_fields << '<Array>'
71
74
  else
72
75
  object_fields << ("#{v}").strip.to_s
@@ -75,7 +78,34 @@ class Chef
75
78
  puts "\n"
76
79
  puts ui.list(object_fields, :uneven_columns_across, 3)
77
80
  end
78
-
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
+
79
109
  end
80
110
  end
81
111
  end
@@ -16,20 +16,14 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- require 'chef/knife/cs_base'
19
+ require 'chef/knife'
20
20
  require 'chef/knife/cs_baselist'
21
21
 
22
22
  module KnifeCloudstack
23
23
  class CsClusterList < Chef::Knife
24
24
 
25
- include Chef::Knife::KnifeCloudstackBase
26
25
  include Chef::Knife::KnifeCloudstackBaseList
27
26
 
28
- deps do
29
- require 'knife-cloudstack/connection'
30
- Chef::Knife.load_deps
31
- end
32
-
33
27
  banner "knife cs cluster list (options)"
34
28
 
35
29
  option :name,
@@ -43,50 +37,23 @@ module KnifeCloudstack
43
37
  def run
44
38
  validate_base_options
45
39
 
46
- if locate_config_value(:fields)
47
- object_list = []
48
- locate_config_value(:fields).split(',').each { |n| object_list << ui.color(("#{n}").strip, :bold) }
49
- else
50
- object_list = [
51
- ui.color('Name', :bold),
52
- ui.color('Pod', :bold),
53
- ui.color('Zone', :bold),
54
- ui.color('HypervisorType', :bold),
55
- ui.color('ClusterType', :bold),
56
- ui.color('AllocationState', :bold),
57
- ui.color('ManagedState', :bold)
58
- ]
59
- end
60
-
61
- columns = object_list.count
62
- object_list = [] if locate_config_value(:noheader)
63
-
64
- connection_result = connection.list_object(
65
- "listClusters",
66
- "cluster",
67
- locate_config_value(:filter),
68
- false,
69
- locate_config_value(:keyword),
70
- locate_config_value(:name)
71
- )
72
-
73
- output_format(connection_result)
74
-
75
- connection_result.each do |r|
76
- if locate_config_value(:fields)
77
- locate_config_value(:fields).downcase.split(',').each { |n| object_list << ((r[("#{n}").strip]).to_s || 'N/A') }
78
- else
79
- object_list << r['name'].to_s
80
- object_list << r['podname'].to_s
81
- object_list << r['zonename'].to_s
82
- object_list << r['hypervisortype'].to_s
83
- object_list << r['clustertype'].to_s
84
- object_list << r['allocationstate'].to_s
85
- object_list << r['managedstate'].to_s
86
- end
87
- end
88
- puts ui.list(object_list, :uneven_columns_across, columns)
89
- list_object_fields(connection_result) if locate_config_value(:fieldlist)
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)
90
57
  end
91
58
 
92
59
  end
@@ -16,20 +16,14 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- require 'chef/knife/cs_base'
19
+ require 'chef/knife'
20
20
  require 'chef/knife/cs_baselist'
21
21
 
22
22
  module KnifeCloudstack
23
23
  class CsConfigList < Chef::Knife
24
24
 
25
- include Chef::Knife::KnifeCloudstackBase
26
25
  include Chef::Knife::KnifeCloudstackBaseList
27
26
 
28
- deps do
29
- require 'knife-cloudstack/connection'
30
- Chef::Knife.load_deps
31
- end
32
-
33
27
  banner "knife cs config list (options)"
34
28
 
35
29
  option :name,
@@ -43,42 +37,19 @@ module KnifeCloudstack
43
37
  def run
44
38
  validate_base_options
45
39
 
46
- if locate_config_value(:fields)
47
- object_list = []
48
- locate_config_value(:fields).split(',').each { |n| object_list << ui.color(("#{n}").strip, :bold) }
49
- else
50
- object_list = [
51
- ui.color('Category', :bold),
52
- ui.color('Name', :bold),
53
- ui.color('Value', :bold)
54
- ]
55
- end
56
-
57
- columns = object_list.count
58
- object_list = [] if locate_config_value(:noheader)
59
-
60
- connection_result = connection.list_object(
61
- "listConfigurations",
62
- "configuration",
63
- locate_config_value(:filter),
64
- false,
65
- locate_config_value(:keyword),
66
- locate_config_value(:name)
67
- )
68
-
69
- output_format(connection_result)
70
-
71
- connection_result.each do |r|
72
- if locate_config_value(:fields)
73
- locate_config_value(:fields).downcase.split(',').each { |n| object_list << ((r[("#{n}").strip]).to_s || 'N/A') }
74
- else
75
- object_list << r['category'].to_s
76
- object_list << r['name'].to_s
77
- object_list << r['value'].to_s
78
- end
79
- end
80
- puts ui.list(object_list, :uneven_columns_across, columns)
81
- list_object_fields(connection_result) if locate_config_value(:fieldlist)
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)
82
53
  end
83
54
 
84
55
  end
@@ -16,20 +16,14 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
- require 'chef/knife/cs_base'
19
+ require 'chef/knife'
20
20
  require 'chef/knife/cs_baselist'
21
21
 
22
22
  module KnifeCloudstack
23
23
  class CsDiskList < Chef::Knife
24
24
 
25
- include Chef::Knife::KnifeCloudstackBase
26
25
  include Chef::Knife::KnifeCloudstackBaseList
27
26
 
28
- deps do
29
- require 'knife-cloudstack/connection'
30
- Chef::Knife.load_deps
31
- end
32
-
33
27
  banner "knife cs disk list (options)"
34
28
 
35
29
  option :name,
@@ -43,46 +37,21 @@ module KnifeCloudstack
43
37
  def run
44
38
  validate_base_options
45
39
 
46
- if locate_config_value(:fields)
47
- object_list = []
48
- locate_config_value(:fields).split(',').each { |n| object_list << ui.color(("#{n}").strip, :bold) }
49
- else
50
- object_list = [
51
- ui.color('Name', :bold),
52
- ui.color('Domain', :bold),
53
- ui.color('Size', :bold),
54
- ui.color('Comment', :bold),
55
- ui.color('Created', :bold)
56
- ]
57
- end
58
-
59
- columns = object_list.count
60
- object_list = [] if locate_config_value(:noheader)
61
-
62
- connection_result = connection.list_object(
63
- "listDiskOfferings",
64
- "diskoffering",
65
- locate_config_value(:filter),
66
- false,
67
- locate_config_value(:keyword),
68
- locate_config_value(:name)
69
- )
70
-
71
- output_format(connection_result)
72
-
73
- connection_result.each do |r|
74
- if locate_config_value(:fields)
75
- locate_config_value(:fields).downcase.split(',').each { |n| object_list << ((r[("#{n}").strip]).to_s || 'N/A') }
76
- else
77
- object_list << r['name'].to_s
78
- object_list << r['domain'].to_s
79
- object_list << r['disksize'].to_s + 'GB'
80
- object_list << r['displaytext'].to_s
81
- object_list << r['created']
82
- end
83
- end
84
- puts ui.list(object_list, :uneven_columns_across, columns)
85
- list_object_fields(connection_result) if locate_config_value(:fieldlist)
40
+ columns = [
41
+ 'Name :name',
42
+ 'Domain :domain',
43
+ 'Size :disksize',
44
+ 'Comment :displaytext',
45
+ 'Created :created'
46
+ ]
47
+
48
+ params = { 'command' => "listDiskOfferings" }
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, "diskoffering")
54
+ list_object(columns, result)
86
55
  end
87
56
 
88
57
  end