dimension_shell 0.2.3 → 0.3.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: ce97af921d3a8a8c3d71d51ba80f39d61a3426d3
4
- data.tar.gz: a81bab1d793c360be860f8997b915eb7d4a9e68f
3
+ metadata.gz: 8a3649b982ea2c25c35ca9c4ab65b595cc591312
4
+ data.tar.gz: e2758771f3f09bab789316d94449899c4c343f43
5
5
  SHA512:
6
- metadata.gz: 970195cfc4fefc7dc4241d9f821989b1a4ea3e8467c5017f7df5db9842bd2840c40a3e73ae74b8c3e5df40d06f7a364327118651b8e632bb70f74978a12ca32a
7
- data.tar.gz: 18292d7800a7f203268209bb527d29cbc7125da549a4f6153a41f15cb02ceb53d491b643505a8459832a6f3c1edc8cc7d2afdebeb1ef6e248701d0d84e85e3b2
6
+ metadata.gz: 8b115091ff58261551a0aefeece15826d36e02c9a1458643e9fab25709403b9acf7bd77d63c2dd83d30378ff1086b186ea922bb999bdba004ca78f9eff550653
7
+ data.tar.gz: a5b491b8d1fba2bbc9ec355aeec1630af1f5bbdc394593237672dcabf977db57d43304a89e9545a89afb3c653755fdb381c0cc320404d25a4a052c86b20b405f
data/CHANGELOG.md CHANGED
@@ -1,6 +1,9 @@
1
1
  # Changelog
2
2
 
3
- ## 0.2.3 Linked gem-home to Github-repo, added example to README
4
- ## 0.2.2 Initial commit
5
-
6
- - Hooray! :candy:
3
+ - 0.3.0 Added `list` command
4
+ - Added `list` command, which lists the first 250 servers for the given region.
5
+ - Added ssh-username to establishing connection-announcement.
6
+ - Internal improvements
7
+ - 0.2.3 Linked gem-home to Github-repo, added example to README
8
+ - 0.2.2 Initial commit
9
+ - Hooray! :candy:
data/README.md CHANGED
@@ -11,21 +11,38 @@ root@2a00:33a0:47c0:110:1211:468:ac2d:62de:191f's password: *
11
11
 
12
12
  ## Usage
13
13
 
14
+ ### Connect
15
+
14
16
  ```
15
17
  $ dsh connect SERVERNAME -r REGION -o ORGANIZATION -u USERNAME -p PASSWORD -s SHELL_USER
16
18
  ```
17
19
 
18
- Connects to the dimensiondata-API at the specified REGION with the ORGANIZATION-id, USERNAME and PASSWORD to fetch all servers matching to SERVERNAME.
20
+ Connects to the DimensionData-API at the specified REGION with the ORGANIZATION-id, USERNAME and PASSWORD to fetch all servers matching to SERVERNAME.
19
21
 
20
22
  If a matching server is found, its primary ipv6-address is taken to open a ssh-connection with the provided SHELL_USER.
21
23
 
22
24
  If the SHELL_USER is omitted, the connection will be established as `root`.
23
25
 
24
- ### Region
26
+ ### list
27
+
28
+ ```
29
+ $ dsh list -r REGION -o ORGANIZATION -u USERNAME -p PASSWORD
30
+ ```
31
+
32
+ Connects to the DimensionData-API at the specified Region with the ORGANIZATION-id, USERNAME and PASSWORD to fetch a list of all servers at the given region.
33
+
34
+ If the API-call is successful the returned servernames will be printed, followed by their operating system and their current state:
35
+
36
+ ``
37
+ super-server (UBUNTU12/64) - NORMAL
38
+ 1 server/s in total.
39
+ ``
40
+
41
+ #### Region
25
42
 
26
43
  The region-code is expanded to the subdomain `api-REGION`, f.e. the region-code `eu` is expanded to `https://api-eu.dimensiondata.com`.
27
44
 
28
- According to the API-documentation the following region-codes are accepted:
45
+ According to the API-documentation the following region-codes will be accepted by the API:
29
46
 
30
47
  ```
31
48
  na: North America
@@ -60,6 +77,7 @@ Install it via Rubygems.org:
60
77
  ```
61
78
  $ gem install dimension_shell
