rhc 1.27.4 → 1.28.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|