rhc 1.27.4 → 1.28.5
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 +87 -23
- data/lib/rhc/auth.rb +1 -0
- data/lib/rhc/auth/basic.rb +8 -0
- data/lib/rhc/auth/token.rb +16 -7
- data/lib/rhc/auth/x509.rb +53 -0
- data/lib/rhc/autocomplete.rb +8 -0
- data/lib/rhc/autocomplete_templates/bash.erb +4 -4
- data/lib/rhc/commands/app.rb +21 -8
- data/lib/rhc/commands/base.rb +16 -2
- data/lib/rhc/commands/env.rb +2 -1
- data/lib/rhc/commands/region.rb +27 -0
- data/lib/rhc/commands/server.rb +19 -10
- data/lib/rhc/commands/sshkey.rb +1 -0
- data/lib/rhc/config.rb +1 -0
- data/lib/rhc/context_helper.rb +13 -11
- data/lib/rhc/exceptions.rb +12 -0
- data/lib/rhc/helpers.rb +26 -7
- data/lib/rhc/output_helpers.rb +21 -0
- data/lib/rhc/rest.rb +1 -0
- data/lib/rhc/rest/application.rb +5 -0
- data/lib/rhc/rest/client.rb +21 -0
- data/lib/rhc/rest/domain.rb +2 -1
- data/lib/rhc/rest/membership.rb +2 -0
- data/lib/rhc/rest/mock.rb +31 -0
- data/lib/rhc/rest/region.rb +25 -0
- data/lib/rhc/servers.rb +6 -4
- data/lib/rhc/wizard.rb +17 -5
- data/spec/rhc/auth_spec.rb +77 -5
- data/spec/rhc/command_spec.rb +14 -2
- data/spec/rhc/commands/app_spec.rb +14 -1
- data/spec/rhc/commands/env_spec.rb +2 -2
- data/spec/rhc/commands/member_spec.rb +7 -0
- data/spec/rhc/commands/region_spec.rb +50 -0
- data/spec/rhc/helpers_spec.rb +14 -0
- data/spec/rhc/wizard_spec.rb +31 -0
- metadata +10 -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 server-add server-configure server-list server-remove server-show server-status server-use 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"
|
|
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 help logout member member-add member-list member-remove member-update port-forward region region-list scp server server-add server-configure server-list server-remove server-show server-status server-use 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-server 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 configure-server 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-server 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-server remove-sshkey rename-domain restart-app restart-cartridge restore-snapshot save-snapshot scale-cartridge scale-down-app scale-up-app scp server server-add server-configure server-list server-remove server-show server-status server-use servers set-env setup show-app show-cartridge show-deployment show-domain show-env show-server 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 status-server 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 use-server"
|
|
15
|
+
opts="account account-logout activate-deployment add-alias add-authorization add-cartridge add-member add-server 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 configure-server 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 envs force-stop-app git-clone help leave-domain leave-team list-alias list-authorization list-cartridge list-deployment list-domain list-env list-member list-region list-server list-sshkey list-team logout member member-add member-list member-remove member-update members port-forward region region-list regions reload-app reload-cartridge remove-alias remove-cartridge remove-member remove-server remove-sshkey rename-domain restart-app restart-cartridge restore-snapshot save-snapshot scale-cartridge scale-down-app scale-up-app scp server server-add server-configure server-list server-remove server-show server-status server-use servers set-env setup show-app show-cartridge show-deployment show-domain show-env show-server show-sshkey show-team snapshot snapshot-restore snapshot-save ssh sshkey sshkey-add sshkey-list sshkey-remove sshkey-show sshkeys start-app start-cartridge status-cartridge status-server 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 use-server"
|
|
16
16
|
fi
|
|
17
17
|
else
|
|
18
18
|
prev="${COMP_WORDS[@]:0:COMP_CWORD}"
|
|
@@ -86,7 +86,7 @@ _rhc()
|
|
|
86
86
|
|
|
87
87
|
"rhc add-server")
|
|
88
88
|
if [[ "$cur" == -* ]]; then
|
|
89
|
-
opts="--insecure --nickname --no-insecure --no-use-authorization-tokens --rhlogin --server --skip-wizard --use --use-authorization-tokens"
|
|
89
|
+
opts="--insecure --nickname --no-insecure --no-use-authorization-tokens --rhlogin --server --skip-wizard --ssl-ca-file --ssl-client-cert-file --ssl-version --timeout --use --use-authorization-tokens"
|
|
90
90
|
else
|
|
91
91
|
opts=""
|
|
92
92
|
fi
|
|
@@ -104,7 +104,7 @@ _rhc()
|
|
|
104
104
|
if [[ "$cur" == -* ]]; then
|
|
105
105
|
opts=""
|
|
106
106
|
else
|
|
107
|
-
opts="add remove update-cert
|
|
107
|
+
opts="add delete-cert list remove update-cert"
|
|
108
108
|
fi
|
|
109
109
|
;;
|
|
110
110
|
|
|
@@ -200,7 +200,7 @@ _rhc()
|
|
|
200
200
|
if [[ "$cur" == -* ]]; then
|
|
201
201
|
opts=""
|
|
202
202
|
else
|
|
203
|
-
opts="create delete
|
|
203
|
+
opts="configure create delete deploy env force-stop reload restart scale-down scale-up show snapshot start stop tidy"
|
|
204
204
|
fi
|
|
205
205
|
;;
|
|
206
206
|
|
|
@@ -214,7 +214,7 @@ _rhc()
|
|
|
214
214
|
|
|
215
215
|
"rhc app create")
|
|
216
216
|
if [[ "$cur" == -* ]]; then
|
|
217
|
-
opts="--app --dns --enable-jenkins --env --from-app --from-code --gear-size --git --namespace --no-dns --no-git --no-keys --no-scaling --repo --scaling --type"
|
|
217
|
+
opts="--app --dns --enable-jenkins --env --from-app --from-code --gear-size --git --namespace --no-dns --no-git --no-keys --no-scaling --region --repo --scaling --type"
|
|
218
218
|
else
|
|
219
219
|
opts=""
|
|
220
220
|
fi
|
|
@@ -350,7 +350,7 @@ _rhc()
|
|
|
350
350
|
|
|
351
351
|
"rhc app-create")
|
|
352
352
|
if [[ "$cur" == -* ]]; then
|
|
353
|
-
opts="--app --dns --enable-jenkins --env --from-app --from-code --gear-size --git --namespace --no-dns --no-git --no-keys --no-scaling --repo --scaling --type"
|
|
353
|
+
opts="--app --dns --enable-jenkins --env --from-app --from-code --gear-size --git --namespace --no-dns --no-git --no-keys --no-scaling --region --repo --scaling --type"
|
|
354
354
|
else
|
|
355
355
|
opts=""
|
|
356
356
|
fi
|
|
@@ -488,7 +488,7 @@ _rhc()
|
|
|
488
488
|
if [[ "$cur" == -* ]]; then
|
|
489
489
|
opts=""
|
|
490
490
|
else
|
|
491
|
-
opts="
|
|
491
|
+
opts="add delete delete-all list"
|
|
492
492
|
fi
|
|
493
493
|
;;
|
|
494
494
|
|
|
@@ -568,7 +568,7 @@ _rhc()
|
|
|
568
568
|
if [[ "$cur" == -* ]]; then
|
|
569
569
|
opts=""
|
|
570
570
|
else
|
|
571
|
-
opts="list
|
|
571
|
+
opts="add list reload remove restart scale show start status stop storage"
|
|
572
572
|
fi
|
|
573
573
|
;;
|
|
574
574
|
|
|
@@ -774,7 +774,7 @@ _rhc()
|
|
|
774
774
|
|
|
775
775
|
"rhc configure-server")
|
|
776
776
|
if [[ "$cur" == -* ]]; then
|
|
777
|
-
opts="--hostname --insecure --nickname --no-insecure --no-use-authorization-tokens --rhlogin --server --skip-wizard --use --use-authorization-tokens"
|
|
777
|
+
opts="--hostname --insecure --nickname --no-insecure --no-use-authorization-tokens --rhlogin --server --skip-wizard --ssl-ca-file --ssl-client-cert-file --ssl-version --timeout --use --use-authorization-tokens"
|
|
778
778
|
else
|
|
779
779
|
opts=""
|
|
780
780
|
fi
|
|
@@ -782,7 +782,7 @@ _rhc()
|
|
|
782
782
|
|
|
783
783
|
"rhc create-app")
|
|
784
784
|
if [[ "$cur" == -* ]]; then
|
|
785
|
-
opts="--app --dns --enable-jenkins --env --from-app --from-code --gear-size --git --namespace --no-dns --no-git --no-keys --no-scaling --repo --scaling --type"
|
|
785
|
+
opts="--app --dns --enable-jenkins --env --from-app --from-code --gear-size --git --namespace --no-dns --no-git --no-keys --no-scaling --region --repo --scaling --type"
|
|
786
786
|
else
|
|
787
787
|
opts=""
|
|
788
788
|
fi
|
|
@@ -872,7 +872,7 @@ _rhc()
|
|
|
872
872
|
if [[ "$cur" == -* ]]; then
|
|
873
873
|
opts=""
|
|
874
874
|
else
|
|
875
|
-
opts="list show
|
|
875
|
+
opts="activate list show"
|
|
876
876
|
fi
|
|
877
877
|
;;
|
|
878
878
|
|
|
@@ -936,7 +936,7 @@ _rhc()
|
|
|
936
936
|
if [[ "$cur" == -* ]]; then
|
|
937
937
|
opts=""
|
|
938
938
|
else
|
|
939
|
-
opts="create
|
|
939
|
+
opts="configure create delete leave list rename show"
|
|
940
940
|
fi
|
|
941
941
|
;;
|
|
942
942
|
|
|
@@ -1064,7 +1064,7 @@ _rhc()
|
|
|
1064
1064
|
if [[ "$cur" == -* ]]; then
|
|
1065
1065
|
opts=""
|
|
1066
1066
|
else
|
|
1067
|
-
opts="add
|
|
1067
|
+
opts="add list remove set show unset"
|
|
1068
1068
|
fi
|
|
1069
1069
|
;;
|
|
1070
1070
|
|
|
@@ -1164,6 +1164,14 @@ _rhc()
|
|
|
1164
1164
|
fi
|
|
1165
1165
|
;;
|
|
1166
1166
|
|
|
1167
|
+
"rhc envs")
|
|
1168
|
+
if [[ "$cur" == -* ]]; then
|
|
1169
|
+
opts="--app --application-id --namespace --quotes --table"
|
|
1170
|
+
else
|
|
1171
|
+
opts=""
|
|
1172
|
+
fi
|
|
1173
|
+
;;
|
|
1174
|
+
|
|
1167
1175
|
"rhc force-stop-app")
|
|
1168
1176
|
if [[ "$cur" == -* ]]; then
|
|
1169
1177
|
opts="--app --application-id --namespace"
|
|
@@ -1180,6 +1188,14 @@ _rhc()
|
|
|
1180
1188
|
fi
|
|
1181
1189
|
;;
|
|
1182
1190
|
|
|
1191
|
+
"rhc help")
|
|
1192
|
+
if [[ "$cur" == -* ]]; then
|
|
1193
|
+
opts=""
|
|
1194
|
+
else
|
|
1195
|
+
opts="account account-logout activate-deployment add-alias add-authorization add-cartridge add-member add-server 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 configure-server 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 envs force-stop-app git-clone leave-domain leave-team list-alias list-authorization list-cartridge list-deployment list-domain list-env list-member list-region list-server list-sshkey list-team logout member member-add member-list member-remove member-update members port-forward region region-list regions reload-app reload-cartridge remove-alias remove-cartridge remove-member remove-server remove-sshkey rename-domain restart-app restart-cartridge restore-snapshot save-snapshot scale-cartridge scale-down-app scale-up-app scp server server-add server-configure server-list server-remove server-show server-status server-use servers set-env setup show-app show-cartridge show-deployment show-domain show-env show-server show-sshkey show-team snapshot snapshot-restore snapshot-save ssh sshkey sshkey-add sshkey-list sshkey-remove sshkey-show sshkeys start-app start-cartridge status-cartridge status-server 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 use-server"
|
|
1196
|
+
fi
|
|
1197
|
+
;;
|
|
1198
|
+
|
|
1183
1199
|
"rhc leave-domain")
|
|
1184
1200
|
if [[ "$cur" == -* ]]; then
|
|
1185
1201
|
opts="--namespace"
|
|
@@ -1252,6 +1268,14 @@ _rhc()
|
|
|
1252
1268
|
fi
|
|
1253
1269
|
;;
|
|
1254
1270
|
|
|
1271
|
+
"rhc list-region")
|
|
1272
|
+
if [[ "$cur" == -* ]]; then
|
|
1273
|
+
opts=""
|
|
1274
|
+
else
|
|
1275
|
+
opts=""
|
|
1276
|
+
fi
|
|
1277
|
+
;;
|
|
1278
|
+
|
|
1255
1279
|
"rhc list-server")
|
|
1256
1280
|
if [[ "$cur" == -* ]]; then
|
|
1257
1281
|
opts=""
|
|
@@ -1288,7 +1312,7 @@ _rhc()
|
|
|
1288
1312
|
if [[ "$cur" == -* ]]; then
|
|
1289
1313
|
opts=""
|
|
1290
1314
|
else
|
|
1291
|
-
opts="list
|
|
1315
|
+
opts="add list remove update"
|
|
1292
1316
|
fi
|
|
1293
1317
|
;;
|
|
1294
1318
|
|
|
@@ -1372,6 +1396,38 @@ _rhc()
|
|
|
1372
1396
|
fi
|
|
1373
1397
|
;;
|
|
1374
1398
|
|
|
1399
|
+
"rhc region")
|
|
1400
|
+
if [[ "$cur" == -* ]]; then
|
|
1401
|
+
opts=""
|
|
1402
|
+
else
|
|
1403
|
+
opts="list"
|
|
1404
|
+
fi
|
|
1405
|
+
;;
|
|
1406
|
+
|
|
1407
|
+
"rhc region list")
|
|
1408
|
+
if [[ "$cur" == -* ]]; then
|
|
1409
|
+
opts=""
|
|
1410
|
+
else
|
|
1411
|
+
opts=""
|
|
1412
|
+
fi
|
|
1413
|
+
;;
|
|
1414
|
+
|
|
1415
|
+
"rhc region-list")
|
|
1416
|
+
if [[ "$cur" == -* ]]; then
|
|
1417
|
+
opts=""
|
|
1418
|
+
else
|
|
1419
|
+
opts=""
|
|
1420
|
+
fi
|
|
1421
|
+
;;
|
|
1422
|
+
|
|
1423
|
+
"rhc regions")
|
|
1424
|
+
if [[ "$cur" == -* ]]; then
|
|
1425
|
+
opts=""
|
|
1426
|
+
else
|
|
1427
|
+
opts=""
|
|
1428
|
+
fi
|
|
1429
|
+
;;
|
|
1430
|
+
|
|
1375
1431
|
"rhc reload-app")
|
|
1376
1432
|
if [[ "$cur" == -* ]]; then
|
|
1377
1433
|
opts="--app --application-id --namespace"
|
|
@@ -1504,13 +1560,13 @@ _rhc()
|
|
|
1504
1560
|
if [[ "$cur" == -* ]]; then
|
|
1505
1561
|
opts=""
|
|
1506
1562
|
else
|
|
1507
|
-
opts="
|
|
1563
|
+
opts="add configure list remove show status use"
|
|
1508
1564
|
fi
|
|
1509
1565
|
;;
|
|
1510
1566
|
|
|
1511
1567
|
"rhc server add")
|
|
1512
1568
|
if [[ "$cur" == -* ]]; then
|
|
1513
|
-
opts="--insecure --nickname --no-insecure --no-use-authorization-tokens --rhlogin --server --skip-wizard --use --use-authorization-tokens"
|
|
1569
|
+
opts="--insecure --nickname --no-insecure --no-use-authorization-tokens --rhlogin --server --skip-wizard --ssl-ca-file --ssl-client-cert-file --ssl-version --timeout --use --use-authorization-tokens"
|
|
1514
1570
|
else
|
|
1515
1571
|
opts=""
|
|
1516
1572
|
fi
|
|
@@ -1518,7 +1574,7 @@ _rhc()
|
|
|
1518
1574
|
|
|
1519
1575
|
"rhc server configure")
|
|
1520
1576
|
if [[ "$cur" == -* ]]; then
|
|
1521
|
-
opts="--hostname --insecure --nickname --no-insecure --no-use-authorization-tokens --rhlogin --server --skip-wizard --use --use-authorization-tokens"
|
|
1577
|
+
opts="--hostname --insecure --nickname --no-insecure --no-use-authorization-tokens --rhlogin --server --skip-wizard --ssl-ca-file --ssl-client-cert-file --ssl-version --timeout --use --use-authorization-tokens"
|
|
1522
1578
|
else
|
|
1523
1579
|
opts=""
|
|
1524
1580
|
fi
|
|
@@ -1566,7 +1622,7 @@ _rhc()
|
|
|
1566
1622
|
|
|
1567
1623
|
"rhc server-add")
|
|
1568
1624
|
if [[ "$cur" == -* ]]; then
|
|
1569
|
-
opts="--insecure --nickname --no-insecure --no-use-authorization-tokens --rhlogin --server --skip-wizard --use --use-authorization-tokens"
|
|
1625
|
+
opts="--insecure --nickname --no-insecure --no-use-authorization-tokens --rhlogin --server --skip-wizard --ssl-ca-file --ssl-client-cert-file --ssl-version --timeout --use --use-authorization-tokens"
|
|
1570
1626
|
else
|
|
1571
1627
|
opts=""
|
|
1572
1628
|
fi
|
|
@@ -1574,7 +1630,7 @@ _rhc()
|
|
|
1574
1630
|
|
|
1575
1631
|
"rhc server-configure")
|
|
1576
1632
|
if [[ "$cur" == -* ]]; then
|
|
1577
|
-
opts="--hostname --insecure --nickname --no-insecure --no-use-authorization-tokens --rhlogin --server --skip-wizard --use --use-authorization-tokens"
|
|
1633
|
+
opts="--hostname --insecure --nickname --no-insecure --no-use-authorization-tokens --rhlogin --server --skip-wizard --ssl-ca-file --ssl-client-cert-file --ssl-version --timeout --use --use-authorization-tokens"
|
|
1578
1634
|
else
|
|
1579
1635
|
opts=""
|
|
1580
1636
|
fi
|
|
@@ -1712,7 +1768,7 @@ _rhc()
|
|
|
1712
1768
|
if [[ "$cur" == -* ]]; then
|
|
1713
1769
|
opts=""
|
|
1714
1770
|
else
|
|
1715
|
-
opts="save
|
|
1771
|
+
opts="restore save"
|
|
1716
1772
|
fi
|
|
1717
1773
|
;;
|
|
1718
1774
|
|
|
@@ -1760,7 +1816,7 @@ _rhc()
|
|
|
1760
1816
|
if [[ "$cur" == -* ]]; then
|
|
1761
1817
|
opts=""
|
|
1762
1818
|
else
|
|
1763
|
-
opts="list show
|
|
1819
|
+
opts="add list remove show"
|
|
1764
1820
|
fi
|
|
1765
1821
|
;;
|
|
1766
1822
|
|
|
@@ -1828,6 +1884,14 @@ _rhc()
|
|
|
1828
1884
|
fi
|
|
1829
1885
|
;;
|
|
1830
1886
|
|
|
1887
|
+
"rhc sshkeys")
|
|
1888
|
+
if [[ "$cur" == -* ]]; then
|
|
1889
|
+
opts=""
|
|
1890
|
+
else
|
|
1891
|
+
opts=""
|
|
1892
|
+
fi
|
|
1893
|
+
;;
|
|
1894
|
+
|
|
1831
1895
|
"rhc start-app")
|
|
1832
1896
|
if [[ "$cur" == -* ]]; then
|
|
1833
1897
|
opts="--app --application-id --namespace"
|
|
@@ -1896,7 +1960,7 @@ _rhc()
|
|
|
1896
1960
|
if [[ "$cur" == -* ]]; then
|
|
1897
1961
|
opts=""
|
|
1898
1962
|
else
|
|
1899
|
-
opts="create
|
|
1963
|
+
opts="create delete leave list show"
|
|
1900
1964
|
fi
|
|
1901
1965
|
;;
|
|
1902
1966
|
|
data/lib/rhc/auth.rb
CHANGED
data/lib/rhc/auth/basic.rb
CHANGED
|
@@ -32,6 +32,14 @@ module RHC::Auth
|
|
|
32
32
|
username? and not (password.nil? and @skip_interactive and @no_interactive)
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
+
def expired_token_message
|
|
36
|
+
"Your authorization token has expired. Please sign in now to continue on #{openshift_server}."
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def get_token_message
|
|
40
|
+
"Please sign in to start a new session to #{openshift_server}."
|
|
41
|
+
end
|
|
42
|
+
|
|
35
43
|
attr_reader :username
|
|
36
44
|
|
|
37
45
|
protected
|
data/lib/rhc/auth/token.rb
CHANGED
|
@@ -15,18 +15,27 @@ module RHC::Auth
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def to_request(request)
|
|
18
|
-
if token
|
|
19
|
-
debug "Using token authentication"
|
|
20
|
-
(request[:headers] ||= {})['authorization'] = "Bearer #{token}"
|
|
21
|
-
elsif auth and (!@allows_tokens or @can_get_token == false)
|
|
18
|
+
if auth and !token and (!@allows_tokens or @can_get_token == false)
|
|
22
19
|
debug "Bypassing token auth"
|
|
23
20
|
auth.to_request(request)
|
|
21
|
+
else
|
|
22
|
+
# If no token is available an empty one will be submitted at this
|
|
23
|
+
# point. This is actually required in order for the retry logic to be
|
|
24
|
+
# triggered in all cases.
|
|
25
|
+
#
|
|
26
|
+
# Previously a request with no authentication was submitted to trigger
|
|
27
|
+
# this behavior but it was found not to work in certain scenarios where
|
|
28
|
+
# Broker authentication is handled by Apache. In those cases a 403 is
|
|
29
|
+
# returned and not secondary authentication attempt is made.
|
|
30
|
+
debug "Using token authentication"
|
|
31
|
+
(request[:headers] ||= {})['authorization'] = "Bearer #{token}"
|
|
24
32
|
end
|
|
25
33
|
request
|
|
26
34
|
end
|
|
27
35
|
|
|
28
36
|
def retry_auth?(response, client)
|
|
29
|
-
|
|
37
|
+
case response.status
|
|
38
|
+
when 401
|
|
30
39
|
token_rejected(response, client)
|
|
31
40
|
else
|
|
32
41
|
false
|
|
@@ -74,9 +83,9 @@ module RHC::Auth
|
|
|
74
83
|
@can_get_token = client.supports_sessions? && @allows_tokens
|
|
75
84
|
|
|
76
85
|
if has_token
|
|
77
|
-
warn
|
|
86
|
+
warn auth.expired_token_message
|
|
78
87
|
elsif @can_get_token
|
|
79
|
-
info
|
|
88
|
+
info auth.get_token_message
|
|
80
89
|
end
|
|
81
90
|
|
|
82
91
|
return auth.retry_auth?(response, client) unless @can_get_token
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
module RHC::Auth
|
|
2
|
+
class X509
|
|
3
|
+
def initialize(*args)
|
|
4
|
+
@options = args[0] || Commander::Command::Options.new
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def to_request(request)
|
|
8
|
+
request[:client_cert] = certificate_file(options.ssl_client_cert_file)
|
|
9
|
+
request[:client_key] = rsa_key_file(options.ssl_client_key_file)
|
|
10
|
+
request
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def certificate_file(file)
|
|
14
|
+
file && OpenSSL::X509::Certificate.new(IO.read(File.expand_path(file)))
|
|
15
|
+
rescue => e
|
|
16
|
+
debug e
|
|
17
|
+
raise OptionParser::InvalidOption.new(nil, "The certificate '#{file}' cannot be loaded: #{e.message} (#{e.class})")
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def rsa_key_file(file)
|
|
21
|
+
file && OpenSSL::PKey::RSA.new(IO.read(File.expand_path(file)))
|
|
22
|
+
rescue => e
|
|
23
|
+
debug e
|
|
24
|
+
raise OptionParser::InvalidOption.new(nil, "The RSA key '#{file}' cannot be loaded: #{e.message} (#{e.class})")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def retry_auth?(response, client)
|
|
28
|
+
# This is really only hit in the case of token auth falling back to x509.
|
|
29
|
+
# x509 auth doesn't usually get 401s.
|
|
30
|
+
if response.status == 401
|
|
31
|
+
true
|
|
32
|
+
else
|
|
33
|
+
false
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def can_authenticate?
|
|
38
|
+
true
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def expired_token_message
|
|
42
|
+
"Your authorization token has expired. " + get_token_message
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def get_token_message
|
|
46
|
+
"Fetching a new token from #{openshift_server}."
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
protected
|
|
50
|
+
include RHC::Helpers
|
|
51
|
+
attr_reader :options
|
|
52
|
+
end
|
|
53
|
+
end
|
data/lib/rhc/autocomplete.rb
CHANGED
|
@@ -55,6 +55,14 @@ module RHC
|
|
|
55
55
|
end.flatten.compact.sort)
|
|
56
56
|
@commands[name.to_s] = v
|
|
57
57
|
end
|
|
58
|
+
|
|
59
|
+
# Inject autocomplete for a help command whose possible actions are all other commands in root or hyphenated form
|
|
60
|
+
@top_level_commands << 'help'
|
|
61
|
+
@commands['help'] = {
|
|
62
|
+
:actions => @commands.keys.sort.select {|c| c != '' && c !~ / /},
|
|
63
|
+
:switches => []
|
|
64
|
+
}
|
|
65
|
+
|
|
58
66
|
@commands.delete('')
|
|
59
67
|
@commands = @commands.to_a.sort{ |a,b| a[0] <=> b[0] }
|
|
60
68
|
|
|
@@ -8,9 +8,9 @@ _rhc()
|
|
|
8
8
|
cur="${COMP_WORDS[COMP_CWORD]}"
|
|
9
9
|
if [ $COMP_CWORD -eq 1 ]; then
|
|
10
10
|
if [[ "$cur" == -* ]]; then
|
|
11
|
-
opts=<%= "\"%s\"" % global_options.join(' ') %>
|
|
11
|
+
opts=<%= "\"%s\"" % global_options.sort.join(' ') %>
|
|
12
12
|
elif [ -z $cur ]; then
|
|
13
|
-
opts=<%= "\"%s\"" % top_level_commands.join(' ') %>
|
|
13
|
+
opts=<%= "\"%s\"" % top_level_commands.sort.join(' ') %>
|
|
14
14
|
else
|
|
15
15
|
opts=<%= "\"%s\"" % commands.map{ |c| c.first }.delete_if{ |s| s.include? ' ' }.sort.join(' ') %>
|
|
16
16
|
fi
|
|
@@ -22,9 +22,9 @@ _rhc()
|
|
|
22
22
|
<%- for name, data in commands %>
|
|
23
23
|
<%= "\"rhc %s\")" % name %>
|
|
24
24
|
if [[ "$cur" == -* ]]; then
|
|
25
|
-
opts=<%= "\"%s\"" % data[:switches].join(" ") %>
|
|
25
|
+
opts=<%= "\"%s\"" % data[:switches].sort.join(" ") %>
|
|
26
26
|
else
|
|
27
|
-
opts=<%= "\"%s\"" % data[:actions].join(" ") %>
|
|
27
|
+
opts=<%= "\"%s\"" % data[:actions].sort.join(" ") %>
|
|
28
28
|
fi
|
|
29
29
|
;;
|
|
30
30
|
<%- end %>
|
data/lib/rhc/commands/app.rb
CHANGED
|
@@ -58,6 +58,7 @@ module RHC::Commands
|
|
|
58
58
|
option ["-e", "--env VARIABLE=VALUE"], "Environment variable(s) to be set on this app, or path to a file containing environment variables", :type => :list
|
|
59
59
|
option ["--from-app NAME"], "Create based on another application. All content and configurations will be copied from the original app."
|
|
60
60
|
option ["--from-code URL"], "URL to a Git repository that will become the initial contents of the application"
|
|
61
|
+
option ["--region REGION"], "The region where the application gears will be located"
|
|
61
62
|
option ["--[no-]git"], "Skip creating the local Git repository."
|
|
62
63
|
option ["--[no-]dns"], "Skip waiting for the application DNS name to resolve. Must be used in combination with --no-git"
|
|
63
64
|
option ['--no-keys'], "Skip checking SSH keys during app creation", :hide => true
|
|
@@ -77,7 +78,7 @@ module RHC::Commands
|
|
|
77
78
|
|
|
78
79
|
if options.from_app
|
|
79
80
|
raise RHC::AppCloneNotSupportedException, "The server does not support creating apps based on others (rhc create-app --from-app)." if (!rest_domain.has_param?('ADD_APPLICATION', 'cartridges[][name]') || !rest_domain.has_param?('ADD_APPLICATION', 'cartridges[][url]'))
|
|
80
|
-
raise ArgumentError, "Option --from-code is incompatible with --from
|
|
81
|
+
raise ArgumentError, "Option --from-code is incompatible with --from-app. When creating an app based on another resource you can either specify a Git repository URL with --from-code or an existing app name with --from-app." if options.from_code
|
|
81
82
|
raise ArgumentError, "Option --no-dns is incompatible with --from-app. We need to propagate the new app DNS to be able to configure it." if options.dns == false
|
|
82
83
|
raise ArgumentError, "Do not specify cartridges when creating an app based on another one. All cartridges will be copied from the original app." if !(cartridges || []).empty?
|
|
83
84
|
|
|
@@ -106,9 +107,13 @@ module RHC::Commands
|
|
|
106
107
|
end
|
|
107
108
|
|
|
108
109
|
scaling = options.scaling
|
|
110
|
+
region = options.region
|
|
111
|
+
|
|
112
|
+
raise RHC::RegionsAndZonesNotSupportedException if region.present? && !rest_client.supports_regions_and_zones?
|
|
109
113
|
|
|
110
114
|
if from_app
|
|
111
115
|
scaling = from_app.scalable if scaling.nil?
|
|
116
|
+
region = from_app.region if region.nil?
|
|
112
117
|
|
|
113
118
|
cartridges = from_app.cartridges.reject{|c| c.tags.include?('web_proxy')}.collect do |cartridge|
|
|
114
119
|
{
|
|
@@ -131,6 +136,7 @@ module RHC::Commands
|
|
|
131
136
|
["Gear Size:", options.gear_size || (from_app ? "Copied from '#{from_app.name}'" : "default")],
|
|
132
137
|
["Scaling:", (scaling ? "yes" : "no") + (from_app && options.scaling.nil? ? " (copied from '#{from_app.name}')" : '')],
|
|
133
138
|
(["Environment Variables:", env.map{|item| "#{item.name}=#{item.value}"}.join(', ')] if env.present?),
|
|
139
|
+
(["Region:", region + (from_app && options.region.nil? ? " (copied from '#{from_app.name}')" : '')] if region),
|
|
134
140
|
].compact
|
|
135
141
|
)
|
|
136
142
|
end
|
|
@@ -139,7 +145,7 @@ module RHC::Commands
|
|
|
139
145
|
say "Creating application '#{name}' ... "
|
|
140
146
|
|
|
141
147
|
# create the main app
|
|
142
|
-
rest_app = create_app(name, cartridges, rest_domain, options.gear_size, scaling, options.from_code, env, options.auto_deploy, options.keep_deployments, options.deployment_branch, options.deployment_type)
|
|
148
|
+
rest_app = create_app(name, cartridges, rest_domain, options.gear_size, scaling, options.from_code, env, options.auto_deploy, options.keep_deployments, options.deployment_branch, options.deployment_type, region)
|
|
143
149
|
success "done"
|
|
144
150
|
|
|
145
151
|
paragraph{ indent{ success rest_app.messages.map(&:strip) } }
|
|
@@ -403,19 +409,25 @@ module RHC::Commands
|
|
|
403
409
|
end
|
|
404
410
|
|
|
405
411
|
elsif options.gears
|
|
406
|
-
|
|
412
|
+
domain, app = discover_domain_and_app
|
|
413
|
+
gear_info = rest_client.find_application_gear_groups_endpoints(domain, app).map do |group|
|
|
407
414
|
group.gears.map do |gear|
|
|
408
415
|
[
|
|
409
416
|
gear['id'],
|
|
410
|
-
gear['state'] == 'started' ? gear['state'] : color(gear['state'], :yellow),
|
|
411
|
-
group.cartridges.collect{ |c| c['name'] }.join(' '),
|
|
412
|
-
group.gear_profile,
|
|
417
|
+
gear['state'] == 'started' ? color(gear['state'], :green) : color(gear['state'], :yellow),
|
|
418
|
+
(gear['endpoints'].blank? ? group.cartridges : gear['endpoints']).collect{ |c| c['cartridge_name'] || c['name'] }.join(' '),
|
|
419
|
+
group.gear_profile,
|
|
420
|
+
gear['region'],
|
|
421
|
+
gear['zone'],
|
|
413
422
|
ssh_string(gear['ssh_url'])
|
|
414
423
|
]
|
|
415
424
|
end
|
|
416
425
|
end.flatten(1)
|
|
417
426
|
|
|
418
|
-
|
|
427
|
+
explicit_regions = gear_info.select{|i| !i[4].nil?}.present?
|
|
428
|
+
explicit_zones = gear_info.select{|i| !i[5].nil?}.present?
|
|
429
|
+
|
|
430
|
+
say table(gear_info.map(&:compact), :header => ['ID', 'State', 'Cartridges', 'Size', explicit_regions ? 'Region' : nil, explicit_zones ? 'Zone' : nil, 'SSH URL'].compact)
|
|
419
431
|
|
|
420
432
|
elsif options.configuration
|
|
421
433
|
display_app_configurations(find_app)
|
|
@@ -561,7 +573,7 @@ module RHC::Commands
|
|
|
561
573
|
result
|
|
562
574
|
end
|
|
563
575
|
|
|
564
|
-
def create_app(name, cartridges, rest_domain, gear_size=nil, scale=nil, from_code=nil, environment_variables=nil, auto_deploy=nil, keep_deployments=nil, deployment_branch=nil, deployment_type=nil)
|
|
576
|
+
def create_app(name, cartridges, rest_domain, gear_size=nil, scale=nil, from_code=nil, environment_variables=nil, auto_deploy=nil, keep_deployments=nil, deployment_branch=nil, deployment_type=nil, region=nil)
|
|
565
577
|
app_options = {:cartridges => Array(cartridges)}
|
|
566
578
|
app_options[:gear_profile] = gear_size if gear_size
|
|
567
579
|
app_options[:scale] = scale if scale
|
|
@@ -572,6 +584,7 @@ module RHC::Commands
|
|
|
572
584
|
app_options[:keep_deployments] = keep_deployments if keep_deployments
|
|
573
585
|
app_options[:deployment_branch] = deployment_branch if deployment_branch
|
|
574
586
|
app_options[:deployment_type] = deployment_type if deployment_type
|
|
587
|
+
app_options[:region] = region if region
|
|
575
588
|
debug "Creating application '#{name}' with these options - #{app_options.inspect}"
|
|
576
589
|
rest_domain.add_application(name, app_options)
|
|
577
590
|
rescue RHC::Rest::Exception => e
|