62
79
  ```
80
+
63
81
  # Help
64
82
 
65
83
  File an issue - pull-requests are welcome.
@@ -7,35 +7,51 @@ require 'dimension_shell/cloud_control'
7
7
 
8
8
  module DimensionShell
9
9
  class Cli < Thor
10
+ default_options = {
11
+ %w(region -r) => :string,
12
+ %w(organization -o) => :string,
13
+ %w(username -u) => :string,
14
+ %w(password -p) => :string,
15
+ }
10
16
 
11
- desc 'connect SERVERNAME', 'really connects to the server called SERVERNAME'
12
- option :region, type: :string, aliases: :r
13
- option :organization, type: :string, aliases: :o
14
- option :username, type: :string, aliases: :u
15
- option :password, type: :string, aliases: :p
16
- option :shell_user, type: :string, aliases: :s
17
+ desc 'connect SERVERNAME', 'connects to the server called SERVERNAME'
18
+ options default_options
19
+ option :shell_user, type: :string, aliases: '-s'
17
20
  def connect(servername)
18
- _initialize_configuration
21
+ _init_command(options)
19
22
  shell_user = options[:shell_user] || configatron.shell_user || 'root'
20
- @cloud_control = CloudControl.new({
21
- region: options[:region] || configatron.region,
22
- organization: options[:organization] || configatron.organization,
23
- username: options[:username] || configatron.username,
24
- password: options[:password] || configatron.password
25
- })
23
+
26
24
  result = @cloud_control.get_server servername
27
- if result[:reason] then
28
- puts %Q(dsh: API access failed: #{result[:reason]})
25
+
26
+ if result[:failure] then
27
+ _api_access_failed result
29
28
  elsif result['totalCount'] != 1 then
30
- puts %Q(dsh: No servername matched to "#{servername}".)
29
+ _puts %Q(No servername matched to "#{servername}".)
31
30
  else
32
31
  server = result['server'].first
33
32
  primary_ipv6 = server['networkInfo']['primaryNic']['ipv6']
34
- puts "dsh: Server \"#{servername}\" found, opening secure shell to #{primary_ipv6}."
33
+ puts "Server \"#{servername}\" found, opening secure shell to #{shell_user}@#{primary_ipv6}."
35
34
  Kernel.exec("ssh #{shell_user}@#{primary_ipv6}")
36
35
  end
37
36
  end
38
37
 
38
+ desc 'list', 'lists all server available in the given region'
39
+ options default_options
40
+ def list
41
+ _init_command(options)
42
+
43
+ result = @cloud_control.get_server_list
44
+
45
+ if result[:failure] then
46
+ _api_access_failed result
47
+ else
48
+ result['server'].each { |server|
49
+ puts "#{server['name']} (#{server['operatingSystem']['displayName']}) - #{server['state']}"
50
+ }
51
+ puts %Q(#{result['totalCount']} server/s in total.)
52
+ end
53
+ end
54
+
39
55
  private
40
56
  def _get_config_path
41
57
  File.join(Dir.home, 'dsh.yml')
@@ -49,9 +65,27 @@ module DimensionShell
49
65
  end
50
66
  end
51
67
 
52
- def _initialize_configuration
68
+ def _init_configuration
53
69
  configatron.configure_from_hash(_load_config_hash)
54
70
  end
71
+
72
+ def _init_command(options)
73
+ _init_configuration
74
+ @cloud_control = CloudControl.new({
75
+ region: options[:region] || configatron.region,
76
+ organization: options[:organization] || configatron.organization,
77
+ username: options[:username] || configatron.username,
78
+ password: options[:password] || configatron.password
79
+ })
80
+ end
81
+
82
+ def _puts(*args)
83
+ puts args.unshift('dsh: ').join()
84
+ end
85
+
86
+ def _api_access_failed(result)
87
+ _puts %Q(API access failed: #{result[:failure]})
88
+ end
55
89
  end
56
90
 
57
91
  DimensionShell::Cli.start
@@ -12,12 +12,11 @@ module DimensionShell
12
12
  end
13
13
 
14
14
  def get_server(servername)
15
- response = _invoke_get path: 'server/server', query: { name: servername }
16
- if response.ok? then
17
- JSON.parse(response.body)
18
- else
19
- { reason: "#{response.status.to_s} - #{response.reason.to_s}" }
20
- end
15
+ _invoke_get path: 'server/server', query: { name: servername }
16
+ end
17
+
18
+ def get_server_list
19
+ _invoke_get path: 'server/server'
21
20
  end
22
21
 
23
22
  private
@@ -46,7 +45,13 @@ module DimensionShell
46
45
  client = HTTPClient.new(default_header: header, force_basic_auth: true)
47
46
  client.set_auth _api_base_uri, @username, @password
48
47
  #puts "Fetching url \"#{_api_domain(options[:path])}\""
49
- client.get(_api_domain(options[:path]), :query => options[:query])
48
+ response = client.get(_api_domain(options[:path]), :query => options[:query])
49
+
50
+ if response.ok? then
51
+ JSON.parse(response.body)
52
+ else
53
+ { failure: "#{response.status.to_s} - #{response.reason.to_s}" }
54
+ end
50
55
  end
51
56
  end
52
57
  end
@@ -1,3 +1,3 @@
1
1
  module DimensionShell
2
- VERSION = "0.2.3"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dimension_shell
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Breisch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-22 00:00:00.000000000 Z
11
+ date: 2016-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -53,7 +53,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
53
53
  requirements:
54
54
  - - ">="
55
55
  - !ruby/object:Gem::Version
56
- version: '0'
56
+ version: 1.9.0
57
57
  required_rubygems_version: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="