vmc 0.4.5 → 0.4.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,4 @@
1
+ require "thread"
1
2
  require "vmc/cli/app/base"
2
3
 
3
4
  module VMC::App
@@ -67,19 +68,74 @@ module VMC::App
67
68
  input :app, :argument => true,
68
69
  :desc => "Application to inspect the file of",
69
70
  :from_given => by_name("app")
70
- input :path, :argument => true, :default => "/",
71
- :desc => "Path of file to stream"
71
+ input :path, :argument => :optional, :default => nil,
72
+ :desc => "Path of file to stream (default: all)"
72
73
  def tail
73
74
  app = input[:app]
74
- path = input[:path]
75
75
 
76
- app.stream_file(*path.split("/")) do |contents|
77
- print contents
76
+ lines = Queue.new
77
+ max_len = 0
78
+
79
+ if path = input[:path]
80
+ max_len = path.size
81
+ app.instances.each do |i|
82
+ Thread.new do
83
+ stream_path(lines, i, path.split("/"))
84
+ end
85
+ end
86
+ else
87
+ app.instances.each do |i|
88
+ i.files("logs").each do |path|
89
+ len = path.join("/").size
90
+ max_len = len if len > max_len
91
+
92
+ Thread.new do
93
+ stream_path(lines, i, path)
94
+ end
95
+ end
96
+ end
97
+ end
98
+
99
+ while line = lines.pop
100
+ instance, path, log = line
101
+
102
+ unless log.end_with?("\n")
103
+ log += i("%") if color?
104
+ log += "\n"
105
+ end
106
+
107
+ print "\##{c(instance.id, :instance)} "
108
+ print "#{c(path.join("/").ljust(max_len), :name)} "
109
+ print log
78
110
  end
79
111
  rescue CFoundry::NotFound
80
112
  fail "Invalid path #{b(path)} for app #{b(app.name)}"
81
113
  rescue CFoundry::FileError => e
82
114
  fail e.description
83
115
  end
116
+
117
+ def stream_path(lines, instance, path)
118
+ if verbose?
119
+ lines << [instance, path, c("streaming...", :good) + "\n"]
120
+ end
121
+
122
+ instance.stream_file(*path) do |contents|
123
+ contents.each_line do |line|
124
+ lines << [instance, path, line]
125
+ end
126
+ end
127
+
128
+ lines << [instance, path, c("end of file", :bad) + "\n"]
129
+ rescue Timeout::Error
130
+ if verbose?
131
+ lines << [
132
+ instance,
133
+ path,
134
+ c("timed out; reconnecting...", :bad) + "\n"
135
+ ]
136
+ end
137
+
138
+ retry
139
+ end
84
140
  end
85
141
  end
@@ -0,0 +1,87 @@
1
+ module VMC::App
2
+ module PushInteractions
3
+ def ask_name
4
+ ask("Name")
5
+ end
6
+
7
+ def ask_url(name)
8
+ choices = url_choices(name)
9
+
10
+ options = {
11
+ :choices => choices + ["none"],
12
+ :allow_other => true
13
+ }
14
+
15
+ options[:default] = choices.first if choices.size == 1
16
+
17
+ url = ask "URL", options
18
+
19
+ unless url == "none"
20
+ url
21
+ end
22
+ end
23
+
24
+ def ask_memory(default)
25
+ ask("Memory Limit",
26
+ :choices => memory_choices,
27
+ :allow_other => true,
28
+ :default => default || "64M")
29
+ end
30
+
31
+ def ask_instances
32
+ ask("Instances", :default => 1)
33
+ end
34
+
35
+ def ask_framework(choices, default, other)
36
+ ask_with_other("Framework", client.frameworks, choices, default, other)
37
+ end
38
+
39
+ def ask_runtime(choices, default, other)
40
+ ask_with_other("Runtime", client.runtimes, choices, default, other)
41
+ end
42
+
43
+ def ask_command
44
+ ask("Startup command")
45
+ end
46
+
47
+ def ask_create_services
48
+ line unless quiet?
49
+ ask "Create services for application?", :default => false
50
+ end
51
+
52
+ def ask_bind_services
53
+ return if all_instances.empty?
54
+
55
+ ask "Bind other services to application?", :default => false
56
+ end
57
+
58
+ private
59
+
60
+ def ask_with_other(message, all, choices, default, other)
61
+ choices = choices.sort_by(&:name)
62
+ choices << other if other
63
+
64
+ opts = {
65
+ :choices => choices,
66
+ :display => proc { |x|
67
+ if other && x == other
68
+ "other"
69
+ else
70
+ x.name
71
+ end
72
+ }
73
+ }
74
+
75
+ opts[:default] = default if default
76
+
77
+ res = ask(message, opts)
78
+
79
+ if other && res == other
80
+ opts[:choices] = all
81
+ res = ask(message, opts)
82
+ end
83
+
84
+ res
85
+ end
86
+ end
87
+ end
@@ -20,10 +20,10 @@ module VMC::App
20
20
  end
