opennebula-cli 5.3.80.beta1 → 5.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e15bbf71c016c51a6c4d926c42e0b1dd4f5f49f8
4
- data.tar.gz: fcd4ffdb5d5f25300f2b652ff1ad082ee45d0c3e
3
+ metadata.gz: 8548f70bb2a40ff7eea3a067c31d288e412ad206
4
+ data.tar.gz: 5a869b56b4726a7c875922741f94fabd703f7eeb
5
5
  SHA512:
6
- metadata.gz: 22f98b03d7880441572a20e1236c4975357031a645854d9ab441fa3c177cefa0d5152ab0d0ca9cd8ea58b4e2158e5efa9343a1279595f4473ec591911be38827
7
- data.tar.gz: 83b293f1adac28bf9e75102e49968eebbf50b45c0be4aa1f7ed5f28fc0a6954b9befe4b48eba9f66d5eabce74b84dc4ae2863e12ebb7c91775c055e28cfb805f
6
+ metadata.gz: 429fa23813dfdf1d8374bcd5448aff4692284040b0148d00dacf491f7520ed8bda4f454a8aa4e4476c513184acf1505f076e76f4720920a7d3203cb91d5f9fbc
7
+ data.tar.gz: 639c78f877b042775a9c5b7baa493f0efda0314572293358f35292076b53f4fe80f204cb526b7fb8436b35acabde32e819ba9f87478030396fdac92fedac23ab
data/bin/onehost CHANGED
@@ -79,21 +79,15 @@ cmd=CommandParser::CmdParser.new(ARGV) do
79
79
  " rsync command must be installed in the frontend and nodes."
80
80
  }
81
81
 
