nginx_stage 0.4.0 → 0.5.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -1
- data/lib/nginx_stage.rb +62 -0
- data/lib/nginx_stage/configuration.rb +19 -3
- data/lib/nginx_stage/generators/app_config_generator.rb +16 -2
- data/lib/nginx_stage/generators/nginx_clean_generator.rb +5 -1
- data/lib/nginx_stage/generators/nginx_process_generator.rb +8 -1
- data/lib/nginx_stage/generators/pun_config_generator.rb +8 -1
- data/lib/nginx_stage/version.rb +1 -1
- data/share/nginx_stage_example.yml +15 -1
- data/templates/pun.conf.erb +0 -3
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 119f019f0d50000e6eca41b3464f2971345be084
|
4
|
+
data.tar.gz: a19e78dbfdc7dbb2af510cfa3117b8b74e00f795
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e79f39728628cec8cbc7936adeab22fa00912ce665a51a45e33607be053eaa84a13cefcf05537c80b6ff80d25918dae448bd2ad850345dad48db378f637a342e
|
7
|
+
data.tar.gz: c103c842dbb5e79e735cac641d229e1f3e36be42820cc51907cef7e46110d61d2bb3cc4854c713bb0e1c738c923b1220d5b70b45fce783cae5b08fbe8f57ba98
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,16 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [0.5.0] - 2018-04-30
|
10
|
+
### Added
|
11
|
+
- Made currently installed version number of OnDemand available to all PUNs if
|
12
|
+
the OnDemand version file exists.
|
13
|
+
[#36](https://github.com/OSC/nginx_stage/issues/36)
|
14
|
+
- Can specify portal name to namespace multiple OnDemand hosted portals.
|
15
|
+
[#33](https://github.com/OSC/nginx_stage/issues/33)
|
16
|
+
- Can specify portal title for apps to use in their views.
|
17
|
+
[#33](https://github.com/OSC/nginx_stage/issues/33)
|
18
|
+
|
9
19
|
## [0.4.0] - 2018-02-09
|
10
20
|
### Added
|
11
21
|
- Added helpful utility for performing the necessary operations when updating
|
@@ -202,7 +212,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
202
212
|
### Added
|
203
213
|
- Initial release
|
204
214
|
|
205
|
-
[Unreleased]: https://github.com/OSC/nginx_stage/compare/v0.
|
215
|
+
[Unreleased]: https://github.com/OSC/nginx_stage/compare/v0.5.0...HEAD
|
216
|
+
[0.5.0]: https://github.com/OSC/nginx_stage/compare/v0.4.0...v0.5.0
|
206
217
|
[0.4.0]: https://github.com/OSC/nginx_stage/compare/v0.3.2...v0.4.0
|
207
218
|
[0.3.2]: https://github.com/OSC/nginx_stage/compare/v0.3.1...v0.3.2
|
208
219
|
[0.3.1]: https://github.com/OSC/nginx_stage/compare/v0.3.0...v0.3.1
|
data/lib/nginx_stage.rb
CHANGED
@@ -36,6 +36,50 @@ module NginxStage
|
|
36
36
|
|
37
37
|
extend Configuration
|
38
38
|
|
39
|
+
# The current version of OnDemand installed
|
40
|
+
# @example Get version of OnDemand for version file that exists
|
41
|
+
# ondemand_version #=> "1.3.0"
|
42
|
+
# @example No version file exists
|
43
|
+
# ondemand_version #=> nil
|
44
|
+
# @return [String, nil] current version of installed OnDemand if exists
|
45
|
+
def self.ondemand_version
|
46
|
+
version = File.read(ondemand_version_path).strip
|
47
|
+
version.empty? ? nil : version
|
48
|
+
rescue
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
|
52
|
+
# The unique name of the hosted OnDemand portal used to namespace apps, their
|
53
|
+
# data, and logging information
|
54
|
+
# @example No OnDemand Portal name specified
|
55
|
+
# portal #=> "ondemand"
|
56
|
+
# @example The AweSim portal is specified
|
57
|
+
# portal #=> "awesim"
|
58
|
+
# @return [String] unique portal name
|
59
|
+
def self.portal
|
60
|
+
portal = ondemand_portal.to_s.strip
|
61
|
+
if portal.empty?
|
62
|
+
"ondemand"
|
63
|
+
else
|
64
|
+
portal.downcase.gsub(/\s+/, "_")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# The title of the hosted OnDemand portal
|
69
|
+
# @example No title supplied
|
70
|
+
# title #=> "Open OnDemand"
|
71
|
+
# @example The OSC OnDemand portal
|
72
|
+
# title #=> "OSC OnDemand"
|
73
|
+
# @return [String] portal title
|
74
|
+
def self.title
|
75
|
+
title = ondemand_title.to_s.strip
|
76
|
+
if title.empty?
|
77
|
+
"Open OnDemand"
|
78
|
+
else
|
79
|
+
title
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
39
83
|
# Regex used to parse an app request
|
40
84
|
# @example Dev app request
|
41
85
|
# parse_app_request(request: '/dev/rails1/structure/1')
|
@@ -59,6 +103,24 @@ module NginxStage
|
|
59
103
|
app_info
|
60
104
|
end
|
61
105
|
|
106
|
+
# Environment used during execution of nginx binary
|
107
|
+
# @example Start the per-user NGINX for user Bob
|
108
|
+
# nginx_env(user: 'bob')
|
109
|
+
# #=> { "USER" => "bob", ... }
|
110
|
+
# @param user [String] the owner of the nginx process
|
111
|
+
# @return [Hash{String=>String}] the environment used to execute the nginx process
|
112
|
+
def self.nginx_env(user:)
|
113
|
+
{
|
114
|
+
"USER" => user,
|
115
|
+
"ONDEMAND_VERSION" => ondemand_version,
|
116
|
+
"ONDEMAND_PORTAL" => portal,
|
117
|
+
"ONDEMAND_TITLE" => title,
|
118
|
+
# backwards compatibility
|
119
|
+
"OOD_PORTAL" => ondemand_portal,
|
120
|
+
"OOD_DASHBOARD_TITLE" => ondemand_title,
|
121
|
+
}
|
122
|
+
end
|
123
|
+
|
62
124
|
# Arguments used during execution of nginx binary
|
63
125
|
# @example Start the per-user NGINX for user Bob
|
64
126
|
# nginx_args(user: 'bob')
|
@@ -8,6 +8,19 @@ module NginxStage
|
|
8
8
|
# Global
|
9
9
|
#
|
10
10
|
|
11
|
+
# Path to the OnDemand version file that contains version of OnDemand
|
12
|
+
# installed
|
13
|
+
# @return [String] the ondemand version file
|
14
|
+
attr_accessor :ondemand_version_path
|
15
|
+
|
16
|
+
# Unique name of OnDemand portal for namespacing multiple portals
|
17
|
+
# @return [String, nil] the name of OnDemand portal if defined
|
18
|
+
attr_accessor :ondemand_portal
|
19
|
+
|
20
|
+
# Title of the OnDemand portal that apps *should* display in their navbar
|
21
|
+
# @return [String, nil] the title of the Dashboard if defined
|
22
|
+
attr_accessor :ondemand_title
|
23
|
+
|
11
24
|
# Location of ERB templates used as NGINX configs
|
12
25
|
# @return [String] the ERB templates root path
|
13
26
|
attr_accessor :template_root
|
@@ -202,7 +215,7 @@ module NginxStage
|
|
202
215
|
File.expand_path(
|
203
216
|
@app_root.fetch(env) do
|
204
217
|
raise InvalidRequest, "invalid request environment: #{env}"
|
205
|
-
end % {env: env, owner: owner, name: name}
|
218
|
+
end % {env: env, owner: owner, name: name, portal: portal}
|
206
219
|
)
|
207
220
|
end
|
208
221
|
|
@@ -330,7 +343,10 @@ module NginxStage
|
|
330
343
|
# Sets the default configuration options
|
331
344
|
# @return [void]
|
332
345
|
def set_default_configuration
|
333
|
-
self.
|
346
|
+
self.ondemand_version_path = "/opt/ood/VERSION"
|
347
|
+
self.ondemand_portal = nil
|
348
|
+
self.ondemand_title = nil
|
349
|
+
self.template_root = "#{root}/templates"
|
334
350
|
|
335
351
|
self.proxy_user = 'apache'
|
336
352
|
self.nginx_bin = '/opt/rh/nginx16/root/usr/sbin/nginx'
|
@@ -361,7 +377,7 @@ module NginxStage
|
|
361
377
|
sys: '/var/lib/nginx/config/apps/sys/%{name}.conf'
|
362
378
|
}
|
363
379
|
self.app_root = {
|
364
|
-
dev: '~%{owner}/
|
380
|
+
dev: '~%{owner}/%{portal}/dev/%{name}',
|
365
381
|
usr: '/var/www/ood/apps/usr/%{owner}/gateway/%{name}',
|
366
382
|
sys: '/var/www/ood/apps/sys/%{name}'
|
367
383
|
}
|
@@ -79,10 +79,24 @@ module NginxStage
|
|
79
79
|
add_hook :exec_nginx do
|
80
80
|
if !skip_nginx
|
81
81
|
if File.file? NginxStage.pun_pid_path(user: user)
|
82
|
-
o, s = Open3.capture2e(
|
82
|
+
o, s = Open3.capture2e(
|
83
|
+
NginxStage.nginx_env(user: user),
|
84
|
+
[
|
85
|
+
NginxStage.nginx_bin,
|
86
|
+
"(#{user})"
|
87
|
+
],
|
88
|
+
*NginxStage.nginx_args(user: user, signal: :stop)
|
89
|
+
)
|
83
90
|
abort(o) unless s.success?
|
84
91
|
end
|
85
|
-
o, s = Open3.capture2e(
|
92
|
+
o, s = Open3.capture2e(
|
93
|
+
NginxStage.nginx_env(user: user),
|
94
|
+
[
|
95
|
+
NginxStage.nginx_bin,
|
96
|
+
"(#{user})"
|
97
|
+
],
|
98
|
+
*NginxStage.nginx_args(user: user)
|
99
|
+
)
|
86
100
|
s.success? ? exit : abort(o)
|
87
101
|
end
|
88
102
|
end
|
@@ -48,7 +48,11 @@ module NginxStage
|
|
48
48
|
if socket.sessions.zero? || force
|
49
49
|
puts u
|
50
50
|
if !skip_nginx
|
51
|
-
o, s = Open3.capture2e(
|
51
|
+
o, s = Open3.capture2e(
|
52
|
+
NginxStage.nginx_env(user: u),
|
53
|
+
NginxStage.nginx_bin,
|
54
|
+
*NginxStage.nginx_args(user: u, signal: :stop)
|
55
|
+
)
|
52
56
|
$stderr.puts o unless s.success?
|
53
57
|
end
|
54
58
|
end
|
@@ -34,7 +34,14 @@ module NginxStage
|
|
34
34
|
# Run the per-user NGINX process (exit quietly on success)
|
35
35
|
add_hook :exec_nginx do
|
36
36
|
if !skip_nginx
|
37
|
-
o, s = Open3.capture2e(
|
37
|
+
o, s = Open3.capture2e(
|
38
|
+
NginxStage.nginx_env(user: user),
|
39
|
+
[
|
40
|
+
NginxStage.nginx_bin,
|
41
|
+
"(#{user})"
|
42
|
+
],
|
43
|
+
*NginxStage.nginx_args(user: user, signal: signal)
|
44
|
+
)
|
38
45
|
s.success? ? exit : abort(o)
|
39
46
|
end
|
40
47
|
end
|
@@ -82,7 +82,14 @@ module NginxStage
|
|
82
82
|
# Run the per-user NGINX process (exit quietly on success)
|
83
83
|
add_hook :exec_nginx do
|
84
84
|
if !skip_nginx
|
85
|
-
o, s = Open3.capture2e(
|
85
|
+
o, s = Open3.capture2e(
|
86
|
+
NginxStage.nginx_env(user: user),
|
87
|
+
[
|
88
|
+
NginxStage.nginx_bin,
|
89
|
+
"(#{user})"
|
90
|
+
],
|
91
|
+
*NginxStage.nginx_args(user: user)
|
92
|
+
)
|
86
93
|
s.success? ? exit : abort(o)
|
87
94
|
end
|
88
95
|
end
|
data/lib/nginx_stage/version.rb
CHANGED
@@ -14,6 +14,20 @@
|
|
14
14
|
|
15
15
|
---
|
16
16
|
|
17
|
+
# Path to the OnDemand version file
|
18
|
+
#
|
19
|
+
#ondemand_version_path: '/opt/ood/VERSION'
|
20
|
+
|
21
|
+
# Unique name of this OnDemand portal used to namespace multiple hosted portals
|
22
|
+
# NB: If this is not set then most apps will use default namespace "ondemand"
|
23
|
+
#
|
24
|
+
#ondemand_portal: null
|
25
|
+
#
|
26
|
+
# Title of this OnDemand portal that apps *should* display in their navbar
|
27
|
+
# NB: If this is not set then most apps will use default title "Open OnDemand"
|
28
|
+
#
|
29
|
+
#ondemand_title: null
|
30
|
+
|
17
31
|
# Location of the ERB templates used in the generation of the NGINX configs
|
18
32
|
#
|
19
33
|
#template_root: '/opt/ood/nginx_stage/templates'
|
@@ -115,7 +129,7 @@
|
|
115
129
|
# corresponding environment
|
116
130
|
#
|
117
131
|
#app_root:
|
118
|
-
# dev: '~%{owner}/
|
132
|
+
# dev: '~%{owner}/%{portal}/dev/%{name}'
|
119
133
|
# usr: '/var/www/ood/apps/usr/%{owner}/gateway/%{name}'
|
120
134
|
# sys: '/var/www/ood/apps/sys/%{name}'
|
121
135
|
|
data/templates/pun.conf.erb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nginx_stage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Nicklas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-04-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -122,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
122
|
version: '0'
|
123
123
|
requirements: []
|
124
124
|
rubyforge_project:
|
125
|
-
rubygems_version: 2.4.5
|
125
|
+
rubygems_version: 2.4.5.4
|
126
126
|
signing_key:
|
127
127
|
specification_version: 4
|
128
128
|
summary: Stage and control per-user NGINX processes.
|