21
21
 
22
22
  def commit_changes(app)
23
- return unless app.changed?
24
-
25
- with_progress("Updating #{c(app.name, :name)}") do
26
- app.update!
23
+ if app.changed?
24
+ with_progress("Updating #{c(app.name, :name)}") do
25
+ app.update!
26
+ end
27
27
  end
28
28
 
29
29
  if input[:restart] && app.started?
@@ -0,0 +1,32 @@
1
+ require "vmc/cli/organization/base"
2
+
3
+ module VMC::Organization
4
+ class Create < Base
5
+ desc "Create an organization"
6
+ group :organizations
7
+ input :name, :desc => "Organization name", :argument => :optional
8
+ input :target, :desc => "Switch to the organization after creation",
9
+ :alias => "-t", :default => true
10
+ input :add_self, :desc => "Add yourself to the organization",
11
+ :default => true
12
+ def create_org
13
+ org = client.organization
14
+ org.name = input[:name]
15
+ org.users = [client.current_user] if input[:add_self]
16
+
17
+ with_progress("Creating organization #{c(org.name, :name)}") do
18
+ org.create!
19
+ end
20
+
21
+ if input[:target]
22
+ invoke :target, :organization => org
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def ask_name
29
+ ask("Name")
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,73 @@
1
+ require "vmc/cli/organization/base"
2
+
3
+ module VMC::Organization
4
+ class Delete < Base
5
+ desc "Delete an organization"
6
+ group :organizations
7
+ input :organization, :desc => "Organization to delete",
8
+ :aliases => %w{--org -o}, :argument => :optional,
9
+ :from_given => by_name(:organization)
10
+ input :recursive, :desc => "Delete recursively", :alias => "-r",
11
+ :default => false, :forget => true
12
+ input :warn, :desc => "Show warning if it was the last org",
13
+ :default => true
14
+ input :really, :type => :boolean, :forget => true, :hidden => true,
15
+ :default => proc { force? || interact }
16
+ def delete_org
17
+ org = input[:organization]
18
+ return unless input[:really, org]
19
+
20
+ spaces = org.spaces
21
+ unless spaces.empty?
22
+ unless force?
23
+ line "This organization is not empty!"
24
+ line
25
+ line "spaces: #{name_list(spaces)}"
26
+ line
27
+
28
+ return unless input[:recursive]
29
+ end
30
+
31
+ spaces.each do |s|
32
+ invoke :delete_space, :space => s, :really => true,
33
+ :recursive => true, :warn => false
34
+ end
35
+ end
36
+
37
+ is_current = org == client.current_organization
38
+
39
+ with_progress("Deleting organization #{c(org.name, :name)}") do
40
+ org.delete!
41
+ end
42
+
43
+ if orgs.size == 1
44
+ return unless input[:warn]
45
+
46
+ line
47
+ line c("There are no longer any organizations.", :warning)
48
+ line "You may want to create one with #{c("create-org", :good)}."
49
+ elsif is_current
50
+ invalidate_target
51
+ invoke :target
52
+ end
53
+ end
54
+
55
+ private
56
+
57
+ def ask_organization
58
+ orgs = client.organizations
59
+ fail "No organizations." if orgs.empty?
60
+
61
+ ask("Which organization", :choices => orgs.sort_by(&:name),
62
+ :display => proc(&:name))
63
+ end
64
+
65
+ def ask_really(org)
66
+ ask("Really delete #{c(org.name, :name)}?", :default => false)
67
+ end
68
+
69
+ def ask_recursive
70
+ ask "Delete #{c("EVERYTHING", :bad)}?", :default => false
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,44 @@
1
+ require "vmc/detect"
2
+
3
+ require "vmc/cli/service/base"
4
+
5
+ module VMC::Service
6
+ class Bind < Base
7
+ desc "Bind a service to an application"
8
+ group :services, :manage
9
+ input :service, :desc => "Service to bind", :argument => true,
10
+ :from_given => by_name(:service_instance, "service")
11
+ input :app, :desc => "Application to bind to", :argument => true,
12
+ :from_given => by_name(:app)
13
+ def bind_service
14
+ app = input[:app]
15
+ service = input[:service, app]
16
+
17
+ with_progress(
18
+ "Binding #{c(service.name, :name)} to #{c(app.name, :name)}") do |s|
19
+ if app.binds?(service)
20
+ s.skip do
21
+ err "App #{b(app.name)} already binds #{b(service.name)}."
22
+ end
23
+ else
24
+ app.bind(service)
25
+ end
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def ask_service(app)
32
+ services = client.service_instances
33
+ fail "No services." if services.empty?
34
+
35
+ ask "Which service?", :choices => services - app.services,
36
+ :display => proc(&:name)
37
+ end
38
+
39
+ def ask_app
40
+ ask "Which application?", :choices => client.apps,
41
+ :display => proc(&:name)
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,38 @@
1
+ require "vmc/detect"
2
+
3
+ require "vmc/cli/service/base"
4
+
5
+ module VMC::Service
6
+ class Binding < Base
7
+ desc "Unbind a service from an application"
8
+ group :services, :manage
9
+ input :service, :desc => "Service to unbind", :argument => true,
10
+ :from_given => by_name(:service, :service_instance)
11
+ input :app, :desc => "Application to unbind from", :argument => true,
12
+ :from_given => by_name(:app)
13
+ def unbind_service
14
+ app = input[:app]
15
+ service = input[:service, app]
16
+
17
+ with_progress(
18
+ "Unbinding #{c(service.name, :name)} from #{c(app.name, :name)}") do
19
+ app.unbind(service)
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def ask_service(app)
26
+ services = app.services
27
+ fail "No bound services." if services.empty?
28
+
29
+ ask "Which service?", :choices => services,
30
+ :display => proc(&:name)
31
+ end
32
+
33
+ def ask_app
34
+ ask "Which application?", :choices => client.apps,
35
+ :display => proc(&:name)
36
+ end
37
+ end
38
+ end
@@ -19,13 +19,13 @@ module VMC::Space
19
19
  org = input[:organization]
