qtc-sdk 0.2.0 → 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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +18 -18
  3. data/Changelog.md +14 -6
  4. data/Gemfile +4 -4
  5. data/LICENSE.txt +22 -22
  6. data/README.md +44 -44
  7. data/Rakefile +1 -1
  8. data/bin/qtc-cli +13 -13
  9. data/lib/qtc/cli/commands.rb +15 -15
  10. data/lib/qtc/cli/common.rb +146 -91
  11. data/lib/qtc/cli/eds/base.rb +27 -27
  12. data/lib/qtc/cli/eds/commands.rb +20 -20
  13. data/lib/qtc/cli/eds/instances.rb +30 -30
  14. data/lib/qtc/cli/mar/apps.rb +116 -125
  15. data/lib/qtc/cli/mar/base.rb +60 -60
  16. data/lib/qtc/cli/mar/commands.rb +221 -199
  17. data/lib/qtc/cli/mar/debug.rb +87 -86
  18. data/lib/qtc/cli/mar/domains.rb +35 -38
  19. data/lib/qtc/cli/mar/env.rb +38 -40
  20. data/lib/qtc/cli/mar/repository.rb +24 -26
  21. data/lib/qtc/cli/mar/ssl_certificates.rb +40 -42
  22. data/lib/qtc/cli/mar/stack.rb +29 -0
  23. data/lib/qtc/cli/mdb/base.rb +47 -43
  24. data/lib/qtc/cli/mdb/commands.rb +43 -31
  25. data/lib/qtc/cli/mdb/instances.rb +79 -60
  26. data/lib/qtc/cli/platform/clouds.rb +33 -15
  27. data/lib/qtc/cli/platform/commands.rb +132 -65
  28. data/lib/qtc/cli/platform/datacenters.rb +23 -21
  29. data/lib/qtc/cli/platform/ssh_keys.rb +41 -41
  30. data/lib/qtc/cli/platform/user.rb +25 -25
  31. data/lib/qtc/cli/platform/vpn.rb +93 -0
  32. data/lib/qtc/client.rb +170 -170
  33. data/lib/qtc/eds/client.rb +116 -116
  34. data/lib/qtc/eds/collection.rb +124 -124
  35. data/lib/qtc/eds/user_collection.rb +13 -13
  36. data/lib/qtc/eds/usergroup_collection.rb +41 -41
  37. data/lib/qtc/errors.rb +13 -11
  38. data/lib/qtc/version.rb +3 -3
  39. data/lib/qtc-sdk.rb +1 -1
  40. data/qtc-sdk.gemspec +28 -28
  41. data/spec/unit/qtc/client_spec.rb +147 -147
  42. metadata +20 -19
  43. data/lib/qtc/mws/client.rb +0 -89
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7e04ff804e0c81442a6ba99cc7179825b7cd24fe
4
- data.tar.gz: d3b0706e21e291fb8cbb5656d685098bef4961c4
3
+ metadata.gz: a9bfa0619d71840645a97bcdcd7e127f0e3a99c7
4
+ data.tar.gz: ca672d82bb261648df83eac626cff20497a326cc
5
5
  SHA512:
6
- metadata.gz: 2dca7fa4e70ad77280f2ab1b1d25b0a762bcbf2dd42dee0d9aa83183486247d96e72197d0e37ff57d5e89fe1c04e40e0012a30114073307141b905135d5dd94f
7
- data.tar.gz: 316383e9626b39b9982338812c72d01cfe7e1ed01c360069ce5e0fedf7d068f7176fb4331abd9fbe6033b99c3144a0164715957df8fdcd38de4751e834d73a55
6
+ metadata.gz: d8ae8f845101afa83f6fbade7093bd9687d08a3889fa9b7ac65ff502f541ca8aceb695cb9d4c09b1c0866ffbeca669b6fdc8aa3c8998412ff3e4da655aaa145f
7
+ data.tar.gz: b64b18daa1fda05d426481f9be1daedb8591016038986859f6bb1f4c304eea084e855ee31e83da6fa4586b0fd0fce103b0c94e77f6554c2ce03cf636a68f64e6
data/.gitignore CHANGED
@@ -1,18 +1,18 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- .idea
7
- Gemfile.lock
8
- InstalledFiles
9
- _yardoc
10
- coverage
11
- doc/
12
- lib/bundler/man
13
- pkg
14
- rdoc
15
- spec/reports
16
- test/tmp
17
- test/version_tmp
18
- tmp
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ .idea
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
data/Changelog.md CHANGED
@@ -1,6 +1,14 @@
1
- 0.2.0
2
- -----------
3
-
4
- - Add support for executing ad-hoc commands inside MAR applications: qtc-cli mar exec
5
- - Add support for local debugging of MAR applications (using docker): qtc-cli mar local:run
6
- - Add initial MDB commands: qtc-cli mdb list/logs
1
+ 0.3.0
2
+ -----------
3
+
4
+ - Add support for cloud vpn
5
+ - Add support for stack change
6
+ - Refactor cli to use cloud tokens
7
+ - Remove MWS support
8
+
9
+ 0.2.0
10
+ -----------
11
+
12
+ - Add support for executing ad-hoc commands inside MAR applications: qtc-cli mar exec
13
+ - Add support for local debugging of MAR applications (using docker): qtc-cli mar local:run
14
+ - Add initial MDB commands: qtc-cli mdb list/logs
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in qtc-sdk.gemspec
4
- gemspec
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in qtc-sdk.gemspec
4
+ gemspec
data/LICENSE.txt CHANGED
@@ -1,22 +1,22 @@
1
- Copyright (c) 2014 Jari Kolehmainen
2
-
3
- MIT License
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1
+ Copyright (c) 2014 Jari Kolehmainen
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,44 +1,44 @@
1
- # Qt Cloud Services SDK for Ruby
2
-
3
- This is Qt Cloud Services SDK for Ruby. What is Qt Cloud Services? See below:
4
-
5
- * The Qt Cloud Services home page is at https://www.qtc.io
6
- * The Developer Documentation page is at https://developer.qtc.io
7
-
8
- ## Getting Started
9
-
10
- You can find a getting started guide for Qt Cloud Services at:
11
-
12
- http://developer.qtc.io/qtc/getting-started?snippets=ruby
13
-
14
- If you are looking for service specific guides, please see:
15
-
16
- * [Enginio Data Storage](http://developer.qtc.io/eds/getting-started?snippets=ruby)
17
- * [Managed Application Runtime](http://developer.qtc.io/mar/getting-started?snippets=ruby)
18
-
19
-
20
- ## Installation
21
-
22
- Add this line to your application's Gemfile:
23
-
24
- gem 'qtc-sdk'
25
-
26
- And then execute:
27
-
28
- $ bundle
29
-
30
- Or install it yourself as:
31
-
32
- $ gem install qtc-sdk
33
-
34
- ## Usage
35
-
36
- TODO: Write usage instructions here
37
-
38
- ## Contributing
39
-
40
- 1. Fork it ( http://github.com/jakolehm/qtc-sdk-ruby/fork )
41
- 2. Create your feature branch (`git checkout -b my-new-feature`)
42
- 3. Commit your changes (`git commit -am 'Add some feature'`)
43
- 4. Push to the branch (`git push origin my-new-feature`)
44
- 5. Create new Pull Request
1
+ # Qt Cloud Services SDK for Ruby
2
+
3
+ This is Qt Cloud Services SDK for Ruby. What is Qt Cloud Services? See below:
4
+
5
+ * The Qt Cloud Services home page is at https://www.qtc.io
6
+ * The Developer Documentation page is at https://developer.qtc.io
7
+
8
+ ## Getting Started
9
+
10
+ You can find a getting started guide for Qt Cloud Services at:
11
+
12
+ http://developer.qtc.io/qtc/getting-started?snippets=ruby
13
+
14
+ If you are looking for service specific guides, please see:
15
+
16
+ * [Enginio Data Storage](http://developer.qtc.io/eds/getting-started?snippets=ruby)
17
+ * [Managed Application Runtime](http://developer.qtc.io/mar/getting-started?snippets=ruby)
18
+
19
+
20
+ ## Installation
21
+
22
+ Add this line to your application's Gemfile:
23
+
24
+ gem 'qtc-sdk'
25
+
26
+ And then execute:
27
+
28
+ $ bundle
29
+
30
+ Or install it yourself as:
31
+
32
+ $ gem install qtc-sdk
33
+
34
+ ## Usage
35
+
36
+ TODO: Write usage instructions here
37
+
38
+ ## Contributing
39
+
40
+ 1. Fork it ( http://github.com/qtcloudservices/qtc-sdk-ruby/fork )
41
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
42
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
43
+ 4. Push to the branch (`git push origin my-new-feature`)
44
+ 5. Create new Pull Request
data/Rakefile CHANGED
@@ -1 +1 @@
1
- require "bundler/gem_tasks"
1
+ require "bundler/gem_tasks"
data/bin/qtc-cli CHANGED
@@ -1,14 +1,14 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- # resolve bin path, ignoring symlinks
5
- require 'pathname'
6
- bin_file = Pathname.new(__FILE__).realpath
7
-
8
- # add self to libpath
9
- $:.unshift File.expand_path('../../lib', bin_file)
10
-
11
- STDOUT.sync = true
12
-
13
- require 'commander/import'
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ # resolve bin path, ignoring symlinks
5
+ require 'pathname'
6
+ bin_file = Pathname.new(__FILE__).realpath
7
+
8
+ # add self to libpath
9
+ $:.unshift File.expand_path('../../lib', bin_file)
10
+
11
+ STDOUT.sync = true
12
+
13
+ require 'commander/import'
14
14
  require 'qtc/cli/commands'
@@ -1,15 +1,15 @@
1
- require 'qtc/version'
2
-
3
- module Qtc::Cli; end;
4
-
5
- program :name, 'qtc-cli'
6
- program :version, Qtc::VERSION
7
- program :description, 'Command line interface for Qt Cloud Services'
8
-
9
- default_command :help
10
- never_trace!
11
-
12
- require_relative 'platform/commands'
13
- require_relative 'eds/commands'
14
- require_relative 'mar/commands'
15
- require_relative 'mdb/commands'
1
+ require 'qtc/version'
2
+
3
+ module Qtc::Cli; end;
4
+
5
+ program :name, 'qtc-cli'
6
+ program :version, Qtc::VERSION
7
+ program :description, 'Command line interface for Qt Cloud Services'
8
+
9
+ default_command :help
10
+ never_trace!
11
+
12
+ require_relative 'platform/commands'
13
+ require_relative 'eds/commands'
14
+ require_relative 'mar/commands'
15
+ require_relative 'mdb/commands'
@@ -1,91 +1,146 @@
1
- require 'inifile'
2
- module Qtc
3
- module Cli
4
- module Common
5
-
6
- attr_accessor :datacenter_id
7
-
8
- def instance_info(instance_id)
9
- instance_data = platform_client.get("/instances/#{instance_id}")
10
- if instance_data
11
- response = platform_client.get("/instances/#{instance_id}/authorizations")
12
- if response['results']
13
- instance_data['authorizations'] = response['results']
14
- end
15
- else
16
- abort("Error: instance not found")
17
- end
18
-
19
- instance_data
20
- end
21
-
22
- def platform_client(token = nil)
23
- inifile['platform']['token'] = token unless token.nil?
24
- unless inifile['platform']['token']
25
- raise ArgumentError.new("Please login first using: qtc-cli login")
26
- end
27
-
28
- if @platform_client.nil?
29
- @platform_client = Qtc::Client.new(platform_base_url, {'Authorization' => "Bearer #{inifile['platform']['token']}"})
30
- end
31
-
32
- @platform_client
33
- end
34
-
35
- def ini_filename
36
- File.join(Dir.home, '/.qtc_client')
37
- end
38
-
39
- def inifile
40
- if @inifile.nil?
41
- if File.exists?(ini_filename)
42
- @inifile = IniFile.load(ini_filename)
43
- else
44
- @inifile = IniFile.new
45
- end
46
- end
47
-
48
- unless @inifile['platform']
49
- @inifile['platform'] = {}
50
- end
51
-
52
- @inifile
53
- end
54
-
55
- ##
56
- # @param [String,NilClass]
57
- # @return [String]
58
- def extract_app_in_dir(remote = nil)
59
- if File.exists?(File.expand_path('./.git/config'))
60
- remotes = []
61
- git_remotes = `git remote -v`
62
- git_remotes.lines.each do |line|
63
- if match = line.match(/#{remote}\s+git@git-mar-(.*)\:(.*) \(push\)/)
64
- remotes << match[2]
65
- end
66
- end
67
- apps = remotes.uniq
68
- if apps.size == 1
69
- return apps[0]
70
- elsif apps.size > 1
71
- raise ArgumentError.new("Multiple app git remotes\nSpecify app with --remote REMOTE or --app APP")
72
- end
73
- end
74
- end
75
-
76
- ##
77
- # @return [Qtc::Client]
78
- def client
79
- if @client.nil?
80
- @client = Qtc::Client.new(base_url)
81
- end
82
-
83
- @client
84
- end
85
-
86
- def platform_base_url
87
- ENV['QTC_PLATFORM_URL'] || 'https://api.qtc.io/v1'
88
- end
89
- end
90
- end
91
- end
1
+ require 'inifile'
2
+ module Qtc
3
+ module Cli
4
+ module Common
5
+
6
+ attr_accessor :datacenter_id
7
+
8
+ ##
9
+ # @param [String] instance_id
10
+ def instance_info(instance_id)
11
+ instance_data = platform_client.get("/instances/#{instance_id}")
12
+ unless instance_data
13
+ abort("Error: instance not found")
14
+ end
15
+
16
+ instance_data
17
+ end
18
+
19
+ ##
20
+ # @return [String]
21
+ def current_cloud_id
22
+ unless @current_cloud_id
23
+ unless inifile['platform']['current_cloud']
24
+ raise ArgumentError.new("Please specify used cloud first: qtc-cli clouds:use <id>")
25
+ end
26
+ @current_cloud_id = inifile['platform']['current_cloud']
27
+ self.datacenter_id = inifile['platform']['current_dc']
28
+ end
29
+ @current_cloud_id
30
+ end
31
+
32
+ ##
33
+ # @return [String]
34
+ def current_cloud_dc
35
+ unless @current_cloud_dc
36
+ unless inifile['platform']['current_cloud']
37
+ raise ArgumentError.new("Please specify used cloud first: qtc-cli clouds:use <id>")
38
+ end
39
+ @current_cloud_dc = inifile['platform']['current_dc']
40
+ end
41
+ @current_cloud_dc
42
+ end
43
+
44
+ ##
45
+ # @return [String]
46
+ def current_cloud_token
47
+ token = nil
48
+ begin
49
+ authorizations = platform_client.get("/accounts/#{current_cloud_id}/authorizations")
50
+ unless authorizations['results'][0]
51
+ platform_client.post("/accounts/#{current_cloud_id}/authorizations", {})
52
+ raise StandardError.new "retry"
53
+ end
54
+ token = authorizations['results'][0]['access_token']
55
+ rescue ArgumentError => e
56
+ raise e
57
+ rescue Qtc::Errors::StandardError => e
58
+ if e.status == 404
59
+ raise ArgumentError.new("Cloud not found. Please specify used cloud first: qtc-cli clouds:use <id>")
60
+ end
61
+ rescue => e
62
+ retry
63
+ end
64
+
65
+ token
66
+ end
67
+
68
+ ##
69
+ # @param [String] token
70
+ # @return [Qtc::Client]
71
+ def platform_client(token = nil)
72
+ inifile['platform']['token'] = token unless token.nil?
73
+ unless inifile['platform']['token']
74
+ raise ArgumentError.new("Please login first using: qtc-cli login")
75
+ end
76
+
77
+ if @platform_client.nil?
78
+ @platform_client = Qtc::Client.new(platform_base_url, {'Authorization' => "Bearer #{inifile['platform']['token']}"})
79
+ end
80
+
81
+ @platform_client
82
+ end
83
+
84
+ ##
85
+ # @return [String]
86
+ def ini_filename
87
+ File.join(Dir.home, '/.qtc_client')
88
+ end
89
+
90
+ ##
91
+ # @return [Hash]
92
+ def inifile
93
+ if @inifile.nil?
94
+ if File.exists?(ini_filename)
95
+ @inifile = IniFile.load(ini_filename)
96
+ else
97
+ @inifile = IniFile.new
98
+ end
99
+ end
100
+
101
+ unless @inifile['platform']
102
+ @inifile['platform'] = {}
103
+ end
104
+
105
+ @inifile
106
+ end
107
+
108
+ ##
109
+ # @param [String,NilClass]
110
+ # @return [String]
111
+ def extract_app_in_dir(remote = nil)
112
+ if File.exists?(File.expand_path('./.git/config'))
113
+ remotes = []
114
+ git_remotes = `git remote -v`
115
+ git_remotes.lines.each do |line|
116
+ if match = line.match(/#{remote}\s+git@git-mar-(.*)\:(.*) \(push\)/)
117
+ remotes << match[2]
118
+ end
119
+ end
120
+ apps = remotes.uniq
121
+ if apps.size == 1
122
+ return apps[0]
123
+ elsif apps.size > 1
124
+ raise ArgumentError.new("Multiple app git remotes\nSpecify app with --remote REMOTE or --app APP")
125
+ end
126
+ end
127
+ end
128
+
129
+ ##
130
+ # @return [Qtc::Client]
131
+ def client
132
+ if @client.nil?
133
+ @client = Qtc::Client.new(base_url)
134
+ end
135
+
136
+ @client
137
+ end
138
+
139
+ ##
140
+ # @return [String]
141
+ def platform_base_url
142
+ ENV['QTC_PLATFORM_URL'] || 'https://api.qtc.io/v1'
143
+ end
144
+ end
145
+ end
146
+ end
@@ -1,28 +1,28 @@
1
- require 'qtc/client'
2
- require_relative '../common'
3
-
4
- module Qtc
5
- module Cli
6
- module Eds
7
- class Base
8
- include Cli::Common
9
-
10
- protected
11
-
12
- ##
13
- # @return [Qtc::Client]
14
- def client
15
- if @client.nil?
16
- @client = Qtc::Client.new(base_url)
17
- end
18
-
19
- @client
20
- end
21
-
22
- def base_url
23
- ENV['QTC_EDS_URL'] || 'https://api.engin.io/v1'
24
- end
25
- end
26
- end
27
- end
1
+ require 'qtc/client'
2
+ require_relative '../common'
3
+
4
+ module Qtc
5
+ module Cli
6
+ module Eds
7
+ class Base
8
+ include Cli::Common
9
+
10
+ protected
11
+
12
+ ##
13
+ # @return [Qtc::Client]
14
+ def client
15
+ if @client.nil?
16
+ @client = Qtc::Client.new(base_url)
17
+ end
18
+
19
+ @client
20
+ end
21
+
22
+ def base_url
23
+ ENV['QTC_EDS_URL'] || 'https://api.engin.io/v1'
24
+ end
25
+ end
26
+ end
27
+ end
28
28
  end
@@ -1,20 +1,20 @@
1
- require_relative 'instances'
2
-
3
- command 'eds list' do |c|
4
- c.syntax = 'qtc-cli eds list'
5
- c.description = 'List all EDS instances'
6
- c.action do |args, options|
7
- Qtc::Cli::Eds::Instances.new.list
8
- end
9
- end
10
-
11
- command 'eds create' do |c|
12
- c.syntax = 'qtc-cli eds create <CLOUD_ID> <NAME>'
13
- c.description = 'Create a new EDS instance'
14
- c.example 'Create new EDS instance "My Backend" to cloud "46738209-a745-4841-8eeb-1ca0672aa6v8"', 'qtc-cli eds create 46738209-a745-4841-8eeb-1ca0672aa6v8 "My Backend"'
15
- c.action do |args, options|
16
- raise ArgumentError.new('CLOUD_ID is required') if args[0].nil?
17
- raise ArgumentError.new('NAME is required') if args[1].nil?
18
- Qtc::Cli::Eds::Instances.new.create(args[0], args[1])
19
- end
20
- end
1
+ require_relative 'instances'
2
+
3
+ command 'eds list' do |c|
4
+ c.syntax = 'qtc-cli eds list'
5
+ c.description = 'List all EDS instances'
6
+ c.action do |args, options|
7
+ Qtc::Cli::Eds::Instances.new.list
8
+ end
9
+ end
10
+
11
+ command 'eds create' do |c|
12
+ c.syntax = 'qtc-cli eds create <CLOUD_ID> <NAME>'
13
+ c.description = 'Create a new EDS instance'
14
+ c.example 'Create new EDS instance "My Backend" to cloud "46738209-a745-4841-8eeb-1ca0672aa6v8"', 'qtc-cli eds create 46738209-a745-4841-8eeb-1ca0672aa6v8 "My Backend"'
15
+ c.action do |args, options|
16
+ raise ArgumentError.new('CLOUD_ID is required') if args[0].nil?
17
+ raise ArgumentError.new('NAME is required') if args[1].nil?
18
+ Qtc::Cli::Eds::Instances.new.create(args[0], args[1])
19
+ end
20
+ end