opennebula-cli 4.14.2 → 4.90.0.beta1
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 +4 -4
- data/NOTICE +1 -1
- data/bin/oneacct +1 -1
- data/bin/oneacl +1 -1
- data/bin/onecluster +4 -1
- data/bin/onedatastore +4 -1
- data/bin/oneflow +26 -1
- data/bin/oneflow-template +57 -1
- data/bin/onegroup +4 -1
- data/bin/onehost +24 -15
- data/bin/oneimage +5 -3
- data/bin/onemarket +178 -0
- data/bin/onemarketapp +282 -0
- data/bin/onesecgroup +18 -1
- data/bin/oneshowback +1 -1
- data/bin/onetemplate +30 -21
- data/bin/oneuser +12 -6
- data/bin/oneuser.backup +522 -0
- data/bin/onevcenter +287 -1
- data/bin/onevdc +4 -1
- data/bin/onevm +78 -56
- data/bin/onevnet +10 -4
- data/bin/onevrouter +305 -0
- data/bin/onezone +4 -1
- data/lib/cli_helper.rb +1 -1
- data/lib/command_parser.rb +1 -1
- data/lib/one_helper/oneacct_helper.rb +1 -1
- data/lib/one_helper/oneacl_helper.rb +11 -5
- data/lib/one_helper/onecluster_helper.rb +1 -1
- data/lib/one_helper/onedatastore_helper.rb +17 -7
- data/lib/one_helper/onegroup_helper.rb +1 -1
- data/lib/one_helper/onehost_helper.rb +2 -5
- data/lib/one_helper/oneimage_helper.rb +1 -15
- data/lib/one_helper/onemarket_helper.rb +152 -0
- data/lib/one_helper/onemarketapp_helper.rb +223 -0
- data/lib/one_helper/onequota_helper.rb +1 -1
- data/lib/one_helper/onesecgroup_helper.rb +46 -3
- data/lib/one_helper/onetemplate_helper.rb +146 -11
- data/lib/one_helper/oneuser_helper.rb +1 -1
- data/lib/one_helper/onevdc_helper.rb +1 -1
- data/lib/one_helper/onevm_helper.rb +37 -53
- data/lib/one_helper/onevnet_helper.rb +23 -11
- data/lib/one_helper/onevrouter_helper.rb +221 -0
- data/lib/one_helper/onezone_helper.rb +1 -1
- data/lib/one_helper.rb +193 -25
- metadata +21 -10
data/bin/oneuser.backup
ADDED
@@ -0,0 +1,522 @@
|
|
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
|