20
20
  spaces =
21
21
  with_progress("Getting spaces in #{c(org.name, :name)}") do
22
- org.spaces
22
+ org.spaces(:depth => quiet? ? 0 : 1)
23
23
  end
24
24
 
25
25
  line unless quiet?
26
26
 
27
- spaces.filter! do |s|
28
- space_matches?(s, input)
27
+ spaces.reject! do |s|
28
+ !space_matches?(s, input)
29
29
  end
30
30
 
31
31
  if input[:one_line]
@@ -38,14 +38,8 @@ module VMC
38
38
  changed_org = false
39
39
 
40
40
  if input.given?(:organization) || !org_valid?(info[:organization])
41
- orgs = client.organizations
42
- fail "No organizations!" if orgs.empty?
43
-
44
- if orgs.size == 1 && !input.given?(:organization)
45
- org = orgs.first
46
- else
47
- org = input[:organization, orgs.sort_by(&:name)]
48
- end
41
+ org = input[:organization]
42
+ return unless org
49
43
 
50
44
  with_progress("Switching to organization #{c(org.name, :name)}") do
51
45
  info[:organization] = org.guid
@@ -57,24 +51,8 @@ module VMC
57
51
 
58
52
  # switching org means switching space
59
53
  if changed_org || input.given?(:space) || !space_valid?(info[:space])
60
- spaces = org.spaces
61
-
62
- if spaces.empty?
63
- if changed_org
64
- line c("There are no spaces in #{b(org.name)}.", :warning)
65
- line "You may want to create one with #{c("create-space", :good)}."
66
- return
67
- else
68
- fail "No spaces!"
69
- end
70
- end
71
-
72
- if spaces.size == 1 && !input.given?(:space)
73
- space = spaces.first
74
- else
75
- line if changed_org && input.interactive?(:organization)
76
- space = input[:space, spaces.sort_by(&:name)]
77
- end
54
+ space = input[:space, org]
55
+ return unless space
78
56
 