82
- EC2_ACCESS = {
83
- :name => "ec2access",
84
- :large => "--ec2access id",
85
- :description => "Set the id access for EC2 Driver",
82
+ TYPE = {
83
+ :name => "type",
84
+ :short => "-t remote_provider",
85
+ :large => "--type remote_provider",
86
+ :description => "Use type to create a host using Cloud Bursting ",
86
87
  :format => String
87
88
  }
88
89
 
89
- EC2_SECRET = {
90
- :name => "ec2secret",
91
- :large => "--ec2secret key",
92
- :description => "Set the secret key for EC2 Driver",
93
- :format => String
94
- }
95
-
96
- CREAT_OPTIONS = [ IM, VMM, OneClusterHelper::CLUSTER, EC2_ACCESS, EC2_SECRET ]
90
+ CREAT_OPTIONS = [ IM, VMM, OneClusterHelper::CLUSTER, TYPE ]
97
91
  SYNC_OPTIONS = [ OneClusterHelper::CLUSTER, FORCE, RSYNC ]
98
92
 
99
93
  ########################################################################
@@ -116,7 +110,7 @@ cmd=CommandParser::CmdParser.new(ARGV) do
116
110
  Creates a new Host
117
111
  EOT
118
112
 
119
- command :create, create_desc, :hostname, :options=>CREAT_OPTIONS do
113
+ command :create, create_desc, :hostname, [:file, nil], :options=>CREAT_OPTIONS do
120
114
  if options[:im].nil? || options[:vm].nil?
121
115
  STDERR.puts "Drivers are mandatory to create a host:"
122
116
  STDERR.puts "\t -i information driver"
@@ -124,20 +118,15 @@ cmd=CommandParser::CmdParser.new(ARGV) do
124
118
  exit -1
125
119
  end
126
120
 
127
- ec2_host = !options[:ec2access].nil? && !options[:ec2secret].nil?
128
-
129
121
  cid = options[:cluster] || ClusterPool::NONE_CLUSTER_ID
130
122
  helper.create_resource(options) do |host|
131
- rc = host.allocate(args[0], options[:im], options[:vm], cid)
132
-
133
- if ec2_host && !OpenNebula.is_error?(rc)
134
- template = "EC2_ACCESS=\"#{options[:ec2access]}\"\n"\
135
- "EC2_SECRET=\"#{options[:ec2secret]}\"\n"\
136
-
137
- rc = host.update(template, true)
138
- end
123
+ if !options[:type].nil?
124
+ str = helper.set_hybrid(options[:type], args[1])
125
+ end
126
+ rc = host.allocate(args[0], options[:im], options[:vm], cid)
127
+ host.update(str, true) if !OpenNebula.is_error?(rc) && !options[:type].nil?
139
128
 
140
- rc
129
+ rc
141
130
  end
142
131
  end
143
132
 
data/bin/oneuser CHANGED
@@ -33,14 +33,26 @@ require 'one_helper/onequota_helper'
33
33
 
34
34
  require 'uri'
35
35
 
36
- cmd=CommandParser::CmdParser.new(ARGV) do
36
+ cmd = CommandParser::CmdParser.new(ARGV) do
37
37
  usage "`oneuser` <command> [<args>] [<options>]"
38
38
  version OpenNebulaHelper::ONE_VERSION
39
39
 
40
40
  helper = OneUserHelper.new
41
41
 
42
42
  before_proc do
43
- helper.set_client(options) if ![:key].include?(@comm_name)
43
+ if ![:key].include?(@comm_name)
44
+ begin
45
+ helper.set_client(options)
46
+ rescue Exception => e
47
+ STDERR.puts e.message
48
+
49
+ if e.message != OpenNebula::Client::NO_ONE_AUTH_ERROR
50
+ STDERR.puts e.backtrace
51
+ end
52
+
53
+ exit 1
54
+ end
55
+ end
44
56
  end
45
57
 
46
58
  ########################################################################
data/lib/one_helper.rb CHANGED
@@ -492,20 +492,6 @@ EOT
492
492
  end
493
493
 
494
494
 
495
- # receive a object key => value format
496
- # returns hashed values
497
- def encrypt(opts, token)
498
- res = {}
499
- opts.each do |key, value|
500
- cipher = OpenSSL::Cipher::AES.new(256,:CBC)
501
- cipher.encrypt.key = token[0..31]
502
- encrypted = cipher.update(value) + cipher.final
503
- res[key] = Base64::encode64(encrypted)
504
- end
505
-
506
- return res
507
- end
508
-
509
495
  def list_pool(options, top=false, filter_flag=nil)
510
496
  if options[:describe]
511
497
  table = format_pool(options)
@@ -20,6 +20,32 @@ require 'rubygems'
20
20
 
21
21
  class OneHostHelper < OpenNebulaHelper::OneHelper
22
22
  TEMPLATE_XPATH = '//HOST/TEMPLATE'
23
+ HYBRID = {
24
+ :ec2 => {
25
+ :help => <<-EOT.unindent,
26
+ #-----------------------------------------------------------------------
27
+ # Supported EC2 AUTH ATTRIBUTTES:
28
+ #
29
+ # REGION_NAME = <the name of the ec2 region>
30
+ #
31
+ # EC2_ACCESS = <Your ec2 access key id>
32
+ # EC2_SECRET = <Your ec2 secret key>
33
+ #
34
+ # CAPACITY = [
35
+ # M1SMALL = <number of machines m1.small>,
36
+ # M1XLARGE = <number of machines m1.xlarge>,
37
+ # M1LARGE = <number of machines m1.large>
38
+ # ]
39
+ #
40
+ # You can set any machine type supported by ec2
41
+ # See your ec2_driver.conf for more information
42
+ #
43
+ #-----------------------------------------------------------------------
44
+ EOT
45
+ }
46
+ }
47
+
48
+
23
49
  VERSION_XPATH = "#{TEMPLATE_XPATH}/VERSION"
24
50
 
25
51
  def self.rname
@@ -164,6 +190,12 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
164
190
  table
165
191
  end
166
192
 
193
+ def set_hybrid(type, path)
194
+ k = type.to_sym
195
+ if HYBRID.key?(k)
196
+ str = path.nil? ? OpenNebulaHelper.editor_input(HYBRID[k][:help]): File.read(path)
197
+ end
198
+ end
167
199
 
168
200
  NUM_THREADS = 15
169
201
  def sync(host_ids, options)
@@ -230,10 +262,14 @@ class OneHostHelper < OpenNebulaHelper::OneHelper
230
262
 
231
263
  vm_mad = host['VM_MAD'].downcase
232
264
  remote_remotes = host['TEMPLATE/REMOTE_REMOTES']
265
+ state = host['STATE']
233
266
 
234
267
  # Skip this host from remote syncing if it's a PUBLIC_CLOUD host
235
268
  next if host['TEMPLATE/PUBLIC_CLOUD'] == 'YES'
236
269
 
270
+ # Skip this host from remote syncing if it's OFFLINE
271
+ next if Host::HOST_STATES[state.to_i] == 'OFFLINE'
272
+
237
273
  host_version=host['TEMPLATE/VERSION']
238
274
 
239
275
  begin
@@ -290,7 +290,7 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
290
290
  puts str % [e, mask]
291
291
  }
