rhc 1.12.4 → 1.13.6
Sign up to get free protection for your applications and to get access to all the features.
- data/autocomplete/rhc_bash +161 -9
- data/bin/rhc +2 -2
- data/features/env.feature +0 -0
- data/features/step_definitions/env_steps.rb +1 -0
- data/features/support/platform_support.rb +5 -5
- data/lib/rhc/cartridge_helpers.rb +19 -3
- data/lib/rhc/command_runner.rb +1 -1
- data/lib/rhc/commands/app.rb +32 -17
- data/lib/rhc/commands/base.rb +15 -19
- data/lib/rhc/commands/cartridge.rb +14 -9
- data/lib/rhc/commands/env.rb +146 -0
- data/lib/rhc/commands.rb +19 -7
- data/lib/rhc/exceptions.rb +25 -1
- data/lib/rhc/help_formatter.rb +2 -2
- data/lib/rhc/helpers.rb +29 -2
- data/lib/rhc/output_helpers.rb +19 -2
- data/lib/rhc/rest/application.rb +49 -3
- data/lib/rhc/rest/cartridge.rb +4 -4
- data/lib/rhc/rest/client.rb +41 -6
- data/lib/rhc/rest/environment_variable.rb +15 -0
- data/lib/rhc/rest/mock.rb +52 -20
- data/lib/rhc/rest.rb +24 -23
- data/lib/rhc/usage_templates/help.erb +4 -4
- data/spec/rhc/assets/env_vars.txt +7 -0
- data/spec/rhc/assets/env_vars_2.txt +1 -0
- data/spec/rhc/commands/app_spec.rb +51 -10
- data/spec/rhc/commands/cartridge_spec.rb +61 -9
- data/spec/rhc/commands/env_spec.rb +493 -0
- data/spec/rhc/helpers_spec.rb +25 -5
- data/spec/rhc/rest_spec.rb +4 -3
- metadata +16 -4
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-create app-delete app-force-stop app-reload app-restart app-show app-start app-stop app-tidy apps authorization authorization-add authorization-delete authorization-delete-all authorization-list cartridge
|
13
|
+
opts="account alias alias-add alias-delete-cert alias-list alias-remove alias-update-cert app app-create app-delete app-force-stop app-reload app-restart app-show app-start app-stop app-tidy apps authorization authorization-add authorization-delete authorization-delete-all authorization-list cartridge-add cartridge-list cartridge-reload cartridge-remove cartridge-restart cartridge-scale cartridge-show cartridge-start cartridge-status cartridge-stop cartridge-storage domain domain-create domain-delete domain-list domain-show domain-update env env-list env-set env-show env-unset git-clone logout port-forward server setup snapshot snapshot-restore snapshot-save ssh sshkey sshkey-add sshkey-list sshkey-remove sshkey-show tail threaddump"
|
14
14
|
else
|
15
|
-
opts="account account-logout add-alias add-authorization add-cartridge add-sshkey alias alias-add alias-delete-cert alias-list alias-remove alias-update-cert aliases app app-create app-delete app-force-stop app-reload app-restart 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 create-app create-domain delete-all-authorization delete-app delete-authorization delete-cert-alias delete-domain domain domain-create domain-delete domain-list domain-show domain-update domains force-stop-app git-clone list-alias list-authorization list-cartridge list-domain list-sshkey logout port-forward reload-app reload-cartridge remove-alias remove-cartridge remove-sshkey restart-app restart-cartridge restore-snapshot save-snapshot scale-cartridge server setup show-app show-cartridge show-domain 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 update-cert-alias update-domain"
|
15
|
+
opts="account account-logout add-alias add-authorization add-cartridge add-sshkey alias alias-add alias-delete-cert alias-list alias-remove alias-update-cert aliases app app-create app-delete app-env app-force-stop app-reload app-restart 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 create-app create-domain delete-all-authorization delete-app delete-authorization delete-cert-alias delete-domain domain domain-create domain-delete domain-list domain-show domain-update domains env env-add env-list env-remove env-set env-show env-unset force-stop-app git-clone list-alias list-authorization list-cartridge list-domain list-env list-sshkey logout port-forward reload-app reload-cartridge remove-alias remove-cartridge remove-sshkey restart-app restart-cartridge restore-snapshot save-snapshot scale-cartridge server set-env setup show-app show-cartridge 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-domain"
|
16
16
|
fi
|
17
17
|
else
|
18
18
|
prev="${COMP_WORDS[@]:0:COMP_CWORD}"
|
@@ -62,7 +62,7 @@ _rhc()
|
|
62
62
|
|
63
63
|
"rhc add-cartridge")
|
64
64
|
if [[ "$cur" == -* ]]; then
|
65
|
-
opts="--app --cartridge --namespace"
|
65
|
+
opts="--app --cartridge --env --namespace"
|
66
66
|
else
|
67
67
|
opts=""
|
68
68
|
fi
|
@@ -176,13 +176,13 @@ _rhc()
|
|
176
176
|
if [[ "$cur" == -* ]]; then
|
177
177
|
opts=""
|
178
178
|
else
|
179
|
-
opts="snapshot create delete start stop force-stop restart reload tidy show"
|
179
|
+
opts="snapshot env create delete start stop force-stop restart reload tidy show"
|
180
180
|
fi
|
181
181
|
;;
|
182
182
|
|
183
183
|
"rhc app create")
|
184
184
|
if [[ "$cur" == -* ]]; then
|
185
|
-
opts="--app --dns --enable-jenkins --from-code --gear-size --git --namespace --no-dns --no-git --no-keys --nogit --repo --scaling --type"
|
185
|
+
opts="--app --dns --enable-jenkins --env --from-code --gear-size --git --namespace --no-dns --no-git --no-keys --nogit --repo --scaling --type"
|
186
186
|
else
|
187
187
|
opts=""
|
188
188
|
fi
|
@@ -196,6 +196,14 @@ _rhc()
|
|
196
196
|
fi
|
197
197
|
;;
|
198
198
|
|
199
|
+
"rhc app env")
|
200
|
+
if [[ "$cur" == -* ]]; then
|
201
|
+
opts="--app --confirm --env --namespace"
|
202
|
+
else
|
203
|
+
opts=""
|
204
|
+
fi
|
205
|
+
;;
|
206
|
+
|
199
207
|
"rhc app force-stop")
|
200
208
|
if [[ "$cur" == -* ]]; then
|
201
209
|
opts="--app --namespace"
|
@@ -270,7 +278,7 @@ _rhc()
|
|
270
278
|
|
271
279
|
"rhc app-create")
|
272
280
|
if [[ "$cur" == -* ]]; then
|
273
|
-
opts="--app --dns --enable-jenkins --from-code --gear-size --git --namespace --no-dns --no-git --no-keys --nogit --repo --scaling --type"
|
281
|
+
opts="--app --dns --enable-jenkins --env --from-code --gear-size --git --namespace --no-dns --no-git --no-keys --nogit --repo --scaling --type"
|
274
282
|
else
|
275
283
|
opts=""
|
276
284
|
fi
|
@@ -284,6 +292,14 @@ _rhc()
|
|
284
292
|
fi
|
285
293
|
;;
|
286
294
|
|
295
|
+
"rhc app-env")
|
296
|
+
if [[ "$cur" == -* ]]; then
|
297
|
+
opts="--app --confirm --env --namespace"
|
298
|
+
else
|
299
|
+
opts=""
|
300
|
+
fi
|
301
|
+
;;
|
302
|
+
|
287
303
|
"rhc app-force-stop")
|
288
304
|
if [[ "$cur" == -* ]]; then
|
289
305
|
opts="--app --namespace"
|
@@ -454,7 +470,7 @@ _rhc()
|
|
454
470
|
|
455
471
|
"rhc cartridge add")
|
456
472
|
if [[ "$cur" == -* ]]; then
|
457
|
-
opts="--app --cartridge --namespace"
|
473
|
+
opts="--app --cartridge --env --namespace"
|
458
474
|
else
|
459
475
|
opts=""
|
460
476
|
fi
|
@@ -542,7 +558,7 @@ _rhc()
|
|
542
558
|
|
543
559
|
"rhc cartridge-add")
|
544
560
|
if [[ "$cur" == -* ]]; then
|
545
|
-
opts="--app --cartridge --namespace"
|
561
|
+
opts="--app --cartridge --env --namespace"
|
546
562
|
else
|
547
563
|
opts=""
|
548
564
|
fi
|
@@ -638,7 +654,7 @@ _rhc()
|
|
638
654
|
|
639
655
|
"rhc create-app")
|
640
656
|
if [[ "$cur" == -* ]]; then
|
641
|
-
opts="--app --dns --enable-jenkins --from-code --gear-size --git --namespace --no-dns --no-git --no-keys --nogit --repo --scaling --type"
|
657
|
+
opts="--app --dns --enable-jenkins --env --from-code --gear-size --git --namespace --no-dns --no-git --no-keys --nogit --repo --scaling --type"
|
642
658
|
else
|
643
659
|
opts=""
|
644
660
|
fi
|
@@ -788,6 +804,110 @@ _rhc()
|
|
788
804
|
fi
|
789
805
|
;;
|
790
806
|
|
807
|
+
"rhc env")
|
808
|
+
if [[ "$cur" == -* ]]; then
|
809
|
+
opts=""
|
810
|
+
else
|
811
|
+
opts="add set remove unset list show"
|
812
|
+
fi
|
813
|
+
;;
|
814
|
+
|
815
|
+
"rhc env add")
|
816
|
+
if [[ "$cur" == -* ]]; then
|
817
|
+
opts="--app --confirm --env --namespace"
|
818
|
+
else
|
819
|
+
opts=""
|
820
|
+
fi
|
821
|
+
;;
|
822
|
+
|
823
|
+
"rhc env list")
|
824
|
+
if [[ "$cur" == -* ]]; then
|
825
|
+
opts="--app --namespace --quotes --table"
|
826
|
+
else
|
827
|
+
opts=""
|
828
|
+
fi
|
829
|
+
;;
|
830
|
+
|
831
|
+
"rhc env remove")
|
832
|
+
if [[ "$cur" == -* ]]; then
|
833
|
+
opts="--app --confirm --env --namespace"
|
834
|
+
else
|
835
|
+
opts=""
|
836
|
+
fi
|
837
|
+
;;
|
838
|
+
|
839
|
+
"rhc env set")
|
840
|
+
if [[ "$cur" == -* ]]; then
|
841
|
+
opts="--app --confirm --env --namespace"
|
842
|
+
else
|
843
|
+
opts=""
|
844
|
+
fi
|
845
|
+
;;
|
846
|
+
|
847
|
+
"rhc env show")
|
848
|
+
if [[ "$cur" == -* ]]; then
|
849
|
+
opts="--app --env --namespace --quotes --table"
|
850
|
+
else
|
851
|
+
opts=""
|
852
|
+
fi
|
853
|
+
;;
|
854
|
+
|
855
|
+
"rhc env unset")
|
856
|
+
if [[ "$cur" == -* ]]; then
|
857
|
+
opts="--app --confirm --env --namespace"
|
858
|
+
else
|
859
|
+
opts=""
|
860
|
+
fi
|
861
|
+
;;
|
862
|
+
|
863
|
+
"rhc env-add")
|
864
|
+
if [[ "$cur" == -* ]]; then
|
865
|
+
opts="--app --confirm --env --namespace"
|
866
|
+
else
|
867
|
+
opts=""
|
868
|
+
fi
|
869
|
+
;;
|
870
|
+
|
871
|
+
"rhc env-list")
|
872
|
+
if [[ "$cur" == -* ]]; then
|
873
|
+
opts="--app --namespace --quotes --table"
|
874
|
+
else
|
875
|
+
opts=""
|
876
|
+
fi
|
877
|
+
;;
|
878
|
+
|
879
|
+
"rhc env-remove")
|
880
|
+
if [[ "$cur" == -* ]]; then
|
881
|
+
opts="--app --confirm --env --namespace"
|
882
|
+
else
|
883
|
+
opts=""
|
884
|
+
fi
|
885
|
+
;;
|
886
|
+
|
887
|
+
"rhc env-set")
|
888
|
+
if [[ "$cur" == -* ]]; then
|
889
|
+
opts="--app --confirm --env --namespace"
|
890
|
+
else
|
891
|
+
opts=""
|
892
|
+
fi
|
893
|
+
;;
|
894
|
+
|
895
|
+
"rhc env-show")
|
896
|
+
if [[ "$cur" == -* ]]; then
|
897
|
+
opts="--app --env --namespace --quotes --table"
|
898
|
+
else
|
899
|
+
opts=""
|
900
|
+
fi
|
901
|
+
;;
|
902
|
+
|
903
|
+
"rhc env-unset")
|
904
|
+
if [[ "$cur" == -* ]]; then
|
905
|
+
opts="--app --confirm --env --namespace"
|
906
|
+
else
|
907
|
+
opts=""
|
908
|
+
fi
|
909
|
+
;;
|
910
|
+
|
791
911
|
"rhc force-stop-app")
|
792
912
|
if [[ "$cur" == -* ]]; then
|
793
913
|
opts="--app --namespace"
|
@@ -836,6 +956,14 @@ _rhc()
|
|
836
956
|
fi
|
837
957
|
;;
|
838
958
|
|
959
|
+
"rhc list-env")
|
960
|
+
if [[ "$cur" == -* ]]; then
|
961
|
+
opts="--app --namespace --quotes --table"
|
962
|
+
else
|
963
|
+
opts=""
|
964
|
+
fi
|
965
|
+
;;
|
966
|
+
|
839
967
|
"rhc list-sshkey")
|
840
968
|
if [[ "$cur" == -* ]]; then
|
841
969
|
opts=""
|
@@ -948,6 +1076,14 @@ _rhc()
|
|
948
1076
|
fi
|
949
1077
|
;;
|
950
1078
|
|
1079
|
+
"rhc set-env")
|
1080
|
+
if [[ "$cur" == -* ]]; then
|
1081
|
+
opts="--app --confirm --env --namespace"
|
1082
|
+
else
|
1083
|
+
opts=""
|
1084
|
+
fi
|
1085
|
+
;;
|
1086
|
+
|
951
1087
|
"rhc setup")
|
952
1088
|
if [[ "$cur" == -* ]]; then
|
953
1089
|
opts="--autocomplete --clean --create-token --no-create-token --server"
|
@@ -980,6 +1116,14 @@ _rhc()
|
|
980
1116
|
fi
|
981
1117
|
;;
|
982
1118
|
|
1119
|
+
"rhc show-env")
|
1120
|
+
if [[ "$cur" == -* ]]; then
|
1121
|
+
opts="--app --env --namespace --quotes --table"
|
1122
|
+
else
|
1123
|
+
opts=""
|
1124
|
+
fi
|
1125
|
+
;;
|
1126
|
+
|
983
1127
|
"rhc show-sshkey")
|
984
1128
|
if [[ "$cur" == -* ]]; then
|
985
1129
|
opts=""
|
@@ -1180,6 +1324,14 @@ _rhc()
|
|
1180
1324
|
fi
|
1181
1325
|
;;
|
1182
1326
|
|
1327
|
+
"rhc unset-env")
|
1328
|
+
if [[ "$cur" == -* ]]; then
|
1329
|
+
opts="--app --confirm --env --namespace"
|
1330
|
+
else
|
1331
|
+
opts=""
|
1332
|
+
fi
|
1333
|
+
;;
|
1334
|
+
|
1183
1335
|
"rhc update-cert-alias")
|
1184
1336
|
if [[ "$cur" == -* ]]; then
|
1185
1337
|
opts="--app --certificate --namespace --passphrase --private-key"
|
data/bin/rhc
CHANGED
@@ -5,7 +5,7 @@ def get_args
|
|
5
5
|
ARGV.shift
|
6
6
|
args = ""
|
7
7
|
ARGV.each do|a|
|
8
|
-
if ( a.to_s.strip.length == 0 || a.to_s.strip.match(/\s/) ); a = "'#{a}'" end
|
8
|
+
if ( a.to_s.strip.length == 0 || a.to_s.strip.match(/\s/) ); a = "'#{a}'" end
|
9
9
|
args += " #{a}"
|
10
10
|
end
|
11
11
|
args
|
@@ -13,7 +13,7 @@ end
|
|
13
13
|
|
14
14
|
begin
|
15
15
|
Signal.trap("PIPE", "EXIT") if Signal.list["PIPE"]
|
16
|
-
|
16
|
+
|
17
17
|
retcode = begin
|
18
18
|
require 'rhc/cli'
|
19
19
|
RHC::CLI.set_terminal
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
include RHCHelper
|
@@ -2,7 +2,7 @@ if $target_os == 'fedora-18'
|
|
2
2
|
CARTRIDGE_MAP = {
|
3
3
|
"php" => { type: "php-5.4", name: "PHP 5.4" },
|
4
4
|
"mysql" => { type: "mysql-5.1", name: "MySQL Database 5.1" },
|
5
|
-
"phpmyadmin" => { type: "phpmyadmin-3
|
5
|
+
"phpmyadmin" => { type: "phpmyadmin-3", name: "phpMyAdmin 3" },
|
6
6
|
"mongodb" => { type: "mongodb-2.2", name: "MongoDB NoSQL Database 2.2" },
|
7
7
|
"postgresql" => { type: "postgresql-9.2", name: "PostgreSQL Database 9.2" },
|
8
8
|
"cron" => { type: "cron-1.4", name: "Cron 1.4" },
|
@@ -12,7 +12,7 @@ elsif $target_os == 'fedora-19'
|
|
12
12
|
CARTRIDGE_MAP = {
|
13
13
|
"php" => { type: "php-5.5", name: "PHP 5.5" },
|
14
14
|
"mysql" => { type: "mariadb-5.5", name: "MariaDB 5.5" },
|
15
|
-
"phpmyadmin" => { type: "phpmyadmin-3
|
15
|
+
"phpmyadmin" => { type: "phpmyadmin-3", name: "phpMyAdmin 3" },
|
16
16
|
"mongodb" => { type: "mongodb-2.2", name: "MongoDB NoSQL Database 2.2" },
|
17
17
|
"postgresql" => { type: "postgresql-9.2", name: "PostgreSQL Database 9.2" },
|
18
18
|
"cron" => { type: "cron-1.4", name: "Cron 1.4" },
|
@@ -22,11 +22,11 @@ else
|
|
22
22
|
CARTRIDGE_MAP = {
|
23
23
|
"php" => { type: "php-5.3", name: "PHP 5.3" },
|
24
24
|
"mysql" => { type: "mysql-5.1", name: "MySQL Database 5.1" },
|
25
|
-
"phpmyadmin" => { type: "phpmyadmin-3
|
25
|
+
"phpmyadmin" => { type: "phpmyadmin-3", name: "phpMyAdmin 3" },
|
26
26
|
"mongodb" => { type: "mongodb-2.2", name: "MongoDB NoSQL Database 2.2" },
|
27
|
-
"postgresql" => { type: "postgresql-8.4", name: "PostgreSQL Database 8.4" },
|
27
|
+
"postgresql" => { type: "postgresql-8.4", name: "PostgreSQL Database 8.4" },
|
28
28
|
"cron" => { type: "cron-1.4", name: "Cron 1.4" },
|
29
|
-
"haproxy" => { type: "haproxy-1.4", name: "" }
|
29
|
+
"haproxy" => { type: "haproxy-1.4", name: "" }
|
30
30
|
}
|
31
31
|
end
|
32
32
|
|
@@ -46,8 +46,8 @@ module RHC
|
|
46
46
|
def match_cart(cart, search)
|
47
47
|
search = search.to_s.downcase.gsub(/[_\-\s]/,' ')
|
48
48
|
[
|
49
|
-
cart.name,
|
50
|
-
cart.description,
|
49
|
+
cart.name,
|
50
|
+
cart.description,
|
51
51
|
(cart.tags || []).join(' '),
|
52
52
|
].compact.any?{ |s| s.present? && s.downcase.gsub(/[_\-\s]/,' ').include?(search) }
|
53
53
|
end
|
@@ -83,9 +83,11 @@ module RHC
|
|
83
83
|
def standalone_cartridges
|
84
84
|
@standalone_cartridges ||= all_cartridges.select{ |c| c.type == 'standalone' }
|
85
85
|
end
|
86
|
+
|
86
87
|
def not_standalone_cartridges
|
87
88
|
@not_standalone_cartridges ||= all_cartridges.select{ |c| c.type != 'standalone' }
|
88
89
|
end
|
90
|
+
|
89
91
|
def all_cartridges
|
90
92
|
@all_cartridges = rest_client.cartridges
|
91
93
|
end
|
@@ -95,6 +97,20 @@ module RHC
|
|
95
97
|
carts.unshift ['==========', '=========']
|
96
98
|
carts.unshift ['Short Name', 'Full name']
|
97
99
|
say table(carts)
|
98
|
-
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def filter_jenkins_cartridges(tag)
|
103
|
+
cartridges = all_cartridges.select { |c| (c.tags || []).include?(tag) && c.name =~ /\Ajenkins/i }.sort
|
104
|
+
raise RHC::JenkinsNotInstalledOnServer if cartridges.empty?
|
105
|
+
cartridges
|
106
|
+
end
|
107
|
+
|
108
|
+
def jenkins_cartridges
|
109
|
+
@jenkins_cartridges ||= filter_jenkins_cartridges('ci')
|
110
|
+
end
|
111
|
+
|
112
|
+
def jenkins_client_cartridges
|
113
|
+
@jenkins_client_cartridges ||= filter_jenkins_cartridges('ci_builder')
|
114
|
+
end
|
99
115
|
end
|
100
116
|
end
|
data/lib/rhc/command_runner.rb
CHANGED
@@ -149,7 +149,7 @@ module RHC
|
|
149
149
|
|
150
150
|
unless matches
|
151
151
|
RHC::Helpers.error "The command '#{program :name} #{provided_arguments.join(' ')}' is not recognized.\n"
|
152
|
-
say "See '#{program :name} help' for a list of valid commands."
|
152
|
+
say "See '#{program :name} help' for a list of valid commands."
|
153
153
|
return 1
|
154
154
|
end
|
155
155
|
|
data/lib/rhc/commands/app.rb
CHANGED
@@ -7,9 +7,9 @@ module RHC::Commands
|
|
7
7
|
class App < Base
|
8
8
|
summary "Commands for creating and managing applications"
|
9
9
|
description <<-DESC
|
10
|
-
Creates and controls an OpenShift application. To see the list of all
|
11
|
-
applications use the rhc domain show command. Note that delete is not
|
12
|
-
reversible and will stop your application and then remove the application
|
10
|
+
Creates and controls an OpenShift application. To see the list of all
|
11
|
+
applications use the rhc domain show command. Note that delete is not
|
12
|
+
reversible and will stop your application and then remove the application
|
13
13
|
and repo from the remote server. No local changes are made.
|
14
14
|
DESC
|
15
15
|
syntax "<action>"
|
@@ -25,7 +25,7 @@ module RHC::Commands
|
|
25
25
|
|
26
26
|
You can see a list of all valid cartridge types by running
|
27
27
|
'rhc cartridge list'. OpenShift also supports downloading cartridges -
|
28
|
-
pass a URL in place of the cartridge name and we'll download
|
28
|
+
pass a URL in place of the cartridge name and we'll download
|
29
29
|
and install that cartridge into your app. Keep in mind that
|
30
30
|
these cartridges receive no security updates. Note that not
|
31
31
|
all OpenShift servers allow downloaded cartridges.
|
@@ -52,6 +52,7 @@ module RHC::Commands
|
|
52
52
|
option ["-g", "--gear-size SIZE"], "Gear size controls how much memory and CPU your cartridges can use."
|
53
53
|
option ["-s", "--scaling"], "Enable scaling for the web cartridge."
|
54
54
|
option ["-r", "--repo DIR"], "Path to the Git repository (defaults to ./$app_name)"
|
55
|
+
option ["-e", "--env VARIABLE=VALUE"], "Environment variable(s) to be set on this app, or path to a file containing environment variables", :option_type => :list
|
55
56
|
option ["--from-code URL"], "URL to a Git repository that will become the initial contents of the application"
|
56
57
|
option ["--[no-]git"], "Skip creating the local Git repository."
|
57
58
|
option ["--nogit"], "DEPRECATED: Skip creating the local Git repository.", :deprecated => {:key => :git, :value => false}
|
@@ -81,6 +82,8 @@ module RHC::Commands
|
|
81
82
|
c.usage_rate? ? "#{c.short_name} (addtl. costs may apply)" : c.short_name
|
82
83
|
end.join(', ')
|
83
84
|
|
85
|
+
environment_variables = collect_env_vars(options.env)
|
86
|
+
|
84
87
|
paragraph do
|
85
88
|
header "Application Options"
|
86
89
|
table([["Namespace:", options.namespace],
|
@@ -88,6 +91,7 @@ module RHC::Commands
|
|
88
91
|
(["Source Code:", options.from_code] if options.from_code),
|
89
92
|
["Gear Size:", options.gear_size || "default"],
|
90
93
|
["Scaling:", options.scaling ? "yes" : "no"],
|
94
|
+
(["Environment Variables:", environment_variables.map{|item| "#{item.name}=#{item.value}"}.join(', ')] if environment_variables.present?),
|
91
95
|
].compact
|
92
96
|
).each { |s| say " #{s}" }
|
93
97
|
end
|
@@ -96,7 +100,7 @@ module RHC::Commands
|
|
96
100
|
say "Creating application '#{name}' ... "
|
97
101
|
|
98
102
|
# create the main app
|
99
|
-
rest_app = create_app(name, cartridges, rest_domain, options.gear_size, options.scaling, options.from_code)
|
103
|
+
rest_app = create_app(name, cartridges, rest_domain, options.gear_size, options.scaling, options.from_code, environment_variables)
|
100
104
|
success "done"
|
101
105
|
|
102
106
|
paragraph{ indent{ success rest_app.messages.map(&:strip) } }
|
@@ -105,6 +109,7 @@ module RHC::Commands
|
|
105
109
|
build_app_exists = rest_app.building_app
|
106
110
|
|
107
111
|
if enable_jenkins?
|
112
|
+
|
108
113
|
unless build_app_exists
|
109
114
|
paragraph do
|
110
115
|
say "Setting up a Jenkins application ... "
|
@@ -168,7 +173,7 @@ module RHC::Commands
|
|
168
173
|
end
|
169
174
|
|
170
175
|
output_issues(rest_app) if issues?
|
171
|
-
|
176
|
+
|
172
177
|
paragraph do
|
173
178
|
say "Your application '#{rest_app.name}' is now available."
|
174
179
|
paragraph do
|
@@ -177,7 +182,8 @@ module RHC::Commands
|
|
177
182
|
['URL:', rest_app.app_url],
|
178
183
|
['SSH to:', rest_app.ssh_string],
|
179
184
|
['Git remote:', rest_app.git_url],
|
180
|
-
(['Cloned to:', repo_dir] if repo_dir)
|
185
|
+
(['Cloned to:', repo_dir] if repo_dir),
|
186
|
+
(['Environment variables:', environment_variables.map{|item| "#{item.name}=#{item.value}"}.sort.join(', ')] if environment_variables.present?)
|
181
187
|
].compact
|
182
188
|
end
|
183
189
|
end
|
@@ -280,10 +286,10 @@ module RHC::Commands
|
|
280
286
|
summary "Show information about an application"
|
281
287
|
description <<-DESC
|
282
288
|
Display the properties of an application, including its URL, the SSH
|
283
|
-
connection string, and the Git remote URL. Will also display any
|
289
|
+
connection string, and the Git remote URL. Will also display any
|
284
290
|
cartridges, their scale, and any values they expose.
|
285
291
|
|
286
|
-
The '--state' option will retrieve information from each cartridge in
|
292
|
+
The '--state' option will retrieve information from each cartridge in
|
287
293
|
the application, which may include cartridge specific text.
|
288
294
|
|
289
295
|
To see information about the individual gears within an application,
|
@@ -292,7 +298,7 @@ module RHC::Commands
|
|
292
298
|
storage on each gear.
|
293
299
|
|
294
300
|
If you want to run commands against individual gears, use:
|
295
|
-
|
301
|
+
|
296
302
|
rhc ssh <app> --gears '<command>'
|
297
303
|
|
298
304
|
to run and display the output from each gear.
|
@@ -315,12 +321,12 @@ module RHC::Commands
|
|
315
321
|
case options.gears
|
316
322
|
when 'quota'
|
317
323
|
opts = {:as => :gear, :split_cells_on => /\s*\t/, :header => ['Gear', 'Cartridges', 'Used', 'Limit'], :align => [nil, nil, :right, :right]}
|
318
|
-
table_from_gears('echo "$(du -s 2>/dev/null | cut -f 1)"', groups, opts) do |gear, data, group|
|
324
|
+
table_from_gears('echo "$(du --block-size=1 -s 2>/dev/null | cut -f 1)"', groups, opts) do |gear, data, group|
|
319
325
|
[gear['id'], group.cartridges.collect{ |c| c['name'] }.join(' '), (human_size(data.chomp) rescue 'error'), human_size(group.quota)]
|
320
326
|
end
|
321
327
|
when 'ssh'
|
322
328
|
groups.each{ |group| group.gears.each{ |g| say (ssh_string(g['ssh_url']) or raise NoPerGearOperations) } }
|
323
|
-
else
|
329
|
+
else
|
324
330
|
run_on_gears(ssh_command_for_op(options.gears), groups)
|
325
331
|
end
|
326
332
|
|
@@ -429,12 +435,13 @@ module RHC::Commands
|
|
429
435
|
result
|
430
436
|
end
|
431
437
|
|
432
|
-
def create_app(name, cartridges, rest_domain, gear_size=nil, scale=nil, from_code=nil)
|
438
|
+
def create_app(name, cartridges, rest_domain, gear_size=nil, scale=nil, from_code=nil, environment_variables=nil)
|
433
439
|
app_options = {:cartridges => Array(cartridges)}
|
434
440
|
app_options[:gear_profile] = gear_size if gear_size
|
435
441
|
app_options[:scale] = scale if scale
|
436
442
|
app_options[:initial_git_url] = from_code if from_code
|
437
443
|
app_options[:debug] = true if @debug
|
444
|
+
app_options[:environment_variables] = environment_variables.map{ |item| item.to_hash } if environment_variables.present?
|
438
445
|
debug "Creating application '#{name}' with these options - #{app_options.inspect}"
|
439
446
|
rest_app = rest_domain.add_application(name, app_options)
|
440
447
|
debug "'#{rest_app.name}' created"
|
@@ -449,11 +456,11 @@ module RHC::Commands
|
|
449
456
|
end
|
450
457
|
|
451
458
|
def add_jenkins_app(rest_domain)
|
452
|
-
create_app(jenkins_app_name,
|
459
|
+
create_app(jenkins_app_name, jenkins_cartridge_name, rest_domain)
|
453
460
|
end
|
454
461
|
|
455
462
|
def add_jenkins_cartridge(rest_app)
|
456
|
-
rest_app.add_cartridge(
|
463
|
+
rest_app.add_cartridge(jenkins_client_cartridge_name)
|
457
464
|
end
|
458
465
|
|
459
466
|
def add_jenkins_client_to(rest_app, messages)
|
@@ -528,6 +535,14 @@ module RHC::Commands
|
|
528
535
|
end || "jenkins"
|
529
536
|
end
|
530
537
|
|
538
|
+
def jenkins_cartridge_name
|
539
|
+
jenkins_cartridges.last.name
|
540
|
+
end
|
541
|
+
|
542
|
+
def jenkins_client_cartridge_name
|
543
|
+
jenkins_client_cartridges.last.name
|
544
|
+
end
|
545
|
+
|
531
546
|
def run_nslookup(host)
|
532
547
|
# :nocov:
|
533
548
|
`nslookup #{host}`
|
@@ -586,7 +601,7 @@ WARNING: Your application was created successfully but had problems during
|
|
586
601
|
|
587
602
|
$ rhc app delete #{rest_app.name} --confirm
|
588
603
|
|
589
|
-
Please contact us if you are unable to successfully create your
|
604
|
+
Please contact us if you are unable to successfully create your
|
590
605
|
application:
|
591
606
|
|
592
607
|
Support - https://www.openshift.com/support
|
@@ -624,6 +639,6 @@ WARNING_OUTPUT
|
|
624
639
|
|
625
640
|
def issues?
|
626
641
|
not @issues.nil?
|
627
|
-
end
|
642
|
+
end
|
628
643
|
end
|
629
644
|
end
|
data/lib/rhc/commands/base.rb
CHANGED
@@ -53,11 +53,6 @@ class RHC::Commands::Base
|
|
53
53
|
|
54
54
|
class InvalidCommand < StandardError ; end
|
55
55
|
|
56
|
-
def self.inherited(klass)
|
57
|
-
unless klass == RHC::Commands::Base
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
56
|
def self.method_added(method)
|
62
57
|
return if self == RHC::Commands::Base
|
63
58
|
return if private_method_defined? method
|
@@ -128,7 +123,8 @@ class RHC::Commands::Base
|
|
128
123
|
:description => description,
|
129
124
|
:context_helper => options[:context],
|
130
125
|
:required => options[:required],
|
131
|
-
:deprecated => options[:deprecated]
|
126
|
+
:deprecated => options[:deprecated],
|
127
|
+
:option_type => options[:option_type]
|
132
128
|
}
|
133
129
|
end
|
134
130
|
|
@@ -157,17 +153,17 @@ class RHC::Commands::Base
|
|
157
153
|
}));
|
158
154
|
end
|
159
155
|
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
156
|
+
private
|
157
|
+
def self.options_metadata
|
158
|
+
options[:options] ||= []
|
159
|
+
end
|
160
|
+
def self.args_metadata
|
161
|
+
options[:args] ||= []
|
162
|
+
end
|
163
|
+
def self.aliases
|
164
|
+
options[:aliases] ||= []
|
165
|
+
end
|
166
|
+
def self.options
|
167
|
+
@options ||= {}
|
168
|
+
end
|
173
169
|
end
|