79
57
  with_progress("Switching to space #{c(space.name, :name)}") do
80
58
  info[:space] = space.guid
@@ -9,14 +9,38 @@ module VMC::Start
9
9
  :desc => "Account email"
10
10
  input :password, :desc => "Account password"
11
11
  input(:organization, :aliases => ["--org", "-o"],
12
- :from_given => find_by_name("organization"),
13
- :desc => "Organization") { |orgs|
14
- ask("Organization", :choices => orgs, :display => proc(&:name))
12
+ :from_given => by_name("organization"),
13
+ :desc => "Organization") {
14
+ orgs = client.organizations(:depth => 0)
15
+
16
+ if orgs.empty?
17
+ unless quiet?
18
+ line
19
+ line c("There are no organizations.", :warning)
20
+ line "You may want to create one with #{c("create-org", :good)}."
21
+ end
22
+ elsif orgs.size == 1 && !input.interactive?(:organization)
23
+ orgs.first
24
+ else
25
+ ask("Organization",
26
+ :choices => orgs.sort_by(&:name),
27
+ :display => proc(&:name))
28
+ end
15
29
  }
16
30
  input(:space, :alias => "-s",
17
- :from_given => find_by_name("space"),
18
- :desc => "Space") { |spaces|
19
- ask("Space", :choices => spaces, :display => proc(&:name))
31
+ :from_given => by_name("space"),
32
+ :desc => "Space") { |org|
33
+ spaces = org.spaces(:depth => 0)
34
+
35
+ if spaces.empty?
36
+ unless quiet?
37
+ line
38
+ line c("There are no spaces in #{b(org.name)}.", :warning)
39
+ line "You may want to create one with #{c("create-space", :good)}."
40
+ end
41
+ else
42
+ ask("Space", :choices => spaces, :display => proc(&:name))
43
+ end
20
44
  }
21
45
  def login
22
46
  show_context
@@ -7,14 +7,38 @@ module VMC::Start
7
7
  group :start
8
8
  input :url, :argument => :optional, :desc => "Target URL to switch to"
9
9
  input(:organization, :aliases => ["--org", "-o"],
10
- :from_given => find_by_name("organization"),
11
- :desc => "Organization") { |orgs|
12
- ask("Organization", :choices => orgs, :display => proc(&:name))
10
+ :from_given => by_name("organization"),
11
+ :desc => "Organization") {
12
+ orgs = client.organizations(:depth => 0)
13
+
14
+ if orgs.empty?
15
+ unless quiet?
16
+ line
17
+ line c("There are no organizations.", :warning)
18
+ line "You may want to create one with #{c("create-org", :good)}."
19
+ end
20
+ elsif orgs.size == 1 && !input.interactive?(:organization)
21
+ orgs.first
22
+ else
23
+ ask("Organization",
24
+ :choices => orgs.sort_by(&:name),
25
+ :display => proc(&:name))
26
+ end
13
27
  }
14
28
  input(:space, :alias => "-s",
15
- :from_given => find_by_name("space"),
16
- :desc => "Space") { |spaces|
17
- ask("Space", :choices => spaces, :display => proc(&:name))
29
+ :from_given => by_name("space"),
30
+ :desc => "Space") { |org|
31
+ spaces = org.spaces(:depth => 0)
32
+
33
+ if spaces.empty?
34
+ unless quiet?
35
+ line
36
+ line c("There are no spaces in #{b(org.name)}.", :warning)
37
+ line "You may want to create one with #{c("create-space", :good)}."
38
+ end
39
+ else
40
+ ask("Space", :choices => spaces, :display => proc(&:name))
41
+ end
18
42
  }
19
43
  def target
20
44
  if !input.given?(:url) && !input.given?(:organization) && !input.given?(:space)