292
292
 
293
- if image.has_elements?("/IMAGE/SNAPSHOTS")
293
+ if image.has_elements?("/IMAGE/SNAPSHOTS/SNAPSHOT")
294
294
  puts
295
295
  CLIHelper.print_header(str_h1 % "IMAGE SNAPSHOTS",false)
296
296
  format_snapshots(image)
@@ -361,7 +361,7 @@ class OneImageHelper < OpenNebulaHelper::OneHelper
361
361
 
362
362
  # Convert snapshot data to an array
363
363
  image_hash = image.to_hash
364
- image_snapshots = [image_hash['IMAGE']['SNAPSHOTS']].flatten.first
364
+ image_snapshots = [image_hash['IMAGE']['SNAPSHOTS']['SNAPSHOT']].flatten
365
365
  table.show(image_snapshots)
366
366
  end
367
367
 
@@ -27,11 +27,14 @@ class TokenAuth
27
27
  end
28
28
 
29
29
  class OneUserHelper < OpenNebulaHelper::OneHelper
30
-
31
- if ENV['HOME']
32
- ONE_AUTH = ENV['HOME']+'/.one/one_auth'
30
+ if ENV['ONE_AUTH']
31
+ ONE_AUTH = ENV['ONE_AUTH']
33
32
  else
34
- ONE_AUTH = "/var/lib/one/.one/one_auth"
33
+ if ENV['HOME']
34
+ ONE_AUTH = ENV['HOME']+'/.one/one_auth'
35
+ else
36
+ ONE_AUTH = "/var/lib/one/.one/one_auth"
37
+ end
35
38
  end
36
39
 
37
40
  def self.rname
@@ -206,12 +209,14 @@ class OneUserHelper < OpenNebulaHelper::OneHelper
206
209
 
207
210
  return -1, token_oned.message if OpenNebula.is_error?(token_oned)
208
211
 
212
+ token_info = "Authentication Token is:\n#{username}:#{token_oned}"
213
+
209
214
  #-----------------------------------------------------------------------
210
215
  # Check that ONE_AUTH target can be written
211
216
  #-----------------------------------------------------------------------
212
217
  if File.file?(ONE_AUTH) && !options[:force]
213
218
  return 0, "File #{ONE_AUTH} exists, use --force to overwrite."\
214
- "\nAuthentication Token is:\n#{username}:#{token_oned}"
219
+ "\n#{token_info}"
215
220
  end
216
221
 
217
222
  #-----------------------------------------------------------------------
@@ -228,7 +233,7 @@ class OneUserHelper < OpenNebulaHelper::OneHelper
228
233
 
229
234
  File.chmod(0600, ONE_AUTH)
230
235
 
231
- return 0, ''
236
+ return 0, token_info
232
237
  end
233
238
 
234
239
  def format_pool(options)
@@ -459,6 +464,10 @@ class OneUserHelper < OpenNebulaHelper::OneHelper
459
464
  username = args[0]
460
465
  use_client = false
461
466
  else
467
+ if !defined?(@@client)
468
+ return -1, "No username in the argument or valid ONE_AUTH found."
469
+ end
470
+
462
471
  user = self.get_client_user
463
472
  username = user['NAME']
464
473
  use_client = true
@@ -578,7 +578,7 @@ in the frontend machine.
578
578
  vm_disks = [vm_hash['VM']['TEMPLATE']['DISK']].flatten
579
579
  end
580
580
 
581
- if vm.has_elements?("/VM/TEMPLATE/CONTEXT")
581
+ if vm.has_elements?("/VM/TEMPLATE/CONTEXT") && vm["/VM/HISTORY_RECORDS/HISTORY[1]/VM_MAD"] != 'vcenter'
582
582
  context_disk = vm_hash['VM']['TEMPLATE']['CONTEXT']
583
583
 
584
584
  context_disk["IMAGE"] = "CONTEXT"
@@ -147,14 +147,34 @@ class OneZoneHelper < OpenNebulaHelper::OneHelper
147
147
  when "3" then "leader"
148
148
  else "-"
