opennebula-cli 5.3.80.beta1 → 5.4.0

Sign up to get free protection for your applications and to get access to all the features.
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