rhc 1.23.7 → 1.24.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/autocomplete/rhc_bash
CHANGED
@@ -10,9 +10,9 @@ _rhc()
|
|
10
10
|
if [[ "$cur" == -* ]]; then
|
11
11
|
opts="--always-prefix --clean --config --debug --insecure --limit --mock --noprompt --password --raw --rhlogin --server --ssl-ca-file --ssl-client-cert-file --ssl-version --timeout --token"
|
12
12
|
elif [ -z $cur ]; then
|
13
|
-
opts="account alias alias-add alias-delete-cert alias-list alias-remove alias-update-cert app app-configure app-create app-delete app-deploy app-force-stop app-reload app-restart app-scale-down app-scale-up app-show app-start app-stop app-tidy apps authorization authorization-add authorization-delete authorization-delete-all authorization-list cartridge cartridge-add cartridge-list cartridge-reload cartridge-remove cartridge-restart cartridge-scale cartridge-show cartridge-start cartridge-status cartridge-stop cartridge-storage deployment deployment-activate deployment-list deployment-show domain domain-configure domain-create domain-delete domain-leave domain-list domain-rename domain-show env env-list env-set env-show env-unset git-clone logout member member-add member-list member-remove member-update port-forward scp server setup snapshot snapshot-restore snapshot-save ssh sshkey sshkey-add sshkey-list sshkey-remove sshkey-show tail threaddump"
|
13
|
+
opts="account alias alias-add alias-delete-cert alias-list alias-remove alias-update-cert app app-configure app-create app-delete app-deploy app-force-stop app-reload app-restart app-scale-down app-scale-up app-show app-start app-stop app-tidy apps authorization authorization-add authorization-delete authorization-delete-all authorization-list cartridge cartridge-add cartridge-list cartridge-reload cartridge-remove cartridge-restart cartridge-scale cartridge-show cartridge-start cartridge-status cartridge-stop cartridge-storage deployment deployment-activate deployment-list deployment-show domain domain-configure domain-create domain-delete domain-leave domain-list domain-rename domain-show env env-list env-set env-show env-unset git-clone logout member member-add member-list member-remove member-update port-forward scp server setup snapshot snapshot-restore snapshot-save ssh sshkey sshkey-add sshkey-list sshkey-remove sshkey-show tail team team-create team-delete team-leave team-list team-show threaddump"
|
14
14
|
else
|
15
|
-
opts="account account-logout activate-deployment add-alias add-authorization add-cartridge add-member add-sshkey alias alias-add alias-delete-cert alias-list alias-remove alias-update-cert aliases app app-configure app-create app-delete app-deploy app-env app-force-stop app-reload app-restart app-scale-down app-scale-up app-scp app-show app-snapshot app-ssh app-start app-stop app-tidy apps authorization authorization-add authorization-delete authorization-delete-all authorization-list authorizations cartridge cartridge-add cartridge-list cartridge-reload cartridge-remove cartridge-restart cartridge-scale cartridge-show cartridge-start cartridge-status cartridge-stop cartridge-storage cartridges configure-app configure-domain create-app create-domain delete-all-authorization delete-app delete-authorization delete-cert-alias delete-domain deploy deploy-app deployment deployment-activate deployment-list deployment-show deployments domain domain-configure domain-create domain-delete domain-leave domain-list domain-rename domain-show domains env env-add env-list env-remove env-set env-show env-unset force-stop-app git-clone leave-domain list-alias list-authorization list-cartridge list-deployment list-domain list-env list-member list-sshkey logout member member-add member-list member-remove member-update members port-forward reload-app reload-cartridge remove-alias remove-cartridge remove-member remove-sshkey rename-domain restart-app restart-cartridge restore-snapshot save-snapshot scale-cartridge scale-down-app scale-up-app scp server set-env setup show-app show-cartridge show-deployment show-domain show-env show-sshkey snapshot snapshot-restore snapshot-save ssh sshkey sshkey-add sshkey-list sshkey-remove sshkey-show start-app start-cartridge status-cartridge stop-app stop-cartridge storage-cartridge tail threaddump tidy-app unset-env update-cert-alias update-member"
|
15
|
+
opts="account account-logout activate-deployment add-alias add-authorization add-cartridge add-member add-sshkey alias alias-add alias-delete-cert alias-list alias-remove alias-update-cert aliases app app-configure app-create app-delete app-deploy app-env app-force-stop app-reload app-restart app-scale-down app-scale-up app-scp app-show app-snapshot app-ssh app-start app-stop app-tidy apps authorization authorization-add authorization-delete authorization-delete-all authorization-list authorizations cartridge cartridge-add cartridge-list cartridge-reload cartridge-remove cartridge-restart cartridge-scale cartridge-show cartridge-start cartridge-status cartridge-stop cartridge-storage cartridges configure-app configure-domain create-app create-domain create-team delete-all-authorization delete-app delete-authorization delete-cert-alias delete-domain delete-team deploy deploy-app deployment deployment-activate deployment-list deployment-show deployments domain domain-configure domain-create domain-delete domain-leave domain-list domain-rename domain-show domains env env-add env-list env-remove env-set env-show env-unset force-stop-app git-clone leave-domain leave-team list-alias list-authorization list-cartridge list-deployment list-domain list-env list-member list-sshkey list-team logout member member-add member-list member-remove member-update members port-forward reload-app reload-cartridge remove-alias remove-cartridge remove-member remove-sshkey rename-domain restart-app restart-cartridge restore-snapshot save-snapshot scale-cartridge scale-down-app scale-up-app scp server set-env setup show-app show-cartridge show-deployment show-domain show-env show-sshkey show-team snapshot snapshot-restore snapshot-save ssh sshkey sshkey-add sshkey-list sshkey-remove sshkey-show start-app start-cartridge status-cartridge stop-app stop-cartridge storage-cartridge tail team team-create team-delete team-leave team-list team-show teams threaddump tidy-app unset-env update-cert-alias update-member"
|
16
16
|
fi
|
17
17
|
else
|
18
18
|
prev="${COMP_WORDS[@]:0:COMP_CWORD}"
|
@@ -78,7 +78,7 @@ _rhc()
|
|
78
78
|
|
79
79
|
"rhc add-member")
|
80
80
|
if [[ "$cur" == -* ]]; then
|
81
|
-
opts="--global --ids --namespace --role --type"
|
81
|
+
opts="--global --ids --namespace --role --team-id --team-name --type"
|
82
82
|
else
|
83
83
|
opts=""
|
84
84
|
fi
|
@@ -780,6 +780,14 @@ _rhc()
|
|
780
780
|
fi
|
781
781
|
;;
|
782
782
|
|
783
|
+
"rhc create-team")
|
784
|
+
if [[ "$cur" == -* ]]; then
|
785
|
+
opts="--team-name"
|
786
|
+
else
|
787
|
+
opts=""
|
788
|
+
fi
|
789
|
+
;;
|
790
|
+
|
783
791
|
"rhc delete-all-authorization")
|
784
792
|
if [[ "$cur" == -* ]]; then
|
785
793
|
opts=""
|
@@ -820,6 +828,14 @@ _rhc()
|
|
820
828
|
fi
|
821
829
|
;;
|
822
830
|
|
831
|
+
"rhc delete-team")
|
832
|
+
if [[ "$cur" == -* ]]; then
|
833
|
+
opts="--team-id --team-name"
|
834
|
+
else
|
835
|
+
opts=""
|
836
|
+
fi
|
837
|
+
;;
|
838
|
+
|
823
839
|
"rhc deploy")
|
824
840
|
if [[ "$cur" == -* ]]; then
|
825
841
|
opts="--app --application-id --force-clean-build --hot-deploy --namespace --no-force-clean-build --no-hot-deploy --ref"
|
@@ -1156,6 +1172,14 @@ _rhc()
|
|
1156
1172
|
fi
|
1157
1173
|
;;
|
1158
1174
|
|
1175
|
+
"rhc leave-team")
|
1176
|
+
if [[ "$cur" == -* ]]; then
|
1177
|
+
opts="--team-id --team-name"
|
1178
|
+
else
|
1179
|
+
opts=""
|
1180
|
+
fi
|
1181
|
+
;;
|
1182
|
+
|
1159
1183
|
"rhc list-alias")
|
1160
1184
|
if [[ "$cur" == -* ]]; then
|
1161
1185
|
opts="--app --application-id --namespace"
|
@@ -1206,7 +1230,7 @@ _rhc()
|
|
1206
1230
|
|
1207
1231
|
"rhc list-member")
|
1208
1232
|
if [[ "$cur" == -* ]]; then
|
1209
|
-
opts="--all --app --ids --namespace --target"
|
1233
|
+
opts="--all --app --ids --namespace --target --team-id --team-name"
|
1210
1234
|
else
|
1211
1235
|
opts=""
|
1212
1236
|
fi
|
@@ -1220,6 +1244,14 @@ _rhc()
|
|
1220
1244
|
fi
|
1221
1245
|
;;
|
1222
1246
|
|
1247
|
+
"rhc list-team")
|
1248
|
+
if [[ "$cur" == -* ]]; then
|
1249
|
+
opts="--mine"
|
1250
|
+
else
|
1251
|
+
opts=""
|
1252
|
+
fi
|
1253
|
+
;;
|
1254
|
+
|
1223
1255
|
"rhc logout")
|
1224
1256
|
if [[ "$cur" == -* ]]; then
|
1225
1257
|
opts="--all"
|
@@ -1238,7 +1270,7 @@ _rhc()
|
|
1238
1270
|
|
1239
1271
|
"rhc member add")
|
1240
1272
|
if [[ "$cur" == -* ]]; then
|
1241
|
-
opts="--global --ids --namespace --role --type"
|
1273
|
+
opts="--global --ids --namespace --role --team-id --team-name --type"
|
1242
1274
|
else
|
1243
1275
|
opts=""
|
1244
1276
|
fi
|
@@ -1246,7 +1278,7 @@ _rhc()
|
|
1246
1278
|
|
1247
1279
|
"rhc member list")
|
1248
1280
|
if [[ "$cur" == -* ]]; then
|
1249
|
-
opts="--all --app --ids --namespace --target"
|
1281
|
+
opts="--all --app --ids --namespace --target --team-id --team-name"
|
1250
1282
|
else
|
1251
1283
|
opts=""
|
1252
1284
|
fi
|
@@ -1254,7 +1286,7 @@ _rhc()
|
|
1254
1286
|
|
1255
1287
|
"rhc member remove")
|
1256
1288
|
if [[ "$cur" == -* ]]; then
|
1257
|
-
opts="--all --ids --namespace --type"
|
1289
|
+
opts="--all --ids --namespace --team-id --team-name --type"
|
1258
1290
|
else
|
1259
1291
|
opts=""
|
1260
1292
|
fi
|
@@ -1270,7 +1302,7 @@ _rhc()
|
|
1270
1302
|
|
1271
1303
|
"rhc member-add")
|
1272
1304
|
if [[ "$cur" == -* ]]; then
|
1273
|
-
opts="--global --ids --namespace --role --type"
|
1305
|
+
opts="--global --ids --namespace --role --team-id --team-name --type"
|
1274
1306
|
else
|
1275
1307
|
opts=""
|
1276
1308
|
fi
|
@@ -1278,7 +1310,7 @@ _rhc()
|
|
1278
1310
|
|
1279
1311
|
"rhc member-list")
|
1280
1312
|
if [[ "$cur" == -* ]]; then
|
1281
|
-
opts="--all --app --ids --namespace --target"
|
1313
|
+
opts="--all --app --ids --namespace --target --team-id --team-name"
|
1282
1314
|
else
|
1283
1315
|
opts=""
|
1284
1316
|
fi
|
@@ -1286,7 +1318,7 @@ _rhc()
|
|
1286
1318
|
|
1287
1319
|
"rhc member-remove")
|
1288
1320
|
if [[ "$cur" == -* ]]; then
|
1289
|
-
opts="--all --ids --namespace --type"
|
1321
|
+
opts="--all --ids --namespace --team-id --team-name --type"
|
1290
1322
|
else
|
1291
1323
|
opts=""
|
1292
1324
|
fi
|
@@ -1302,7 +1334,7 @@ _rhc()
|
|
1302
1334
|
|
1303
1335
|
"rhc members")
|
1304
1336
|
if [[ "$cur" == -* ]]; then
|
1305
|
-
opts="--all --app --ids --namespace --target"
|
1337
|
+
opts="--all --app --ids --namespace --target --team-id --team-name"
|
1306
1338
|
else
|
1307
1339
|
opts=""
|
1308
1340
|
fi
|
@@ -1350,7 +1382,7 @@ _rhc()
|
|
1350
1382
|
|
1351
1383
|
"rhc remove-member")
|
1352
1384
|
if [[ "$cur" == -* ]]; then
|
1353
|
-
opts="--all --ids --namespace --type"
|
1385
|
+
opts="--all --ids --namespace --team-id --team-name --type"
|
1354
1386
|
else
|
1355
1387
|
opts=""
|
1356
1388
|
fi
|
@@ -1508,6 +1540,14 @@ _rhc()
|
|
1508
1540
|
fi
|
1509
1541
|
;;
|
1510
1542
|
|
1543
|
+
"rhc show-team")
|
1544
|
+
if [[ "$cur" == -* ]]; then
|
1545
|
+
opts="--team-id --team-name"
|
1546
|
+
else
|
1547
|
+
opts=""
|
1548
|
+
fi
|
1549
|
+
;;
|
1550
|
+
|
1511
1551
|
"rhc snapshot")
|
1512
1552
|
if [[ "$cur" == -* ]]; then
|
1513
1553
|
opts=""
|
@@ -1684,6 +1724,102 @@ _rhc()
|
|
1684
1724
|
fi
|
1685
1725
|
;;
|
1686
1726
|
|
1727
|
+
"rhc team")
|
1728
|
+
if [[ "$cur" == -* ]]; then
|
1729
|
+
opts=""
|
1730
|
+
else
|
1731
|
+
opts="create show list delete leave"
|
1732
|
+
fi
|
1733
|
+
;;
|
1734
|
+
|
1735
|
+
"rhc team create")
|
1736
|
+
if [[ "$cur" == -* ]]; then
|
1737
|
+
opts="--team-name"
|
1738
|
+
else
|
1739
|
+
opts=""
|
1740
|
+
fi
|
1741
|
+
;;
|
1742
|
+
|
1743
|
+
"rhc team delete")
|
1744
|
+
if [[ "$cur" == -* ]]; then
|
1745
|
+
opts="--team-id --team-name"
|
1746
|
+
else
|
1747
|
+
opts=""
|
1748
|
+
fi
|
1749
|
+
;;
|
1750
|
+
|
1751
|
+
"rhc team leave")
|
1752
|
+
if [[ "$cur" == -* ]]; then
|
1753
|
+
opts="--team-id --team-name"
|
1754
|
+
else
|
1755
|
+
opts=""
|
1756
|
+
fi
|
1757
|
+
;;
|
1758
|
+
|
1759
|
+
"rhc team list")
|
1760
|
+
if [[ "$cur" == -* ]]; then
|
1761
|
+
opts="--mine"
|
1762
|
+
else
|
1763
|
+
opts=""
|
1764
|
+
fi
|
1765
|
+
;;
|
1766
|
+
|
1767
|
+
"rhc team show")
|
1768
|
+
if [[ "$cur" == -* ]]; then
|
1769
|
+
opts="--team-id --team-name"
|
1770
|
+
else
|
1771
|
+
opts=""
|
1772
|
+
fi
|
1773
|
+
;;
|
1774
|
+
|
1775
|
+
"rhc team-create")
|
1776
|
+
if [[ "$cur" == -* ]]; then
|
1777
|
+
opts="--team-name"
|
1778
|
+
else
|
1779
|
+
opts=""
|
1780
|
+
fi
|
1781
|
+
;;
|
1782
|
+
|
1783
|
+
"rhc team-delete")
|
1784
|
+
if [[ "$cur" == -* ]]; then
|
1785
|
+
opts="--team-id --team-name"
|
1786
|
+
else
|
1787
|
+
opts=""
|
1788
|
+
fi
|
1789
|
+
;;
|
1790
|
+
|
1791
|
+
"rhc team-leave")
|
1792
|
+
if [[ "$cur" == -* ]]; then
|
1793
|
+
opts="--team-id --team-name"
|
1794
|
+
else
|
1795
|
+
opts=""
|
1796
|
+
fi
|
1797
|
+
;;
|
1798
|
+
|
1799
|
+
"rhc team-list")
|
1800
|
+
if [[ "$cur" == -* ]]; then
|
1801
|
+
opts="--mine"
|
1802
|
+
else
|
1803
|
+
opts=""
|
1804
|
+
fi
|
1805
|
+
;;
|
1806
|
+
|
1807
|
+
"rhc team-show")
|
1808
|
+
if [[ "$cur" == -* ]]; then
|
1809
|
+
opts="--team-id --team-name"
|
1810
|
+
else
|
1811
|
+
opts=""
|
1812
|
+
fi
|
1813
|
+
;;
|
1814
|
+
|
1815
|
+
"rhc teams")
|
1816
|
+
if [[ "$cur" == -* ]]; then
|
1817
|
+
opts="--mine"
|
1818
|
+
else
|
1819
|
+
opts=""
|
1820
|
+
fi
|
1821
|
+
;;
|
1822
|
+
|
1687
1823
|
"rhc threaddump")
|
1688
1824
|
if [[ "$cur" == -* ]]; then
|
1689
1825
|
opts="--app --application-id --namespace"
|
data/features/members_feature.rb
CHANGED
@@ -104,7 +104,7 @@ describe "rhc member scenarios" do
|
|
104
104
|
members.any?{ |m| m.id == other_users[user1].id && m.editor? }.should be_true
|
105
105
|
members.any?{ |m| m.id == other_users[user2].id && m.editor? }.should be_true
|
106
106
|
|
107
|
-
r = rhc 'remove-member', domain.name, '--all'
|
107
|
+
r = rhc 'remove-member', '-n', domain.name, '--all'
|
108
108
|
r.status.should == 0
|
109
109
|
r.stdout.should match "Removing all members from domain.*done"
|
110
110
|
members = client.find_domain(domain.name).members
|
data/lib/rhc/commands/app.rb
CHANGED
@@ -116,8 +116,8 @@ module RHC::Commands
|
|
116
116
|
:url => (cartridge.url if cartridge.custom?),
|
117
117
|
:gear_size => options.gear_size || cartridge.gear_profile,
|
118
118
|
:additional_gear_storage => (cartridge.additional_gear_storage if cartridge.additional_gear_storage > 0),
|
119
|
-
:scales_from => (cartridge.scales_from if cartridge.scalable?),
|
120
|
-
:scales_to => (cartridge.scales_to if cartridge.scalable?)
|
119
|
+
:scales_from => (cartridge.scales_from if scaling && cartridge.scalable?),
|
120
|
+
:scales_to => (cartridge.scales_to if scaling && cartridge.scalable?)
|
121
121
|
}.reject{|k,v| v.nil? }
|
122
122
|
end
|
123
123
|
end
|
@@ -130,6 +130,7 @@ module RHC::Commands
|
|
130
130
|
def remove(cartridge)
|
131
131
|
rest_app = find_app(:include => :cartridges)
|
132
132
|
rest_cartridge = check_cartridges(cartridge, :from => rest_app.cartridges).first
|
133
|
+
external_zero_gears = external_zero_gears_cartridge?(rest_cartridge)
|
133
134
|
|
134
135
|
confirm_action "Removing a cartridge is a destructive operation that may result in loss of data associated with the cartridge.\n\nAre you sure you wish to remove #{rest_cartridge.name} from '#{rest_app.name}'?"
|
135
136
|
|
@@ -139,6 +140,8 @@ module RHC::Commands
|
|
139
140
|
|
140
141
|
paragraph{ rest_cartridge.messages.each { |msg| success msg } }
|
141
142
|
|
143
|
+
paragraph{ warn 'There may be external resources or accounts associated with this external cartridge that need to be removed manually.' } if external_zero_gears
|
144
|
+
|
142
145
|
0
|
143
146
|
end
|
144
147
|
|
@@ -325,5 +328,9 @@ module RHC::Commands
|
|
325
328
|
end
|
326
329
|
resp
|
327
330
|
end
|
331
|
+
|
332
|
+
def external_zero_gears_cartridge?(rest_cartridge)
|
333
|
+
rest_cartridge.external? && rest_cartridge.current_scale == 0
|
334
|
+
end
|
328
335
|
end
|
329
336
|
end
|
data/lib/rhc/commands/member.rb
CHANGED
@@ -2,53 +2,82 @@ require 'rhc/commands/base'
|
|
2
2
|
|
3
3
|
module RHC::Commands
|
4
4
|
class Member < Base
|
5
|
-
summary "Manage membership on domains"
|
5
|
+
summary "Manage membership on domains and teams"
|
6
6
|
syntax "<action>"
|
7
7
|
description <<-DESC
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
Domain Membership
|
9
|
+
Developers can collaborate on applications by adding people or teams to
|
10
|
+
domains as members. Each member has a role (admin, edit, or view),
|
11
|
+
and those roles determine what the user can do with the domain and the
|
12
|
+
applications contained within.
|
12
13
|
|
13
|
-
|
14
|
+
Domain Member Roles
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
16
|
+
view - able to see the domain and its apps, but not make any changes
|
17
|
+
edit - create, update, and delete applications, and has Git and SSH access
|
18
|
+
admin - can update membership of a domain
|
19
|
+
|
20
|
+
The default role granted to domain members is 'edit' - use the '--role'
|
21
|
+
argument to specify a different role. When adding and removing members, you
|
22
|
+
can use their 'login' value (typically their email or a short unique name for
|
23
|
+
them), or their 'id'. Both login and ID are visible via the 'rhc account'
|
24
|
+
command.
|
25
|
+
|
26
|
+
To see existing members of a domain or application, use:
|
27
|
+
|
28
|
+
rhc members -n DOMAIN_NAME [-a APP_NAME]
|
29
|
+
|
30
|
+
To change the role for a domain member, simply call the update-member command
|
31
|
+
with the new role. You cannot change the role of the owner.
|
32
|
+
|
33
|
+
Team Membership
|
34
|
+
People who typically share the same role can be added to a team. The team can
|
35
|
+
then be added as a member of a domain, and all of the people in the team will
|
36
|
+
inherit the team's role on the domain.
|
37
|
+
|
38
|
+
If a person is a member of multiple teams which are members of a domain, or
|
39
|
+
is also added as a domain member individually, their effective role is the
|
40
|
+
higher of their individual role or their teams' roles on the domain.
|
18
41
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
'id'. Both login and ID are visible via the 'rhc account' command.
|
42
|
+
Team Member Roles
|
43
|
+
view - able to see information about the team and its members, and
|
44
|
+
has access to all domains the team is a member of
|
23
45
|
|
24
|
-
|
46
|
+
To see existing members of a team, use:
|
25
47
|
|
26
|
-
|
48
|
+
rhc members -t TEAM_NAME
|
27
49
|
|
28
|
-
To change the role for a user, simply call the add-member command with the new role. You
|
29
|
-
cannot change the role of the owner.
|
30
50
|
DESC
|
31
51
|
syntax "<action>"
|
32
52
|
default_action :help
|
33
53
|
|
34
|
-
summary "List members of a domain or
|
35
|
-
syntax
|
54
|
+
summary "List members of a domain, application, or team"
|
55
|
+
syntax [
|
56
|
+
"<domain_name>[/<app_name>] [--all]",
|
57
|
+
"-n DOMAIN_NAME [--all]",
|
58
|
+
"-n DOMAIN_NAME -a APP_NAME [--all]",
|
59
|
+
nil,
|
60
|
+
"-t TEAM_NAME"
|
61
|
+
]
|
36
62
|
description <<-DESC
|
37
|
-
Show the existing members of a domain
|
38
|
-
of your domain with '-n', the name of your application with '-a', or combine
|
39
|
-
them in the first argument to the command like:
|
63
|
+
Show the existing members of a domain, application, or team.
|
40
64
|
|
41
|
-
|
65
|
+
To show the members of a domain or application, you can pass the name of your
|
66
|
+
domain with '-n', the name of your application with '-a', or combine them in
|
67
|
+
the first argument to the command like:
|
68
|
+
rhc members <domain_name>[/<app_name>]
|
42
69
|
|
43
|
-
|
44
|
-
|
70
|
+
To show the members of a team, you can pass the name of the team with '-t':
|
71
|
+
rhc members -t TEAM_NAME
|
72
|
+
|
73
|
+
The owner is always listed first. To see the unique ID of members, pass '--ids'.
|
45
74
|
DESC
|
46
75
|
option ['--ids'], "Display the IDs of each member", :optional => true
|
47
76
|
option ['--all'], "Display all members, including members of teams", :optional => true
|
48
|
-
|
77
|
+
takes_membership_container :argument => true
|
49
78
|
alias_action :members, :root_command => true
|
50
|
-
def list(
|
51
|
-
target =
|
79
|
+
def list(_)
|
80
|
+
target = find_membership_container
|
52
81
|
|
53
82
|
members = target.members
|
54
83
|
if options.all
|
@@ -98,48 +127,66 @@ module RHC::Commands
|
|
98
127
|
0
|
99
128
|
end
|
100
129
|
|
101
|
-
summary "Add a member
|
102
|
-
syntax
|
130
|
+
summary "Add a member to a domain or team"
|
131
|
+
syntax [
|
132
|
+
"-n DOMAIN_NAME [--role view|edit|admin] <login>...",
|
133
|
+
"-n DOMAIN_NAME [--role view|edit|admin] <team_name>... --type team [--global]",
|
134
|
+
"-n DOMAIN_NAME [--role view|edit|admin] <id>... --ids [--type user|team]",
|
135
|
+
nil,
|
136
|
+
"-t TEAM_NAME <login>...",
|
137
|
+
"-t TEAM_NAME <id>... --ids",
|
138
|
+
]
|
103
139
|
description <<-DESC
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
140
|
+
Domain Membership
|
141
|
+
Add members to a domain by passing a user login, team name, or ID for each
|
142
|
+
member. The login and ID for each account are displayed in 'rhc account'.
|
143
|
+
To change the role for an existing domain member, use the 'rhc member update'
|
144
|
+
command.
|
108
145
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
146
|
+
Domain Member Roles
|
147
|
+
view - able to see information about the domain and its apps,
|
148
|
+
but not make any changes
|
149
|
+
edit - create, update, and delete applications, and has Git
|
150
|
+
and SSH access
|
151
|
+
admin - can update membership of a domain
|
152
|
+
|
153
|
+
The default role granted to domain members is 'edit'.
|
154
|
+
Use the '--role' argument for 'view' or 'admin'.
|
115
155
|
|
116
|
-
|
117
|
-
|
156
|
+
Team Membership
|
157
|
+
Add users to a team by passing a user login, or ID for each member.
|
158
|
+
|
159
|
+
Team Member Roles
|
160
|
+
view - able to see information about the team and its members, and
|
161
|
+
has access to all domains the team is a member of
|
118
162
|
|
119
163
|
Examples
|
120
164
|
rhc add-member sally joe -n mydomain
|
121
165
|
Gives the accounts with logins 'sally' and 'joe' edit access on mydomain
|
122
166
|
|
123
|
-
rhc add-member bob
|
124
|
-
Gives the account with login 'bob
|
167
|
+
rhc add-member bob --role admin -n mydomain
|
168
|
+
Gives the account with login 'bob' admin access on mydomain
|
125
169
|
|
126
170
|
rhc add-member team1 --type team --role admin -n mydomain
|
127
171
|
Gives your team named 'team1' admin access on mydomain
|
128
172
|
|
173
|
+
rhc add-member steve -t team1
|
174
|
+
Adds the account with login 'steve' as a member of your team named 'team1'
|
129
175
|
DESC
|
130
|
-
|
131
|
-
option ['--ids'], "
|
132
|
-
option ['-r', '--role ROLE'], "The role to give to each member - view, edit, or admin (default is 'edit')", :type => Role, :optional => true
|
133
|
-
option ['--type TYPE'], "Type of
|
134
|
-
option ['--global'], "
|
176
|
+
takes_membership_container :writable => true
|
177
|
+
option ['--ids'], "Add member(s) by ID", :optional => true
|
178
|
+
option ['-r', '--role ROLE'], "The role to give to each member - view, edit, or admin (default is 'edit' for domains, 'view' for teams)", :type => Role, :optional => true
|
179
|
+
option ['--type TYPE'], "Type of member(s) being added - user or team (default is 'user').", :optional => true
|
180
|
+
option ['--global'], "Add global-scoped teams as members. Must be used with '--type team'.", :optional => true
|
135
181
|
argument :members, "A list of members (user logins, team names, or IDs) to add. Pass --ids to treat this as a list of IDs.", [], :type => :list
|
136
182
|
def add(members)
|
137
|
-
target =
|
138
|
-
|
183
|
+
target = find_membership_container :writable => true
|
184
|
+
|
185
|
+
role = get_role_option(options, target)
|
139
186
|
type = get_type_option(options)
|
140
187
|
global = !!options.global
|
141
188
|
|
142
|
-
raise ArgumentError, 'You must pass at least one
|
189
|
+
raise ArgumentError, 'You must pass at least one member to this command.' unless members.present?
|
143
190
|
raise ArgumentError, "The --global option can only be used with '--type team'." if global && !team?(type)
|
144
191
|
|
145
192
|
say "Adding #{pluralize(members.length, role_name(role))} to #{target.class.model_name.downcase} ... "
|
@@ -153,7 +200,11 @@ module RHC::Commands
|
|
153
200
|
end
|
154
201
|
|
155
202
|
summary "Update a member on a domain"
|
156
|
-
syntax
|
203
|
+
syntax [
|
204
|
+
"-n DOMAIN_NAME --role view|edit|admin <login>...",
|
205
|
+
"-n DOMAIN_NAME --role view|edit|admin <team_name>... --type team",
|
206
|
+
"-n DOMAIN_NAME --role view|edit|admin <id>... --ids [--type user|team]",
|
207
|
+
]
|
157
208
|
description <<-DESC
|
158
209
|
Updates members on a domain by passing a user login, team name, or ID for
|
159
210
|
each member. You can use the 'rhc members' command to list the existing
|
@@ -166,31 +217,28 @@ module RHC::Commands
|
|
166
217
|
and SSH access
|
167
218
|
admin - can update membership of a domain
|
168
219
|
|
169
|
-
The default role granted to members when added is 'edit' - use the '--role'
|
170
|
-
argument for 'view' or 'admin'.
|
171
|
-
|
172
220
|
Examples
|
173
|
-
rhc update-member
|
174
|
-
Adds or updates the
|
221
|
+
rhc update-member -n mydomain --role view bob
|
222
|
+
Adds or updates the user with login 'bob' to 'admin' role on mydomain
|
175
223
|
|
176
|
-
rhc update-member
|
224
|
+
rhc update-member -n mydomain --role admin team1 --type team
|
177
225
|
Updates the team member with name 'team1' to the 'admin' role on mydomain
|
178
226
|
|
179
|
-
rhc update-member
|
227
|
+
rhc update-member -n mydomain --role admin team1_id --ids --type team
|
180
228
|
Adds or updates the team with ID 'team1_id' to the 'admin' role on mydomain
|
181
229
|
|
182
230
|
DESC
|
183
231
|
takes_domain
|
184
|
-
option ['--ids'], "
|
185
|
-
option ['-r', '--role ROLE'], "The role to give to each member - view, edit, or admin
|
186
|
-
option ['--type TYPE'], "Type of
|
232
|
+
option ['--ids'], "Update member(s) by ID", :optional => true
|
233
|
+
option ['-r', '--role ROLE'], "The role to give to each member - view, edit, or admin", :type => Role, :optional => false
|
234
|
+
option ['--type TYPE'], "Type of member(s) being updated - user or team (default is 'user').", :optional => true
|
187
235
|
argument :members, "A list of members (user logins, team names, or IDs) to update. Pass --ids to treat this as a list of IDs.", [], :type => :list
|
188
236
|
def update(members)
|
189
237
|
target = find_domain
|
190
|
-
role = get_role_option(options)
|
238
|
+
role = get_role_option(options, target)
|
191
239
|
type = get_type_option(options)
|
192
240
|
|
193
|
-
raise ArgumentError, 'You must pass at least one
|
241
|
+
raise ArgumentError, 'You must pass at least one member to this command.' unless members.present?
|
194
242
|
|
195
243
|
say "Updating #{pluralize(members.length, role_name(role))} to #{target.class.model_name.downcase} ... "
|
196
244
|
|
@@ -202,22 +250,33 @@ module RHC::Commands
|
|
202
250
|
0
|
203
251
|
end
|
204
252
|
|
205
|
-
summary "Remove a member from a domain"
|
206
|
-
syntax
|
253
|
+
summary "Remove a member from a domain or team"
|
254
|
+
syntax [
|
255
|
+
"-n DOMAIN_NAME <login>...",
|
256
|
+
"-n DOMAIN_NAME <team_name>... --type team",
|
257
|
+
"-n DOMAIN_NAME <id>... --ids [--type user|team]",
|
258
|
+
nil,
|
259
|
+
"-t TEAM_NAME <login>...",
|
260
|
+
"-t TEAM_NAME <id>... --ids",
|
261
|
+
]
|
207
262
|
description <<-DESC
|
208
263
|
Remove members from a domain by passing a user login, team name, or ID for each
|
209
264
|
member you wish to remove. View the list of existing members with
|
210
|
-
|
265
|
+
rhc members -n DOMAIN_NAME
|
211
266
|
|
212
|
-
|
267
|
+
Remove members from a team by passing a user login, or ID for each
|
268
|
+
member you wish to remove. View the list of existing members with
|
269
|
+
rhc members -t TEAM_NAME
|
270
|
+
|
271
|
+
Pass '--all' to remove all members but the owner.
|
213
272
|
DESC
|
214
|
-
|
215
|
-
option ['--ids'], "
|
216
|
-
option ['--all'], "Remove all members
|
217
|
-
option ['--type TYPE'], "Type of
|
218
|
-
argument :members, "A list of members (user logins, team names, or IDs) to remove
|
273
|
+
takes_membership_container :writable => true
|
274
|
+
option ['--ids'], "Remove member(s) by ID."
|
275
|
+
option ['--all'], "Remove all members"
|
276
|
+
option ['--type TYPE'], "Type of member(s) being removed - user or team (default is 'user').", :optional => true
|
277
|
+
argument :members, "A list of members (user logins, team names, or IDs) to remove. Pass --ids to treat this as a list of IDs.", [], :type => :list
|
219
278
|
def remove(members)
|
220
|
-
target =
|
279
|
+
target = find_membership_container :writable => true
|
221
280
|
type = get_type_option(options)
|
222
281
|
|
223
282
|
if options.all
|
@@ -226,7 +285,7 @@ module RHC::Commands
|
|
226
285
|
success "done"
|
227
286
|
|
228
287
|
else
|
229
|
-
raise ArgumentError, 'You must pass at least one
|
288
|
+
raise ArgumentError, 'You must pass at least one member to this command.' unless members.present?
|
230
289
|
|
231
290
|
say "Removing #{pluralize(members.length, 'member')} from #{target.class.model_name.downcase} ... "
|
232
291
|
|
@@ -240,22 +299,13 @@ module RHC::Commands
|
|
240
299
|
end
|
241
300
|
|
242
301
|
protected
|
243
|
-
def get_role_option(options,
|
244
|
-
options.role ||
|
302
|
+
def get_role_option(options, target)
|
303
|
+
options.role || target.default_member_role
|
245
304
|
end
|
246
305
|
|
247
|
-
def get_type_option(options
|
306
|
+
def get_type_option(options)
|
248
307
|
type = options.__hash__[:type]
|
249
|
-
|
250
|
-
when 'team'
|
251
|
-
type
|
252
|
-
when 'user'
|
253
|
-
type
|
254
|
-
when nil
|
255
|
-
default_value
|
256
|
-
else
|
257
|
-
raise ArgumentError, "The type '#{type}' is not valid. Type must be 'user' or 'team'."
|
258
|
-
end
|
308
|
+
type || 'user'
|
259
309
|
end
|
260
310
|
|
261
311
|
def changes_for(members, role, type)
|