149
149
  end
150
- s["TERM"] = xml_doc.root.at_xpath("TERM").text
150
+ s["TERM"] = xml_doc.root.at_xpath("TERM").text
151
151
  s["VOTEDFOR"] = xml_doc.root.at_xpath("VOTEDFOR").text
152
152
  s["COMMIT"] = xml_doc.root.at_xpath("COMMIT").text
153
- s["LOG_INDEX"] = xml_doc.root.at_xpath("LOG_INDEX").text
153
+
154
+ s["LOG_INDEX"] = xml_doc.root.at_xpath("LOG_INDEX").text
155
+ s["FEDLOG_INDEX"] = xml_doc.root.at_xpath("FEDLOG_INDEX").text
154
156
  }
155
157
 
156
158
  puts
157
- CLIHelper.print_header(str_h1 % "SERVERS",false)
159
+ CLIHelper.print_header(str_h1 % "ZONE SERVERS",false)
160
+
161
+ CLIHelper::ShowTable.new(nil, self) do
162
+
163
+ column :"ID", "", :size=>2 do |d|
164
+ d["ID"] if !d.nil?
165
+ end
166
+
167
+ column :"NAME", "", :left, :size=>15 do |d|
168
+ d["NAME"] if !d.nil?
169
+ end
170
+
171
+ column :"ENDPOINT", "", :left, :size=>63 do |d|
172
+ d["ENDPOINT"] if !d.nil?
173
+ end
174
+ end.show([zone_hash['ZONE']['SERVER_POOL']['SERVER']].flatten, {})
175
+
176
+ puts
177
+ CLIHelper.print_header(str_h1 % "HA & FEDERATION SYNC STATUS",false)
158
178
 
159
179
  CLIHelper::ShowTable.new(nil, self) do
160
180
 
@@ -186,9 +206,10 @@ class OneZoneHelper < OpenNebulaHelper::OneHelper
186
206
  d["VOTEDFOR"] if !d.nil?
187
207
  end
188
208
 
189
- column :"ENDPOINT", "", :left, :size=>18 do |d|
190
- d["ENDPOINT"] if !d.nil?
209
+ column :"FED_INDEX", "", :left, :size=>10 do |d|
210
+ d["FEDLOG_INDEX"] if !d.nil?
191
211
  end
212
+
192
213
  end.show([zone_hash['ZONE']['SERVER_POOL']['SERVER']].flatten, {})
193
214
  end
194
215
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opennebula-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.3.80.beta1
4
+ version: 5.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenNebula
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-05 00:00:00.000000000 Z
11
+ date: 2017-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opennebula
@@ -16,40 +16,39 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 5.3.80.beta1
19
+ version: 5.4.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 5.3.80.beta1
26
+ version: 5.4.0
27
27
  description: Commands used to talk to OpenNebula
28
28
  email: contact@opennebula.org
29
29
  executables:
30
- - oneuser.backup
31
- - oneacct
32
- - oneacl
33
- - onecluster
34
- - onedatastore
35
- - oneflow
30
+ - onehost
31
+ - onevcenter
36
32
  - oneflow-template
37
- - onegroup
38
- - oneimage
39
- - onemarket
40
- - onemarketapp
41
- - onesecgroup
42
- - oneshowback
43
- - onetemplate
44
33
  - oneuser
45
- - onevcenter
46
34
  - onevdc
47
- - onevm
48
- - onevmgroup
35
+ - onesecgroup
36
+ - oneacct
37
+ - oneflow
49
38
  - onevnet
39
+ - oneshowback
50
40
  - onevrouter
41
+ - onevmgroup
42
+ - onemarket
51
43
  - onezone
52
- - onehost
44
+ - onecluster
45
+ - oneacl
46
+ - onemarketapp
47
+ - onedatastore
48
+ - onevm
49
+ - onegroup
50
+ - onetemplate
51
+ - oneimage
53
52
  extensions: []
54
53
  extra_rdoc_files: []
55
54
  files:
@@ -70,7 +69,6 @@ files:
70
69
  - bin/oneshowback
71
70
  - bin/onetemplate
72
71
  - bin/oneuser
73
- - bin/oneuser.backup
74
72
  - bin/onevcenter
75
73
  - bin/onevdc
76
74
  - bin/onevm
@@ -115,9 +113,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
115
113
  version: '0'
