rhc 1.23.7 → 1.24.4
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.
- data/autocomplete/rhc_bash +148 -12
- data/features/members_feature.rb +1 -1
- data/lib/rhc/commands/app.rb +2 -2
- data/lib/rhc/commands/cartridge.rb +7 -0
- data/lib/rhc/commands/member.rb +139 -89
- data/lib/rhc/commands/team.rb +103 -0
- data/lib/rhc/context_helper.rb +50 -9
- data/lib/rhc/exceptions.rb +2 -2
- data/lib/rhc/output_helpers.rb +28 -1
- data/lib/rhc/rest/cartridge.rb +15 -11
- data/lib/rhc/rest/client.rb +57 -6
- data/lib/rhc/rest/membership.rb +5 -1
- data/lib/rhc/rest/mock.rb +62 -7
- data/lib/rhc/rest/team.rb +14 -0
- data/lib/rhc/usage_templates/command_help.erb +10 -0
- data/lib/rhc/usage_templates/command_syntax_help.erb +11 -0
- data/spec/rhc/command_spec.rb +22 -3
- data/spec/rhc/commands/app_spec.rb +41 -0
- data/spec/rhc/commands/cartridge_spec.rb +2 -2
- data/spec/rhc/commands/member_spec.rb +9 -1
- data/spec/rhc/commands/team_spec.rb +191 -0
- metadata +8 -5
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'rhc/commands/base'
|
2
|
+
|
3
|
+
module RHC::Commands
|
4
|
+
class Team < Base
|
5
|
+
summary "Create or delete a team"
|
6
|
+
syntax "<action>"
|
7
|
+
description <<-DESC
|
8
|
+
People who typically share the same role can be added to a team. The team can
|
9
|
+
then be added as a member of a domain, and all of the people in the team will
|
10
|
+
inherit the team's role on the domain.
|
11
|
+
|
12
|
+
If a person is a member of multiple teams which are members of a domain, or
|
13
|
+
is also added as a domain member individually, their effective role is the
|
14
|
+
higher of their individual role or their teams' roles on the domain.
|
15
|
+
|
16
|
+
To create a team, run 'rhc create-team'.
|
17
|
+
|
18
|
+
To add members to an existing team, use the 'rhc add-member' command.
|
19
|
+
|
20
|
+
To list members of an existing team, use the 'rhc members' command.
|
21
|
+
DESC
|
22
|
+
default_action :help
|
23
|
+
|
24
|
+
summary "Create a new team"
|
25
|
+
syntax "<team_name>"
|
26
|
+
description <<-DESC
|
27
|
+
People who typically share the same role can be added to a team. The team can
|
28
|
+
then be added as a member of a domain, and all of the people in the team will
|
29
|
+
inherit the team's role on the domain.
|
30
|
+
|
31
|
+
If a person is a member of multiple teams which are members of a domain, or
|
32
|
+
is also added as a domain member individually, their effective role is the
|
33
|
+
higher of their individual role or their teams' roles on the domain.
|
34
|
+
DESC
|
35
|
+
argument :team_name, "New team name (min 2 chars, max 250 chars)", ["-t", "--team-name NAME"]
|
36
|
+
def create(name)
|
37
|
+
say "Creating team '#{name}' ... "
|
38
|
+
rest_client.add_team(name)
|
39
|
+
success "done"
|
40
|
+
|
41
|
+
info "You may now add team members using the 'rhc add-member' command"
|
42
|
+
|
43
|
+
0
|
44
|
+
end
|
45
|
+
|
46
|
+
summary "Display a team and its members"
|
47
|
+
syntax "<team_name>"
|
48
|
+
takes_team :argument => true
|
49
|
+
def show(_)
|
50
|
+
team = find_team
|
51
|
+
|
52
|
+
display_team(team, true)
|
53
|
+
|
54
|
+
0
|
55
|
+
end
|
56
|
+
|
57
|
+
summary "Display all teams you are a member of"
|
58
|
+
option ['--mine'], "Display only teams you own"
|
59
|
+
alias_action :teams, :root_command => true
|
60
|
+
def list
|
61
|
+
teams = rest_client.send(options.mine ? :owned_teams : :teams, {:include => "members"})
|
62
|
+
|
63
|
+
teams.each do |t|
|
64
|
+
display_team(t, true)
|
65
|
+
end
|
66
|
+
|
67
|
+
if options.mine
|
68
|
+
success "You have #{pluralize(teams.length, 'team')}."
|
69
|
+
else
|
70
|
+
success "You are a member of #{pluralize(teams.length, 'team')}."
|
71
|
+
end
|
72
|
+
|
73
|
+
0
|
74
|
+
end
|
75
|
+
|
76
|
+
summary "Delete a team"
|
77
|
+
syntax "<team_name>"
|
78
|
+
takes_team :argument => true
|
79
|
+
def delete(_)
|
80
|
+
team = find_team(:owned => true)
|
81
|
+
|
82
|
+
say "Deleting team '#{team.name}' ... "
|
83
|
+
team.destroy
|
84
|
+
success "deleted"
|
85
|
+
|
86
|
+
0
|
87
|
+
end
|
88
|
+
|
89
|
+
summary "Leave a team (remove your membership)"
|
90
|
+
syntax "<team_name> [-t TEAM_NAME] [--team-id TEAM_ID]"
|
91
|
+
takes_team :argument => true
|
92
|
+
def leave(_)
|
93
|
+
team = find_team
|
94
|
+
|
95
|
+
say "Leaving team ... "
|
96
|
+
result = team.leave
|
97
|
+
success "done"
|
98
|
+
result.messages.each{ |s| paragraph{ say s } }
|
99
|
+
|
100
|
+
0
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
data/lib/rhc/context_helper.rb
CHANGED
@@ -10,21 +10,43 @@ module RHC
|
|
10
10
|
|
11
11
|
def self.included(other)
|
12
12
|
other.module_eval do
|
13
|
+
def self.takes_team(opts={})
|
14
|
+
if opts[:argument]
|
15
|
+
argument :team_name, "Name of a team", ["-t", "--team-name NAME"], :allow_nil => true, :covered_by => :team_id
|
16
|
+
else
|
17
|
+
#:nocov:
|
18
|
+
option ["-t", "--team-name NAME"], "Name of a team", :covered_by => :team_id
|
19
|
+
#:nocov:
|
20
|
+
end
|
21
|
+
option ["--team-id ID"], "ID of a team", :covered_by => :team_name
|
22
|
+
end
|
23
|
+
|
13
24
|
def self.takes_domain(opts={})
|
14
25
|
if opts[:argument]
|
15
26
|
argument :namespace, "Name of a domain", ["-n", "--namespace NAME"], :allow_nil => true, :default => :from_local_git
|
16
27
|
else
|
28
|
+
#:nocov:
|
17
29
|
option ["-n", "--namespace NAME"], "Name of a domain", :default => :from_local_git
|
30
|
+
#:nocov:
|
18
31
|
end
|
19
32
|
end
|
20
|
-
|
21
|
-
def self.
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
33
|
+
|
34
|
+
def self.takes_membership_container(opts={})
|
35
|
+
if opts && opts[:argument]
|
36
|
+
if opts && opts[:writable]
|
37
|
+
#:nocov:
|
38
|
+
argument :namespace, "Name of a domain", ["-n", "--namespace NAME"], :allow_nil => true, :default => :from_local_git
|
39
|
+
#:nocov:
|
40
|
+
else
|
41
|
+
argument :target, "The name of a domain, or an application name with domain (domain or domain/application)", ["--target NAME_OR_PATH"], :allow_nil => true, :covered_by => [:application_id, :namespace, :app]
|
42
|
+
end
|
26
43
|
end
|
44
|
+
option ["-n", "--namespace NAME"], "Name of a domain"
|
45
|
+
option ["-a", "--app NAME"], "Name of an application" unless opts && opts[:writable]
|
46
|
+
option ["-t", "--team-name NAME"], "Name of a team"
|
47
|
+
option ["--team-id ID"], "ID of a team"
|
27
48
|
end
|
49
|
+
|
28
50
|
def self.takes_application(opts={})
|
29
51
|
if opts[:argument]
|
30
52
|
argument :app, "Name of an application", ["-a", "--app NAME"], :allow_nil => true, :default => :from_local_git, :covered_by => :application_id
|
@@ -37,6 +59,18 @@ module RHC
|
|
37
59
|
end
|
38
60
|
end
|
39
61
|
|
62
|
+
def find_team(opts={})
|
63
|
+
if id = options.team_id.presence
|
64
|
+
return rest_client.find_team_by_id(id, opts)
|
65
|
+
end
|
66
|
+
team_name = (opts && opts[:team_name]) || options.team_name
|
67
|
+
if team_name.present?
|
68
|
+
rest_client.find_team(team_name, opts)
|
69
|
+
else
|
70
|
+
raise ArgumentError, "You must specify a team name with -t, or a team id with --team-id."
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
40
74
|
def find_domain(opts={})
|
41
75
|
domain = options.namespace || options.target || namespace_context
|
42
76
|
if domain
|
@@ -46,7 +80,7 @@ module RHC
|
|
46
80
|
end
|
47
81
|
end
|
48
82
|
|
49
|
-
def
|
83
|
+
def find_membership_container(opts={})
|
50
84
|
domain, app =
|
51
85
|
if options.target.present?
|
52
86
|
options.target.split(/\//)
|
@@ -57,12 +91,19 @@ module RHC
|
|
57
91
|
[options.namespace || namespace_context, options.app]
|
58
92
|
end
|
59
93
|
end
|
60
|
-
|
94
|
+
|
95
|
+
if options.team_id.present?
|
96
|
+
rest_client.find_team_by_id(options.team_id)
|
97
|
+
elsif options.team_name.present?
|
98
|
+
rest_client.find_team(options.team_name)
|
99
|
+
elsif app && domain
|
61
100
|
rest_client.find_application(domain, app)
|
62
101
|
elsif domain
|
63
102
|
rest_client.find_domain(domain)
|
103
|
+
elsif opts && opts[:writable]
|
104
|
+
raise ArgumentError, "You must specify a domain with -n, or a team with -t."
|
64
105
|
else
|
65
|
-
raise ArgumentError, "You must specify a domain with -n,
|
106
|
+
raise ArgumentError, "You must specify a domain with -n, an application with -a, or a team with -t."
|
66
107
|
end
|
67
108
|
end
|
68
109
|
|
data/lib/rhc/exceptions.rb
CHANGED
@@ -214,13 +214,13 @@ module RHC
|
|
214
214
|
end
|
215
215
|
|
216
216
|
class ChangeMembersOnResourceNotSupported < Exception
|
217
|
-
def initialize(message="You can only add or remove members on a domain.")
|
217
|
+
def initialize(message="You can only add or remove members on a domain or team.")
|
218
218
|
super message, 1
|
219
219
|
end
|
220
220
|
end
|
221
221
|
|
222
222
|
class MembersNotSupported < Exception
|
223
|
-
def initialize(message="The server does not support adding or removing members.")
|
223
|
+
def initialize(message="The server does not support adding or removing members on this resource.")
|
224
224
|
super message, 1
|
225
225
|
end
|
226
226
|
end
|
data/lib/rhc/output_helpers.rb
CHANGED
@@ -1,6 +1,24 @@
|
|
1
1
|
module RHC
|
2
2
|
module OutputHelpers
|
3
3
|
|
4
|
+
def display_team(team, ids=false)
|
5
|
+
paragraph do
|
6
|
+
header ["Team #{team.name}", ("(owned by #{team.owner})" if team.owner.present?)] do
|
7
|
+
section(:bottom => 1) do
|
8
|
+
say format_table \
|
9
|
+
nil,
|
10
|
+
get_properties(
|
11
|
+
team,
|
12
|
+
(:id if ids),
|
13
|
+
(:global if team.global?),
|
14
|
+
:compact_members
|
15
|
+
),
|
16
|
+
:delete => true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
4
22
|
def display_domain(domain, applications=nil, ids=false)
|
5
23
|
paragraph do
|
6
24
|
header ["Domain #{domain.name}", ("(owned by #{domain.owner})" if domain.owner.present?)] do
|
@@ -144,7 +162,16 @@ module RHC
|
|
144
162
|
end
|
145
163
|
|
146
164
|
def format_usage_message(cart)
|
147
|
-
|
165
|
+
cart.usage_rates.map do |rate, plans|
|
166
|
+
plans = plans.map(&:capitalize) if plans
|
167
|
+
if plans && plans.length > 1
|
168
|
+
"This cartridge costs an additional $#{rate} per gear after the first 3 gears on the #{plans[0...-1].join(', ')} and #{plans[-1]} plans."
|
169
|
+
elsif plans && plans.length == 1
|
170
|
+
"This cartridge costs an additional $#{rate} per gear after the first 3 gears on the #{plans.first} plan."
|
171
|
+
else
|
172
|
+
"This cartridge costs an additional $#{rate} per gear after the first 3 gears."
|
173
|
+
end
|
174
|
+
end
|
148
175
|
end
|
149
176
|
|
150
177
|
def default_display_env_var(env_var_name, env_var_value=nil)
|
data/lib/rhc/rest/cartridge.rb
CHANGED
@@ -67,18 +67,22 @@ module RHC
|
|
67
67
|
end
|
68
68
|
|
69
69
|
def usage_rate?
|
70
|
-
|
71
|
-
|
72
|
-
end
|
73
|
-
|
74
|
-
def
|
75
|
-
rate = attribute(:usage_rate_usd)
|
76
|
-
|
77
|
-
|
78
|
-
|
70
|
+
rates = usage_rates
|
71
|
+
!(rates.nil? || rates.empty?)
|
72
|
+
end
|
73
|
+
|
74
|
+
def usage_rates
|
75
|
+
rate = attribute(:usage_rate_usd).to_f rescue 0.0
|
76
|
+
if rate > 0
|
77
|
+
{rate => []}
|
78
|
+
elsif attribute(:usage_rates).present?
|
79
|
+
attribute(:usage_rates).inject({}) do |plans_by_rate, rate|
|
80
|
+
if (usd = rate['usd'].to_f rescue 0.0) > 0
|
81
|
+
(plans_by_rate[usd] ||= []) << rate['plan_id']
|
82
|
+
end
|
83
|
+
plans_by_rate
|
84
|
+
end
|
79
85
|
end
|
80
|
-
|
81
|
-
rate.to_f rescue 0.0
|
82
86
|
end
|
83
87
|
|
84
88
|
def scaling
|
data/lib/rhc/rest/client.rb
CHANGED
@@ -64,19 +64,30 @@ module RHC
|
|
64
64
|
@user ||= api.rest_method "GET_USER"
|
65
65
|
end
|
66
66
|
|
67
|
-
def
|
68
|
-
debug "
|
67
|
+
def add_team(name, payload={})
|
68
|
+
debug "Adding team #{name} with options #{payload.inspect}"
|
69
|
+
@teams = nil
|
70
|
+
payload.delete_if{ |k,v| k.nil? or v.nil? }
|
71
|
+
if api.supports? 'ADD_TEAM'
|
72
|
+
api.rest_method "ADD_TEAM", {:name => name}.merge(payload)
|
73
|
+
else
|
74
|
+
raise RHC::TeamsNotSupportedException
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def teams(opts={})
|
79
|
+
debug "Getting teams you are a member of"
|
69
80
|
if link = api.link_href(:LIST_TEAMS)
|
70
|
-
@teams ||= api.rest_method
|
81
|
+
@teams ||= api.rest_method("LIST_TEAMS", opts)
|
71
82
|
else
|
72
83
|
raise RHC::TeamsNotSupportedException
|
73
84
|
end
|
74
85
|
end
|
75
86
|
|
76
|
-
def owned_teams
|
87
|
+
def owned_teams(opts={})
|
77
88
|
debug "Getting owned teams"
|
78
89
|
if link = api.link_href(:LIST_TEAMS_BY_OWNER)
|
79
|
-
@owned_teams ||= api.rest_method
|
90
|
+
@owned_teams ||= api.rest_method("LIST_TEAMS_BY_OWNER", opts.merge({:owner => '@self'}))
|
80
91
|
else
|
81
92
|
raise RHC::TeamsNotSupportedException
|
82
93
|
end
|
@@ -96,6 +107,35 @@ module RHC
|
|
96
107
|
owned_teams.select{|team| team.name.downcase =~ /#{Regexp.escape(search)}/i}
|
97
108
|
end
|
98
109
|
|
110
|
+
def find_team(name, options={})
|
111
|
+
precheck_team_id(name)
|
112
|
+
|
113
|
+
matching_teams = if options[:global]
|
114
|
+
search_teams(name, true).select { |t| t.name == name }
|
115
|
+
elsif options[:owned]
|
116
|
+
owned_teams.select { |t| t.name == name }
|
117
|
+
else
|
118
|
+
teams.select{ |t| t.name == name }
|
119
|
+
end
|
120
|
+
|
121
|
+
if matching_teams.blank?
|
122
|
+
raise TeamNotFoundException.new("Team with name #{name} not found")
|
123
|
+
elsif matching_teams.length > 1
|
124
|
+
raise TeamNotFoundException.new("Multiple teams with name #{name} found. Use --team-id to select the team by id.")
|
125
|
+
else
|
126
|
+
matching_teams.first
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def find_team_by_id(id, options={})
|
131
|
+
precheck_team_id(id)
|
132
|
+
if api.supports? :show_team
|
133
|
+
request(:url => link_show_team_by_id(id), :method => "GET", :payload => options)
|
134
|
+
else
|
135
|
+
teams.find{ |t| t.id == id }
|
136
|
+
end or raise TeamNotFoundException.new("Team with id #{id} not found")
|
137
|
+
end
|
138
|
+
|
99
139
|
#Find Domain by namespace
|
100
140
|
def find_domain(id)
|
101
141
|
debug "Finding domain #{id}"
|
@@ -153,6 +193,11 @@ module RHC
|
|
153
193
|
raise ApplicationNotFoundException.new("Application #{application} not found") if ['.','..'].include?(application)
|
154
194
|
end
|
155
195
|
|
196
|
+
def precheck_team_id(team)
|
197
|
+
raise TeamNotFoundException.new("Team not specified") if team.blank?
|
198
|
+
raise TeamNotFoundException.new("Team #{team} not found") if ['.','..'].include?(team)
|
199
|
+
end
|
200
|
+
|
156
201
|
def link_show_application_by_domain_name(domain, application, *args)
|
157
202
|
[
|
158
203
|
api.links['LIST_DOMAINS']['href'],
|
@@ -170,6 +215,10 @@ module RHC
|
|
170
215
|
api.link_href(:SHOW_DOMAIN, ':id' => domain)
|
171
216
|
end
|
172
217
|
|
218
|
+
def link_show_team_by_id(id, *args)
|
219
|
+
api.link_href(:SHOW_TEAM, {':id' => id}, *args)
|
220
|
+
end
|
221
|
+
|
173
222
|
#Find Cartridge by name or regex
|
174
223
|
def find_cartridges(name)
|
175
224
|
debug "Finding cartridge #{name}"
|
@@ -276,7 +325,7 @@ module RHC
|
|
276
325
|
# The list may not necessarily be sorted; we will select the last
|
277
326
|
# matching one supported by the server.
|
278
327
|
# See #api_version_negotiated
|
279
|
-
CLIENT_API_VERSIONS = [1.1, 1.2, 1.3, 1.4, 1.5, 1.6]
|
328
|
+
CLIENT_API_VERSIONS = [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7]
|
280
329
|
MAX_RETRIES = 5
|
281
330
|
|
282
331
|
def initialize(*args)
|
@@ -582,6 +631,8 @@ module RHC
|
|
582
631
|
data.map{ |json| EnvironmentVariable.new(json, self) }
|
583
632
|
when 'deployments'
|
584
633
|
data.map{ |json| Deployment.new(json, self) }
|
634
|
+
when 'team'
|
635
|
+
Team.new(data, self)
|
585
636
|
when 'teams'
|
586
637
|
data.map{ |json| Team.new(json, self) }
|
587
638
|
when 'member'
|
data/lib/rhc/rest/membership.rb
CHANGED
@@ -88,6 +88,10 @@ module RHC::Rest
|
|
88
88
|
supports? 'UPDATE_MEMBERS'
|
89
89
|
end
|
90
90
|
|
91
|
+
def default_member_role
|
92
|
+
'edit'
|
93
|
+
end
|
94
|
+
|
91
95
|
def members
|
92
96
|
@members ||=
|
93
97
|
if (members = attributes['members']).nil?
|
@@ -131,7 +135,7 @@ module RHC::Rest
|
|
131
135
|
end
|
132
136
|
|
133
137
|
def leave(options={})
|
134
|
-
raise RHC::MembersNotSupported unless supports? 'LEAVE'
|
138
|
+
raise RHC::MembersNotSupported.new("The server does not support leaving this resource.") unless supports? 'LEAVE'
|
135
139
|
rest_method "LEAVE", nil, options
|
136
140
|
ensure
|
137
141
|
@members = attributes['members'] = nil
|
data/lib/rhc/rest/mock.rb
CHANGED
@@ -89,7 +89,7 @@ module RHC::Rest::Mock
|
|
89
89
|
to_return({
|
90
90
|
:body => {
|
91
91
|
:data => mock_response_links(authorizations ? mock_api_with_authorizations : mock_real_client_links),
|
92
|
-
:supported_api_versions => [1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6],
|
92
|
+
:supported_api_versions => [1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7],
|
93
93
|
}.to_json
|
94
94
|
})
|
95
95
|
end
|
@@ -421,10 +421,12 @@ module RHC::Rest::Mock
|
|
421
421
|
end
|
422
422
|
|
423
423
|
def mock_client_links
|
424
|
-
[
|
424
|
+
mock_teams_links.concat([
|
425
|
+
['GET_USER', 'user/', 'get' ],
|
425
426
|
['ADD_DOMAIN', 'domains/add', 'post'],
|
426
427
|
['LIST_DOMAINS', 'domains/', 'get' ],
|
427
|
-
['LIST_CARTRIDGES', 'cartridges/', 'get' ]
|
428
|
+
['LIST_CARTRIDGES', 'cartridges/', 'get' ]
|
429
|
+
])
|
428
430
|
end
|
429
431
|
|
430
432
|
def mock_real_client_links
|
@@ -450,6 +452,15 @@ module RHC::Rest::Mock
|
|
450
452
|
])
|
451
453
|
end
|
452
454
|
|
455
|
+
def mock_team_links(team_id='test_team')
|
456
|
+
[['GET', "team/#{team_id}", 'get' ],
|
457
|
+
['ADD_MEMBER', "team/#{team_id}/members/", 'post', {'optional_params' => [{'name' => 'id'}, {'name' => 'login'}], 'required_params' => [{'name' => 'role'}]} ],
|
458
|
+
['LIST_MEMBERS', "team/#{team_id}/update", 'get' ],
|
459
|
+
['UPDATE_MEMBERS', "team/#{team_id}/delete", 'patch', {'optional_params' => [{'name' => 'id'}, {'name' => 'login'}, {'name' => 'members'}] } ],
|
460
|
+
['LEAVE', "team/#{team_id}/delete", 'delete' ],
|
461
|
+
['DELETE', "team/#{team_id}/delete", 'delete' ]]
|
462
|
+
end
|
463
|
+
|
453
464
|
def mock_domain_links(domain_id='test_domain')
|
454
465
|
[['ADD_APPLICATION', "domains/#{domain_id}/apps/add", 'post', {'optional_params' => [{'name' => 'environment_variables'}, {'name' => 'cartridges[][name]'}, {'name' => 'cartridges[][url]'}]} ],
|
455
466
|
['LIST_APPLICATIONS', "domains/#{domain_id}/apps/", 'get' ],
|
@@ -540,6 +551,7 @@ module RHC::Rest::Mock
|
|
540
551
|
end
|
541
552
|
end
|
542
553
|
@domains = []
|
554
|
+
@teams = []
|
543
555
|
@user = MockRestUser.new(self, config.username)
|
544
556
|
@api = MockRestApi.new(self, config)
|
545
557
|
@version = version
|
@@ -557,13 +569,17 @@ module RHC::Rest::Mock
|
|
557
569
|
@domains
|
558
570
|
end
|
559
571
|
|
572
|
+
def teams(opts={})
|
573
|
+
@teams
|
574
|
+
end
|
575
|
+
|
560
576
|
def api_version_negotiated
|
561
577
|
@version
|
562
578
|
end
|
563
579
|
|
564
580
|
def cartridges
|
565
581
|
premium_embedded = MockRestCartridge.new(self, "premium_cart", "embedded")
|
566
|
-
premium_embedded.
|
582
|
+
premium_embedded.usage_rates = {0.05 => []}
|
567
583
|
|
568
584
|
[MockRestCartridge.new(self, "mock_cart-1", "embedded"), # code should sort this to be after standalone
|
569
585
|
MockRestCartridge.new(self, "mock_standalone_cart-1", "standalone"),
|
@@ -579,6 +595,15 @@ module RHC::Rest::Mock
|
|
579
595
|
]
|
580
596
|
end
|
581
597
|
|
598
|
+
def add_team(name, extra=false)
|
599
|
+
t = MockRestTeam.new(self, name)
|
600
|
+
if extra
|
601
|
+
t.attributes['members'] = [{'owner' => true, 'name' => 'a_user_name'}]
|
602
|
+
end
|
603
|
+
@teams << t
|
604
|
+
t
|
605
|
+
end
|
606
|
+
|
582
607
|
def add_domain(id, extra=false)
|
583
608
|
d = MockRestDomain.new(self, id)
|
584
609
|
if extra
|
@@ -662,6 +687,35 @@ module RHC::Rest::Mock
|
|
662
687
|
end
|
663
688
|
end
|
664
689
|
|
690
|
+
class MockRestTeam < RHC::Rest::Team
|
691
|
+
include Helpers
|
692
|
+
def initialize(client, name, id="123")
|
693
|
+
super({}, client)
|
694
|
+
@id = id
|
695
|
+
@name = name
|
696
|
+
@members = []
|
697
|
+
self.attributes = {:links => mock_response_links(mock_team_links(id))}
|
698
|
+
end
|
699
|
+
|
700
|
+
def destroy
|
701
|
+
raise RHC::OperationNotSupportedException.new("The server does not support deleting this resource.") unless supports? 'DELETE'
|
702
|
+
client.teams.delete_if { |t| t.name == @name }
|
703
|
+
end
|
704
|
+
|
705
|
+
def init_members
|
706
|
+
@members ||= []
|
707
|
+
attributes['members'] ||= []
|
708
|
+
self
|
709
|
+
end
|
710
|
+
|
711
|
+
def add_member(member)
|
712
|
+
(@members ||= []) << member
|
713
|
+
(attributes['members'] ||= []) << member.attributes
|
714
|
+
self
|
715
|
+
end
|
716
|
+
|
717
|
+
end
|
718
|
+
|
665
719
|
class MockRestDomain < RHC::Rest::Domain
|
666
720
|
include Helpers
|
667
721
|
def initialize(client, id)
|
@@ -792,7 +846,7 @@ module RHC::Rest::Mock
|
|
792
846
|
self.attributes = {:links => mock_response_links(mock_app_links('mock_domain_0', 'mock_app_0')), :messages => []}
|
793
847
|
self.gear_count = 5
|
794
848
|
types = Array(type)
|
795
|
-
cart = add_cartridge(types.first,
|
849
|
+
cart = add_cartridge(types.first, true) if types.first
|
796
850
|
if scale
|
797
851
|
cart.supported_scales_to = (cart.scales_to = -1)
|
798
852
|
cart.supported_scales_from = (cart.scales_from = 2)
|
@@ -800,6 +854,7 @@ module RHC::Rest::Mock
|
|
800
854
|
cart.scales_with = "haproxy-1.4"
|
801
855
|
prox = add_cartridge('haproxy-1.4')
|
802
856
|
prox.collocated_with = [types.first]
|
857
|
+
prox.tags = ['web_proxy']
|
803
858
|
end
|
804
859
|
types.drop(1).each{ |c| add_cartridge(c, false) }
|
805
860
|
@framework = types.first
|
@@ -959,7 +1014,7 @@ module RHC::Rest::Mock
|
|
959
1014
|
class MockRestCartridge < RHC::Rest::Cartridge
|
960
1015
|
include Helpers
|
961
1016
|
|
962
|
-
attr_accessor :
|
1017
|
+
attr_accessor :usage_rates
|
963
1018
|
|
964
1019
|
def initialize(client, name, type, app=nil, tags=[], properties=[{'type' => 'cart_data', 'name' => 'connection_url', 'value' => "http://fake.url" }], description=nil)
|
965
1020
|
super({}, client)
|
@@ -975,7 +1030,7 @@ module RHC::Rest::Mock
|
|
975
1030
|
@current_scale = 1
|
976
1031
|
@gear_profile = 'small'
|
977
1032
|
@additional_gear_storage = 5
|
978
|
-
@
|
1033
|
+
@usage_rates = {}
|
979
1034
|
end
|
980
1035
|
|
981
1036
|
def destroy
|