@@ -0,0 +1,35 @@
1
+ module VMC::Start
2
+ module TargetInteractions
3
+ def ask_organization
4
+ orgs = client.organizations(:depth => 0)
5
+
6
+ if orgs.empty?
7
+ unless quiet?
8
+ line
9
+ line c("There are no organizations.", :warning)
10
+ line "You may want to create one with #{c("create-org", :good)}."
11
+ end
12
+ elsif orgs.size == 1 && !input.interactive?(:organization)
13
+ orgs.first
14
+ else
15
+ ask("Organization",
16
+ :choices => orgs.sort_by(&:name),
17
+ :display => proc(&:name))
18
+ end
19
+ end
20
+
21
+ def ask_space(org)
22
+ spaces = org.spaces(:depth => 0)
23
+
24
+ if spaces.empty?
25
+ unless quiet?
26
+ line
27
+ line c("There are no spaces in #{b(org.name)}.", :warning)
28
+ line "You may want to create one with #{c("create-space", :good)}."
29
+ end
30
+ else
31
+ ask("Space", :choices => spaces, :display => proc(&:name))
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,10 @@
1
+ require "vmc/cli"
2
+
3
+ module VMC
4
+ module User
5
+ class Base < CLI
6
+ def precondition
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,37 @@
1
+ require "vmc/cli/user/base"
2
+
3
+ module VMC::User
4
+ class Create < Base
5
+ desc "Create a user"
6
+ group :admin, :user, :hidden => true
7
+ input :email, :desc => "User email", :argument => true
8
+ input :password, :desc => "User password"
9
+ input :verify, :desc => "Repeat password"
10
+ def create_user
11
+ email = input[:email]
12
+ password = input[:password]
13
+
14
+ if !force? && password != input[:verify]
15
+ fail "Passwords don't match."
16
+ end
17
+
18
+ with_progress("Creating user") do
19
+ client.register(email, password)
20
+ end
21
+ end
22
+
23
+ alias_command :create_user, :add_user
24
+
25
+ def ask_email
26
+ ask("Email")
27
+ end
28
+
29
+ def ask_password
30
+ ask("Password", :echo => "*", :forget => true)
31
+ end
32
+
33
+ def ask_verify
34
+ ask("Verify Password", :echo => "*", :forget => true)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,25 @@
1
+ require "vmc/cli/user/base"
2
+
3
+ module VMC::User
4
+ class Delete < Base
5
+ desc "Delete a user"
6
+ group :admin, :user, :hidden => true
7
+ input :email, :desc => "User to delete", :argument => true
8
+ input :really, :type => :boolean, :forget => true, :hidden => true,
9
+ :default => proc { force? || interact }
10
+ def delete_user
11
+ email = input[:email]
12
+ return unless input[:really, email]
13
+
14
+ with_progress("Deleting #{c(email, :name)}") do
15
+ client.user(email).delete!
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def ask_really(email)
22
+ ask("Really delete user #{c(email, :name)}?", :default => false)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,53 @@
1
+ require "vmc/cli/user/base"
2
+
3
+ module VMC::User
4
+ class Passwd < Base
5
+ desc "Update a user's password"
6
+ group :admin, :user, :hidden => true
7
+ input :user, :desc => "User to update", :argument => :optional,
8
+ :default => proc { client.current_user },
9
+ :from_given => proc { |email|
10
+ if v2? && client.current_user.email != email
11
+ fail "You can only change your own password on V2."
12
+ else
13
+ client.user(email)
14
+ end
15
+ }
16
+ input :password, :desc => "Current password"
17
+ input :new_password, :desc => "New password"
18
+ input :verify, :desc => "Repeat new password"
19
+ def passwd
20
+ user = input[:user]
21
+ password = input[:password] if v2?
22
+ new_password = input[:new_password]
23
+ verify = input[:verify]
24
+
25
+ if new_password != verify
26
+ fail "Passwords don't match."
27
+ end
28
+
29
+ with_progress("Changing password") do
30
+ if v2?
31
+ user.change_password!(new_password, password)
32
+ else
33
+ user.password = new_password
34
+ user.update!
35
+ end
36
+ end
37
+ end
38
+
39
+ private
40
+
41
+ def ask_password
42
+ ask("Current Password", :echo => "*", :forget => true)
43
+ end
44
+
45
+ def ask_new_password
46
+ ask("New Password", :echo => "*", :forget => true)
47
+ end
48
+
49
+ def ask_verify
50
+ ask("Verify Password", :echo => "*", :forget => true)
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,32 @@
1
+ require "vmc/cli/user/base"
2
+
3
+ module VMC::User
4
+ class Users < Base
5
+ desc "List all users"
6
+ group :admin, :hidden => true
7
+ def users
8
+ users =
9
+ with_progress("Getting users") do
10
+ client.users(:depth => 0)
11
+ end
12
+
13
+ spaced(users) do |u|
14
+ display_user(u)
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def display_user(u)
21
+ if quiet?
22
+ puts u.email
23
+ else
24
+ line "#{c(u.email, :name)}:"
25
+
26
+ indented do
27
+ line "admin?: #{c(u.admin?, u.admin? ? :yes : :no)}"
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
data/lib/vmc/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module VMC
2
- VERSION = "0.4.5".freeze
2
+ VERSION = "0.4.6".freeze
3
3
  end