116
114
  required_rubygems_version: !ruby/object:Gem::Requirement
117
115
  requirements:
118
- - - ">"
116
+ - - ">="
119
117
  - !ruby/object:Gem::Version
120
- version: 1.3.1
118
+ version: '0'
121
119
  requirements: []
122
120
  rubyforge_project:
123
121
  rubygems_version: 2.6.11
data/bin/oneuser.backup DELETED
@@ -1,522 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # -------------------------------------------------------------------------- #
4
- # Copyright 2002-2015, OpenNebula Project, OpenNebula Systems #
5
- # #
6
- # Licensed under the Apache License, Version 2.0 (the "License"); you may #
7
- # not use this file except in compliance with the License. You may obtain #
8
- # 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
- ONE_LOCATION=ENV["ONE_LOCATION"]
20
-
21
- if !ONE_LOCATION
22
- RUBY_LIB_LOCATION="/usr/lib/one/ruby"
23
- else
24
- RUBY_LIB_LOCATION=ONE_LOCATION+"/lib/ruby"
25
- end
26
-
27
- $: << RUBY_LIB_LOCATION
28
- $: << RUBY_LIB_LOCATION+"/cli"
29
-
30
- require 'command_parser'
31
- require 'one_helper/oneuser_helper'
32
- require 'one_helper/onequota_helper'
33
-
34
- require 'uri'
35
-
36
- cmd=CommandParser::CmdParser.new(ARGV) do
37
- usage "`oneuser` <command> [<args>] [<options>]"
38
- version OpenNebulaHelper::ONE_VERSION
39
-
40
- helper = OneUserHelper.new
41
-
42
- before_proc do
43
- helper.set_client(options) if ![:login, :key].include?(@comm_name)
44
- end
45
-
46
- ########################################################################
47
- # Global Options
48
- ########################################################################
49
- set :option, CommandParser::OPTIONS+OpenNebulaHelper::CLIENT_OPTIONS
50
-
51
- list_options = CLIHelper::OPTIONS
52
- list_options << OpenNebulaHelper::XML
53
- list_options << OpenNebulaHelper::NUMERIC
54
- list_options << OpenNebulaHelper::DESCRIBE
55
-
56
- READ_FILE={
57
- :name => "read_file",
58
- :short => "-r",
59
- :large => "--read-file",
60
- :description => "Read password from file"
61
- }
62
-
63
- SHA1={
64
- :name => "sha1",
65
- :large => "--sha1",
66
- :description => "The password will be hashed using the sha1\n"<<
67
- " "*31<<"algorithm"
68
- }
69
-
70
- SSH={
71
- :name => "ssh",
72
- :large => "--ssh",
73
- :description => "SSH Auth system",
74
- :proc => lambda { |o, options|
75
- options[:driver] = OpenNebula::User::SSH_AUTH
76
- }
77
- }
78
-
79
- X509={
80
- :name => "x509",
81
- :large => "--x509",
82
- :description => "x509 Auth system for x509 certificates",
83
- :proc => lambda { |o, options|
84
- options[:driver] = OpenNebula::User::X509_AUTH
85
- }
86
- }
87
-
88
- X509_PROXY={
89
- :name => "x509_proxy",
90
- :large => "--x509_proxy",
91
- :description => "x509 Auth system based on x509 proxy certificates",
92
- :proc => lambda { |o, options|
93
- options[:driver] = OpenNebula::User::X509_PROXY_AUTH
94
- }
95
- }
96
-
97
- KEY={
98
- :name => "key",
99
- :short => "-k path_to_private_key_pem",
100
- :large => "--key path_to_private_key_pem",
101
- :format => String,
102
- :description => "Path to the Private Key of the User"
103
- }
104
-
105
- CERT={
106
- :name => "cert",
107
- :short => "-c path_to_user_cert_pem",
108
- :large => "--cert path_to_user_cert_pem",
109
- :format => String,
110
- :description => "Path to the Certificate of the User"
111
- }
112
-
113
- PROXY={
114
- :name => "proxy",
115
- :large => "--proxy path_to_user_proxy_pem",
116
- :format => String,
117
- :description => "Path to the user proxy certificate"
118
- }
119
-
120
- TIME={
121
- :name => "time",
122
- :large => "--time x",
123
- :format => Integer,
124
- :description => "Token duration in seconds, defaults to 36000 (10 h). "\
125
- "To reset the token set time to 0." \
126
- "To generate a non-expiring token use -1"\
127
- " (not valid for ssh and x509 tokens). "\
128
- }
129
-
130
- DRIVER={
131
- :name => "driver",
132
- :large => "--driver driver",
133
- :format => String,
134
- :description => "Driver to autehnticate this user"
135
- }
136
-
137
- FORCE = {
138
- :name => "force",
139
- :large => "--force" ,
140
- :description => "Force one_auth file rewrite"
141
- }
142
-
143
- create_options = [READ_FILE, SHA1, SSH, X509, KEY, CERT, DRIVER]
144
- login_options = [SSH, X509, X509_PROXY, KEY, CERT, PROXY, TIME, FORCE]
145
-
146
- ########################################################################
147
- # Formatters for arguments
148
- ########################################################################
149
- set :format, :groupid, OpenNebulaHelper.rname_to_id_desc("GROUP") do |arg|
150
- OpenNebulaHelper.rname_to_id(arg, "GROUP")
151
- end
152
-
153
- set :format, :userid, OneUserHelper.to_id_desc do |arg|
154
- helper.to_id(arg)
155
- end
156
-
157
- set :format, :userid_list, OneUserHelper.list_to_id_desc do |arg|
158
- helper.list_to_id(arg)
159
- end
160
-
161
- set :format, :password, OneUserHelper.password_to_str_desc do |arg|
162
- OneUserHelper.password_to_str(arg, options)
163
- end
164
-
165
- ########################################################################
166
- # Commands
167
- ########################################################################
168
-
169
- create_desc = <<-EOT.unindent
170
- Creates a new User
171
- Examples:
172
- oneuser create my_user my_password
173
- oneuser create my_user -r /tmp/mypass
174
- oneuser create my_user --ssh --key /tmp/id_rsa
175
- oneuser create my_user --ssh -r /tmp/public_key
176
- oneuser create my_user --x509 --cert /tmp/my_cert.pem
177
- EOT
178
-
179
- command :create, create_desc, :username, [:password, nil],
180
- :options=>create_options do
181
- if args[1]
182
- pass = args[1]
183
- else
184
- rc = helper.password(options)
185
- if rc.first == 0
186
- pass = rc[1]
187
- else
188
- exit_with_code *rc
189
- end
190
- end
191
-
192
- driver = options[:driver] || OpenNebula::User::CORE_AUTH
193
-
194
- helper.create_resource(options) do |user|
195
- user.allocate(args[0], pass, driver)
196
- end
197
- end
198
-
199
- update_desc = <<-EOT.unindent
200
- Update the template contents. If a path is not provided the editor will
201
- be launched to modify the current content.
202
- EOT
203
-
204
- command :update, update_desc, :userid, [:file, nil],
205
- :options=>OpenNebulaHelper::APPEND do
206
- helper.perform_action(args[0],options,"modified") do |obj|
207
- if options[:append]
208
- str = OpenNebulaHelper.append_template(args[0], obj, args[1])
209
- else
210
- str = OpenNebulaHelper.update_template(args[0], obj, args[1])
211
- end
212
-
213
- helper.set_client(options)
214
- obj = helper.retrieve_resource(obj.id)
215
-
216
- obj.update(str, options[:append])
217
- end
218
- end
219
-
220
- quota_desc = <<-EOT.unindent
221
- Set the quota limits for the user. If a path is not provided the editor
222
- will be launched to modify the current quotas.
223
- EOT
224
-
225
- command :quota, quota_desc, :userid, [:file, nil] do
226
- helper.perform_action(args[0], options, "modified") do |user|
227
- rc = user.info
228
-
229
- if OpenNebula.is_error?(rc)
230
- puts rc.message
231
- exit -1
232
- end
233
-
234
- str = OneQuotaHelper.set_quota(user, args[1])
235
-
236
- helper.set_client(options)
237
- user = helper.retrieve_resource(user.id)
238
-
239
- rc = user.set_quota(str)
240
-
241
- if OpenNebula.is_error?(rc)
242
- puts rc.message
243
- exit -1
244
- end
245
- end
246
- end
247
-
248
- batchquota_desc = <<-EOT.unindent
249
- Sets the quota limits in batch for various users. If a path is not
250
- provided the editor will be launched to create new quotas.
251
- EOT
252
-
253
- command :batchquota, batchquota_desc, [:range, :userid_list],
254
- [:file, nil] do
255
- batch_str = OneQuotaHelper.get_batch_quota(args[1])
256
-
257
- helper.perform_actions(args[0], options, "modified") do |user|
258
- str = OneQuotaHelper.merge_quota(user, batch_str)
259
-
260
- if OpenNebula.is_error?(str)
261
- str
262
- else
263
- helper.set_client(options)
264
- user = helper.retrieve_resource(user.id)
265
-
266
- rc = user.set_quota(str)
267
- rc
268
- end
269
- end
270
- end
271
-
272
- defaultquota_desc = <<-EOT.unindent
273
- Sets the default quota limits for the users. If a path is not provided
274
- the editor will be launched to modify the current default quotas.
275
- EOT
276
-
277
- command :defaultquota, defaultquota_desc, [:file, nil] do
278
- system = System.new(OneUserHelper.get_client(options))
279
-
280
- default_quotas = system.get_user_quotas()
281
-
282
- if OpenNebula.is_error?(default_quotas)
283
- puts default_quotas.message
284
- exit(-1)
285
- end
286
-
287
- str = OneQuotaHelper.set_quota(default_quotas, args[0], true)
288
-
289
- system = System.new(OneUserHelper.get_client(options))
290
- rc = system.set_user_quotas(str)
291
-
292
- if OpenNebula.is_error?(rc)
293
- puts rc.message
294
- exit(-1)
295
- end
296
-
297
- exit 0
298
- end
299
-
300
- umask_desc = <<-EOT.unindent
301
- Changes the umask used to create the default permissions. In a similar
302
- way to the Unix umask command, the expected value is a three-digit
303
- base-8 number. Each digit is a mask that disables permissions for the
304
- owner, group and other, respectively.
305
-
306
- If mask is not given, or if it is an empty string, the umask will
307
- be unset
308
- EOT
309
-
310
- command :umask, umask_desc, [:range, :userid_list], [:mask, nil] do
311
- helper.perform_actions(args[0],options,
312
- "umask changed") do |user|
313
-
314
- rc = user.info
315
-
316
- if OpenNebula.is_error?(rc)
317
- puts rc.message
318
- exit -1
319
- end
320
-
321
- user.delete_element('/USER/TEMPLATE/UMASK')
322
-
323
- tmp_str = user.template_str
324
-
325
- if !args[1].nil? && args[1] != ""
326
- tmp_str << "\nUMASK = #{args[1]}"
327
- end
328
-
329
- user.update(tmp_str)
330
- end
331
- end
332
-
333
- login_desc = <<-EOT.unindent
334
- Creates the login token for authentication. The token can be used
335
- together with any authentication driver. The token will be stored in
336
- $HOME/.one/one_auth, and can be used subsequently to authenticate with
337
- oned through API, CLI or Sunstone.
338
-
339
- Example, request a valid token for a generic driver (e.g. core auth, LDAP...):
340
- oneuser login my_user --time 3600
341
-
342
- Example, generate and set a token for SSH based authentication:
343
- oneuser login my_user --ssh --key /tmp/id_rsa --time 72000
344
-
345
- Example, same using X509 certificates:
346
- oneuser login my_user --x509 --cert /tmp/my_cert.pem
347
- --key /tmp/my_key.pk --time 72000
348
-
349
- Example, now with a X509 proxy certificate
350
- oneuser login my_user --x509_proxy --proxy /tmp/my_cert.pem
351
- --time 72000
352
- EOT
353
-
354
- command :login, login_desc, :username, :options=>login_options do
355
-
356
- options[:time] ||= 36000
357
-
358
- helper.login(args[0], options)
359
- end
360
-
361
- key_desc = <<-EOT.unindent
362
- Shows a public key from a private SSH key. Use it as password
363
- for the SSH authentication mechanism.
364
- EOT
365
-
366
- command :key, key_desc, :options=>[KEY] do
367
- require 'opennebula/ssh_auth'
368
-
369
- options[:key] ||= ENV['HOME']+'/.ssh/id_rsa'
370
-
371
- begin
372
- sshauth = SshAuth.new(:private_key=>options[:key])
373
- rescue Exception => e
374
- exit_with_code -1, e.message
375
- end
376
-
377
- puts sshauth.password
378
- exit_with_code 0
379
- end
380
-
381
-
382
- delete_desc = <<-EOT.unindent
383
- Deletes the given User
384
- EOT
385
-
386
- command :delete, delete_desc, [:range, :userid_list] do
387
- helper.perform_actions(args[0], options, "deleted") do |user|
388
- user.delete
389
- end
390
- end
391
-
392
- passwd_desc = <<-EOT.unindent
393
- Changes the given User's password
394
- EOT
395
-
396
- command :passwd, passwd_desc, :userid, [:password, nil],
397
- :options=>create_options do
398
- if args[1]
399
- pass = args[1]
400
- else
401
- rc = helper.password(options)
402
- if rc.first == 0
403
- pass = rc[1]
404
- else
405
- exit_with_code *rc
406
- end
407
- end
408
-
409
- helper.perform_action(args[0],options,"Password changed") do |user|
410
- user.passwd(pass)
411
- end
412
- end
413
-
414
- chgrp_desc = <<-EOT.unindent
415
- Changes the User's primary group
416
- EOT
417
-
418
- command :chgrp, chgrp_desc, [:range, :userid_list], :groupid do
419
- helper.perform_actions(args[0],options,"Group changed") do |user|
420
- user.chgrp(args[1].to_i)
421
- end
422
- end
423
-
424
- addgroup_desc = <<-EOT.unindent
425
- Adds the User to a secondary group
426
- EOT
427
-
428
- command :addgroup, addgroup_desc, [:range, :userid_list], :groupid do
429
- gid = args[1]
430
-
431
- helper.perform_actions(args[0],options,"group added") do |user|
432
- user.addgroup( gid )
433
- end
434
- end
435
-
436
- delgroup_desc = <<-EOT.unindent
437
- Removes the User from a secondary group
438
- EOT
439
-
440
- command :delgroup, delgroup_desc, [:range, :userid_list], :groupid do
441
- gid = args[1]
442
-
443
- helper.perform_actions(args[0],options,"group deleted") do |user|
444
- user.delgroup( gid )
445
- end
446
- end
447
-
448
- chauth_desc = <<-EOT.unindent
449
- Changes the User's auth driver and its password (optional)
450
- Examples:
451
- oneuser chauth my_user core
452
- oneuser chauth my_user core new_password
453
- oneuser chauth my_user core -r /tmp/mypass
454
- oneuser chauth my_user --ssh --key /home/oneadmin/.ssh/id_rsa
455
- oneuser chauth my_user --ssh -r /tmp/public_key
456
- oneuser chauth my_user --x509 --cert /tmp/my_cert.pem
457
- EOT
458
-
459
- command :chauth, chauth_desc, :userid, [:auth, nil], [:password, nil],
460
- :options=>create_options do
461
- if options[:driver]
462
- driver = options[:driver]
463
- elsif args[1]
464
- driver = args[1]
465
- else
466
- exit_with_code 0, "An Auth driver should be specified"
467
- end
468
-
469
- if args[2]
470
- pass = args[2]
471
- else
472
- rc = helper.password(options)
473
- if rc.first == 0
474
- pass = rc[1]
475
- else
476
- pass = ""
477
- end
478
- end
479
-
480
- helper.perform_action(args[0],
481
- options,
482
- "Auth driver and password changed") do |user|
483
- user.chauth(driver, pass)
484
- end
485
- end
486
-
487
- list_desc = <<-EOT.unindent
488
- Lists Users in the pool
489
- EOT
490
-
491
- command :list, list_desc, :options=>list_options do
492
- helper.list_pool(options)
493
- end
494
-
495
- show_desc = <<-EOT.unindent
496
- Shows information for the given User
497
- EOT
498
-
499
- command :show, show_desc, [:userid, nil],
500
- :options=>OpenNebulaHelper::XML do
501
- user=args[0] || OpenNebula::User::SELF
502
- helper.show_resource(user,options)
503
- end
504
-
505
- show_desc = <<-EOT.unindent
506
- Encodes user and password to use it with ldap
507
- EOT
508
-
509
- command :encode, show_desc, :username, [:password, nil] do
510
- ar=args.compact
511
-
512
- if defined?(URI::Parser)
513
- parser=URI::Parser.new
514
- else
515
- parser=URI
516
- end
517
-
518
- puts ar.map{|a| parser.escape(a) }.join(':')
519
-
520
- 0
521
- end
522
- end