@@ -266,12 +266,12 @@ describe VMC::App::Push do
266
266
  end
267
267
 
268
268
  context 'but there are no changes' do
269
- let(:inputs) { { :restart => true} }
269
+ let(:inputs) { { :restart => true } }
270
270
 
271
- it 'does not restart' do
271
+ it 'invokes the restart command' do
272
272
  stub(push).line
273
273
  dont_allow(app).update!
274
- dont_allow(push).invoke
274
+ mock(push).invoke(:restart, :app => app)
275
275
  subject
276
276
  end
277
277
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vmc
3
3
  version: !ruby/object:Gem::Version
4
- hash: 5
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 5
10
- version: 0.4.5
9
+ - 6
10
+ version: 0.4.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Alex Suraci
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-12-07 00:00:00 -08:00
18
+ date: 2012-12-11 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -90,12 +90,12 @@ dependencies:
90
90
  requirements:
91
91
  - - ~>
92
92
  - !ruby/object:Gem::Version
93
- hash: 27
93
+ hash: 25
94
94
  segments:
95
95
  - 0
96
96
  - 3
97
- - 4
98
- version: 0.3.4
97
+ - 5
98
+ version: 0.3.5
99
99
  type: :runtime
100
100
  version_requirements: *id005
101
101
  - !ruby/object:Gem::Dependency
@@ -263,12 +263,15 @@ files:
263
263
  - lib/vmc/plugin.rb
264
264
  - lib/vmc/constants.rb
265
265
  - lib/vmc/cli.rb
266
+ - lib/vmc/cli/organization/create.rb
266
267
  - lib/vmc/cli/organization/rename.rb
267
268
  - lib/vmc/cli/organization/delete_org.rb
268
269
  - lib/vmc/cli/organization/orgs.rb
269
270
  - lib/vmc/cli/organization/base.rb
271
+ - lib/vmc/cli/organization/delete.rb
270
272
  - lib/vmc/cli/organization/org.rb
271
273
  - lib/vmc/cli/organization/create_org.rb
274
+ - lib/vmc/cli/start/target_interactions.rb
272
275
  - lib/vmc/cli/start/targets.rb
273
276
  - lib/vmc/cli/start/register.rb
274
277
  - lib/vmc/cli/start/colors.rb
@@ -286,6 +289,7 @@ files:
286
289
  - lib/vmc/cli/app/health.rb
287
290
  - lib/vmc/cli/app/files.rb
288
291
  - lib/vmc/cli/app/push/create.rb
292
+ - lib/vmc/cli/app/push/interactions.rb
289
293
  - lib/vmc/cli/app/push/sync.rb
290
294
  - lib/vmc/cli/app/rename.rb
291
295
  - lib/vmc/cli/app/routes.rb
@@ -319,11 +323,18 @@ files:
319
323
  - lib/vmc/cli/space/delete.rb
320
324
  - lib/vmc/cli/service/service.rb
321
325
  - lib/vmc/cli/service/binding.rb
326
+ - lib/vmc/cli/service/bind.rb
322
327
  - lib/vmc/cli/service/create.rb
323
328
  - lib/vmc/cli/service/rename.rb
324
329
  - lib/vmc/cli/service/services.rb
330
+ - lib/vmc/cli/service/unbind.rb
325
331
  - lib/vmc/cli/service/base.rb
326
332
  - lib/vmc/cli/service/delete.rb
333
+ - lib/vmc/cli/user/passwd.rb
334
+ - lib/vmc/cli/user/create.rb
335
+ - lib/vmc/cli/user/base.rb
336
+ - lib/vmc/cli/user/delete.rb
337
+ - lib/vmc/cli/user/users.rb
327
338
  - lib/vmc/cli/help.rb
328
339
  - lib/vmc.rb
329
340
  - spec/support/interact_helpers.rb