gordon 0.0.13 → 0.0.14
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/README.md +19 -6
- data/lib/gordon/application/factory.rb +5 -1
- data/lib/gordon/application/templates/java_web_app.rb +3 -3
- data/lib/gordon/application/templates/ruby_standalone_app.rb +1 -1
- data/lib/gordon/application/templates/ruby_web_app.rb +1 -1
- data/lib/gordon/cookery/dependency_resolver.rb +37 -30
- data/lib/gordon/recipe.rb +1 -14
- data/lib/gordon/version.rb +1 -1
- data/spec/gordon/application/factory_spec.rb +10 -0
- data/spec/gordon/cookery/dependency_resolver_spec.rb +56 -8
- data/spec/gordon/recipe_spec.rb +1 -11
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f96bc9082e1fa53d17474c0ad13eaf2b4724a487
|
4
|
+
data.tar.gz: c3bab3732ee745e380e937da11c8018200a706c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e58da1e400b4cfec597b3203f7f9d19dc7dc865a071708af7f07e8b334a2aca3da44fe1f253d1cb2838ca5bfa6fec88f0f23afd0a4d7bed6f1c83515ee9cfb3
|
7
|
+
data.tar.gz: e8d17b489e533aa2638b9c360c10eea86c9f272ad605c91e65fa0afb0dd72bab0367b919716488ba7825645d16464e5a60f742df4504fefab5b297fc11771a3b
|
data/README.md
CHANGED
@@ -30,9 +30,9 @@ Per example: create a user that will run app with credentials, whose $HOME is th
|
|
30
30
|
|
31
31
|
* Apps supported:
|
32
32
|
|
33
|
-
* Ruby Web
|
34
|
-
* Ruby Standalone
|
35
|
-
* Java Web
|
33
|
+
* Ruby Web (resides based on Http Server of choice)
|
34
|
+
* Ruby Standalone (resides on /opt/*app_name*)
|
35
|
+
* Java Web (resides based on Web Server of choice)
|
36
36
|
|
37
37
|
## Installation
|
38
38
|
|
@@ -59,12 +59,13 @@ First, you need to vendorize all gems in deployment mode:
|
|
59
59
|
Here a simple example to build a Ruby Web App that runs Nginx and uses Systemd as init process. Just enter on source folder of your app and run in your terminal:
|
60
60
|
|
61
61
|
$ ruby -S gordon \
|
62
|
-
--app-type
|
62
|
+
--app-type web \
|
63
63
|
--app-name $APP_NAME \
|
64
64
|
--app-desc $APP_DESC \
|
65
65
|
--app-home $APP_HOME \
|
66
66
|
--app-version $APP_VERSION \
|
67
67
|
--app-source . \
|
68
|
+
--runtime-name ruby \
|
68
69
|
--runtime-version $MRI_VERSION \
|
69
70
|
--http-server-type nginx \
|
70
71
|
--init-type systemd \
|
@@ -83,6 +84,15 @@ Due for conventions, remember:
|
|
83
84
|
|
84
85
|
Sounds good?
|
85
86
|
|
87
|
+
## And for Java Web applications?
|
88
|
+
|
89
|
+
First, generate war files. After, do the following steps:
|
90
|
+
|
91
|
+
* Set --app-source with the path of war file;
|
92
|
+
* Set --runtime-name to java-oracle (only for CentOS platform at this time) or java-openjdk;
|
93
|
+
* Set --runtime-version (1.7.0_60, 1.8.0_31; Gordon checks and inject correct version into package metadata).
|
94
|
+
* You can avoid --init-type because war files are handled by application server of choice (Tomcat or Jetty).
|
95
|
+
|
86
96
|
## Why you not use Omnibus or Heroku buildpacks?
|
87
97
|
|
88
98
|
Because I want a tool able to create Linux packages that can be extensible based on my needs.
|
@@ -91,15 +101,18 @@ Because I want a tool able to create Linux packages that can be extensible based
|
|
91
101
|
|
92
102
|
Because I not found a trivial way to use fpm when you need to package a application under different directories (Apache2 and Systemd per example). If you show to me, I will think to abolish templates.
|
93
103
|
|
104
|
+
## Why you can't handle all recipes into a single one and abstract build and install?
|
105
|
+
|
106
|
+
Because I need to call some protected methods on FPM::Cookery::Recipe and adding dynamic mixins will be a nightmare due for complexity to maintain.
|
107
|
+
|
94
108
|
## Why Gordon?
|
95
109
|
|
96
110
|
Because I like Gordon Ramsay.
|
97
111
|
|
98
112
|
## TODO
|
99
113
|
|
114
|
+
* Add Oracle JRE support for Debian (oracle-jre-installer?)
|
100
115
|
* Validate outputs
|
101
|
-
* Refactor to have only one FPM::Cookery recipe.
|
102
|
-
* Integrate directly with FPM::Cookery classes
|
103
116
|
* Debian check (gem heavly developed under CentOS environment)
|
104
117
|
|
105
118
|
## Contributing
|
@@ -1,9 +1,13 @@
|
|
1
1
|
module Gordon
|
2
2
|
module Application
|
3
3
|
class Factory
|
4
|
-
def self.create(
|
4
|
+
def self.create(options)
|
5
5
|
namespace = "Application::Types"
|
6
6
|
|
7
|
+
runtime_name = options.runtime_name
|
8
|
+
runtime_name = :java if runtime_name =~ /java/
|
9
|
+
application_type = "#{runtime_name}_#{options.app_type}_app"
|
10
|
+
|
7
11
|
::Gordon::Factory.create_instance(namespace, application_type)
|
8
12
|
end
|
9
13
|
end
|
@@ -21,10 +21,10 @@ class JavaWebApp < FPM::Cookery::Recipe
|
|
21
21
|
|
22
22
|
source $env_vars.app_source, with: :local_path
|
23
23
|
|
24
|
-
depends *resolve_dependencies($env_vars)
|
24
|
+
depends *resolve_dependencies($env_vars, platform)
|
25
25
|
|
26
|
-
fpm_attributes[
|
27
|
-
fpm_attributes[
|
26
|
+
fpm_attributes["#{FPM::Cookery::Facts.target}_user".to_sym] = 'tomcat'
|
27
|
+
fpm_attributes["#{FPM::Cookery::Facts.target}_group".to_sym] = 'tomcat'
|
28
28
|
|
29
29
|
def build
|
30
30
|
web_server_path = get_skeleton_path_from_type($env_vars, $env_vars.web_server_type)
|
@@ -21,7 +21,7 @@ class RubyStandaloneApp < FPM::Cookery::Recipe
|
|
21
21
|
|
22
22
|
source $env_vars.app_source, with: :local_path
|
23
23
|
|
24
|
-
depends *resolve_dependencies($env_vars)
|
24
|
+
depends *resolve_dependencies($env_vars, platform)
|
25
25
|
|
26
26
|
def build
|
27
27
|
home_path = get_skeleton_path_from_type($env_vars, :misc)
|
@@ -21,7 +21,7 @@ class RubyWebApp < FPM::Cookery::Recipe
|
|
21
21
|
|
22
22
|
source $env_vars.app_source, with: :local_path
|
23
23
|
|
24
|
-
depends *resolve_dependencies($env_vars)
|
24
|
+
depends *resolve_dependencies($env_vars, platform)
|
25
25
|
|
26
26
|
def build
|
27
27
|
home_path = get_skeleton_path_from_type($env_vars, $env_vars.http_server_type)
|
@@ -1,63 +1,70 @@
|
|
1
|
-
require 'fpm/cookery/facts'
|
2
|
-
|
3
1
|
module Gordon
|
4
2
|
module Cookery
|
5
3
|
module DependencyResolver
|
6
4
|
include Common
|
7
5
|
|
8
|
-
def resolve_dependencies(env_vars)
|
9
|
-
fragments = env_vars.app_type.split('_')
|
10
|
-
app_runtime, app_type = fragments[0], fragments[1]
|
11
|
-
|
6
|
+
def resolve_dependencies(env_vars, platform)
|
12
7
|
dependencies = []
|
13
|
-
|
14
|
-
dependencies <<
|
15
|
-
dependencies <<
|
16
|
-
dependencies <<
|
8
|
+
|
9
|
+
dependencies << get_runtime_package_name(env_vars, platform)
|
10
|
+
dependencies << get_http_server_package_name(env_vars, platform) unless env_vars.http_server_type.empty?
|
11
|
+
dependencies << get_init_package_name(env_vars, platform) unless env_vars.init_type.empty?
|
12
|
+
dependencies << get_web_server_package_name(env_vars, platform) unless env_vars.web_server_type.empty?
|
17
13
|
|
18
14
|
dependencies.collect(&:to_s)
|
19
15
|
end
|
20
16
|
|
21
17
|
private
|
22
18
|
|
23
|
-
def get_runtime_package_name(
|
24
|
-
|
25
|
-
# TODO: get a way to handle openjdk
|
26
|
-
runtime_name = :jre
|
19
|
+
def get_runtime_package_name(env_vars, platform)
|
20
|
+
runtime_name, runtime_version = env_vars.runtime_name, env_vars.runtime_version
|
27
21
|
|
28
|
-
|
29
|
-
|
22
|
+
if runtime_name =~ /java/
|
23
|
+
package_name = get_java_package_name(runtime_name, runtime_version, platform)
|
24
|
+
else
|
25
|
+
package_name = "#{runtime_name} = #{runtime_version}"
|
26
|
+
end
|
27
|
+
|
28
|
+
package_name
|
29
|
+
end
|
30
|
+
|
31
|
+
def get_java_package_name(runtime_name, runtime_version, platform)
|
32
|
+
centos = platform == :centos
|
33
|
+
|
34
|
+
if runtime_name =~ /oracle/ && centos
|
35
|
+
if damn_oracle_8_jre?(runtime_version)
|
36
|
+
package_name = "jre#{runtime_version}"
|
30
37
|
else
|
31
|
-
|
38
|
+
package_name = "jre = #{runtime_version}"
|
32
39
|
end
|
33
40
|
else
|
34
|
-
|
35
|
-
|
36
|
-
|
41
|
+
if centos
|
42
|
+
package_name = "java-#{runtime_version[0..4]}-openjdk"
|
43
|
+
else
|
44
|
+
package_name = "openjdk-#{runtime_version[2]}-jre"
|
45
|
+
end
|
37
46
|
end
|
38
47
|
|
39
|
-
|
48
|
+
package_name
|
40
49
|
end
|
41
50
|
|
42
51
|
def damn_oracle_8_jre?(runtime_version)
|
43
52
|
runtime_version[2].to_s == '8'
|
44
53
|
end
|
45
54
|
|
46
|
-
def get_http_server_package_name(env_vars)
|
47
|
-
get_os_package_name(env_vars, :http_server_type)
|
55
|
+
def get_http_server_package_name(env_vars, platform)
|
56
|
+
get_os_package_name(env_vars, :http_server_type, platform)
|
48
57
|
end
|
49
58
|
|
50
|
-
def get_init_package_name(env_vars)
|
51
|
-
get_os_package_name(env_vars, :init_type)
|
59
|
+
def get_init_package_name(env_vars, platform)
|
60
|
+
get_os_package_name(env_vars, :init_type, platform)
|
52
61
|
end
|
53
62
|
|
54
|
-
def get_web_server_package_name(env_vars)
|
55
|
-
get_os_package_name(env_vars, :web_server_type)
|
63
|
+
def get_web_server_package_name(env_vars, platform)
|
64
|
+
get_os_package_name(env_vars, :web_server_type, platform)
|
56
65
|
end
|
57
66
|
|
58
|
-
def get_os_package_name(env_vars, attribute)
|
59
|
-
platform = FPM::Cookery::Facts.platform.to_sym
|
60
|
-
|
67
|
+
def get_os_package_name(env_vars, attribute, platform)
|
61
68
|
skeleton_type = create_skeleton_type(env_vars.send(attribute))
|
62
69
|
os_package_name = skeleton_type.get_os_package_name(platform)
|
63
70
|
|
data/lib/gordon/recipe.rb
CHANGED
@@ -4,20 +4,7 @@ module Gordon
|
|
4
4
|
|
5
5
|
def initialize(options)
|
6
6
|
@options = options
|
7
|
-
@application = Application::Factory.create(options
|
8
|
-
end
|
9
|
-
|
10
|
-
def platform
|
11
|
-
map = {
|
12
|
-
rpm: :centos,
|
13
|
-
deb: :debian,
|
14
|
-
}
|
15
|
-
|
16
|
-
map[options.package_type.to_sym]
|
17
|
-
end
|
18
|
-
|
19
|
-
def requires_platform?
|
20
|
-
!!platform
|
7
|
+
@application = Application::Factory.create(options)
|
21
8
|
end
|
22
9
|
|
23
10
|
def application_template_path
|
data/lib/gordon/version.rb
CHANGED
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Gordon::Application::Factory do
|
4
|
+
let(:options) { instance_double Gordon::Options, app_type: :web, runtime_name: :java }
|
5
|
+
|
6
|
+
it 'returns a instance of specified runtime and type' do
|
7
|
+
expect(described_class.create(options)).to be_instance_of(Gordon::Application::Types::JavaWebApp)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
@@ -12,7 +12,7 @@ describe Gordon::Cookery::DependencyResolver do
|
|
12
12
|
describe 'resolving dependencies' do
|
13
13
|
context 'given a ruby app' do
|
14
14
|
it 'returns all dependencies for web' do
|
15
|
-
expect(env_vars).to receive(:
|
15
|
+
expect(env_vars).to receive(:runtime_name).and_return("ruby")
|
16
16
|
expect(env_vars).to receive(:runtime_version).and_return("2.2.0")
|
17
17
|
allow(env_vars).to receive(:http_server_type).and_return("apache")
|
18
18
|
expect(env_vars).to receive(:web_server_type).and_return("")
|
@@ -24,11 +24,11 @@ describe Gordon::Cookery::DependencyResolver do
|
|
24
24
|
"systemd",
|
25
25
|
]
|
26
26
|
|
27
|
-
expect(subject.resolve_dependencies(env_vars)).to eq(expected)
|
27
|
+
expect(subject.resolve_dependencies(env_vars, :centos)).to eq(expected)
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'returns all dependencies for standalone' do
|
31
|
-
expect(env_vars).to receive(:
|
31
|
+
expect(env_vars).to receive(:runtime_name).and_return("ruby")
|
32
32
|
expect(env_vars).to receive(:runtime_version).and_return("2.1.5")
|
33
33
|
expect(env_vars).to receive(:http_server_type).and_return("")
|
34
34
|
expect(env_vars).to receive(:web_server_type).and_return("")
|
@@ -39,14 +39,14 @@ describe Gordon::Cookery::DependencyResolver do
|
|
39
39
|
"systemd",
|
40
40
|
]
|
41
41
|
|
42
|
-
expect(subject.resolve_dependencies(env_vars)).to eq(expected)
|
42
|
+
expect(subject.resolve_dependencies(env_vars, :centos)).to eq(expected)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
46
|
context 'given a java standalone app' do
|
47
47
|
it 'returns all dependencies for web' do
|
48
|
-
expect(env_vars).to receive(:app_type).and_return("java_web_app")
|
49
48
|
allow(env_vars).to receive(:http_server_type).and_return("apache")
|
49
|
+
expect(env_vars).to receive(:runtime_name).and_return("java-oracle")
|
50
50
|
allow(env_vars).to receive(:runtime_version).and_return("1.7.0_60")
|
51
51
|
allow(env_vars).to receive(:web_server_type).and_return("tomcat")
|
52
52
|
expect(env_vars).to receive(:init_type).and_return("")
|
@@ -57,12 +57,12 @@ describe Gordon::Cookery::DependencyResolver do
|
|
57
57
|
"tomcat",
|
58
58
|
]
|
59
59
|
|
60
|
-
expect(subject.resolve_dependencies(env_vars)).to eq(expected)
|
60
|
+
expect(subject.resolve_dependencies(env_vars, :centos)).to eq(expected)
|
61
61
|
end
|
62
62
|
|
63
63
|
it 'handles damn Oracle JRE 8 package name' do
|
64
|
-
expect(env_vars).to receive(:app_type).and_return("java_web_app")
|
65
64
|
allow(env_vars).to receive(:http_server_type).and_return("apache")
|
65
|
+
expect(env_vars).to receive(:runtime_name).and_return("java-oracle")
|
66
66
|
allow(env_vars).to receive(:runtime_version).and_return("1.8.0_25")
|
67
67
|
allow(env_vars).to receive(:web_server_type).and_return("tomcat")
|
68
68
|
expect(env_vars).to receive(:init_type).and_return("")
|
@@ -73,7 +73,55 @@ describe Gordon::Cookery::DependencyResolver do
|
|
73
73
|
"tomcat",
|
74
74
|
]
|
75
75
|
|
76
|
-
expect(subject.resolve_dependencies(env_vars)).to eq(expected)
|
76
|
+
expect(subject.resolve_dependencies(env_vars, :centos)).to eq(expected)
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'handles OpenJDK package name for centos' do
|
80
|
+
allow(env_vars).to receive(:http_server_type).and_return("apache")
|
81
|
+
expect(env_vars).to receive(:runtime_name).and_return("java-openjdk")
|
82
|
+
allow(env_vars).to receive(:runtime_version).and_return("1.7.0_60")
|
83
|
+
allow(env_vars).to receive(:web_server_type).and_return("tomcat")
|
84
|
+
expect(env_vars).to receive(:init_type).and_return("")
|
85
|
+
|
86
|
+
expected = [
|
87
|
+
"java-1.7.0-openjdk",
|
88
|
+
"httpd",
|
89
|
+
"tomcat",
|
90
|
+
]
|
91
|
+
|
92
|
+
expect(subject.resolve_dependencies(env_vars, :centos)).to eq(expected)
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'assigns java-oracle to OpenJDK for debian' do
|
96
|
+
allow(env_vars).to receive(:http_server_type).and_return("apache")
|
97
|
+
expect(env_vars).to receive(:runtime_name).and_return("java-oracle")
|
98
|
+
allow(env_vars).to receive(:runtime_version).and_return("1.7.0_60")
|
99
|
+
allow(env_vars).to receive(:web_server_type).and_return("tomcat")
|
100
|
+
expect(env_vars).to receive(:init_type).and_return("")
|
101
|
+
|
102
|
+
expected = [
|
103
|
+
"openjdk-7-jre",
|
104
|
+
"apache2",
|
105
|
+
"tomcat7",
|
106
|
+
]
|
107
|
+
|
108
|
+
expect(subject.resolve_dependencies(env_vars, :debian)).to eq(expected)
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'handles OpenJDK package name for debian' do
|
112
|
+
allow(env_vars).to receive(:http_server_type).and_return("apache")
|
113
|
+
expect(env_vars).to receive(:runtime_name).and_return("java-openjdk")
|
114
|
+
allow(env_vars).to receive(:runtime_version).and_return("1.7.0_60")
|
115
|
+
allow(env_vars).to receive(:web_server_type).and_return("tomcat")
|
116
|
+
expect(env_vars).to receive(:init_type).and_return("")
|
117
|
+
|
118
|
+
expected = [
|
119
|
+
"openjdk-7-jre",
|
120
|
+
"apache2",
|
121
|
+
"tomcat7",
|
122
|
+
]
|
123
|
+
|
124
|
+
expect(subject.resolve_dependencies(env_vars, :debian)).to eq(expected)
|
77
125
|
end
|
78
126
|
end
|
79
127
|
end
|
data/spec/gordon/recipe_spec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Gordon::Recipe do
|
4
|
-
let(:options) { instance_double Gordon::Options, app_type: :
|
4
|
+
let(:options) { instance_double Gordon::Options, app_type: :web, runtime_name: :ruby }
|
5
5
|
let(:app_type) { Gordon::Application::Types::RubyWebApp.new }
|
6
6
|
|
7
7
|
subject do
|
@@ -14,16 +14,6 @@ describe Gordon::Recipe do
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
# TODO: check if is really needed
|
18
|
-
describe 'getting a platform' do
|
19
|
-
pending
|
20
|
-
end
|
21
|
-
|
22
|
-
# TODO: check if is really needed
|
23
|
-
describe 'checking if requires platform' do
|
24
|
-
pending
|
25
|
-
end
|
26
|
-
|
27
17
|
describe 'getting application template path' do
|
28
18
|
it 'returns expected path based on app type' do
|
29
19
|
expect(subject.application_template_path).to eq(app_type.get_template_path)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gordon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcelo Pinheiro
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02
|
11
|
+
date: 2015-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -110,6 +110,7 @@ files:
|
|
110
110
|
- lib/gordon/skeleton/factory.rb
|
111
111
|
- lib/gordon/skeleton/types.rb
|
112
112
|
- lib/gordon/version.rb
|
113
|
+
- spec/gordon/application/factory_spec.rb
|
113
114
|
- spec/gordon/application/templates/java_web_app_spec.rb
|
114
115
|
- spec/gordon/application/templates/ruby_standalone_app_spec.rb
|
115
116
|
- spec/gordon/application/templates/ruby_web_app_spec.rb
|
@@ -158,6 +159,7 @@ signing_key:
|
|
158
159
|
specification_version: 4
|
159
160
|
summary: A tool to create application OS packages
|
160
161
|
test_files:
|
162
|
+
- spec/gordon/application/factory_spec.rb
|
161
163
|
- spec/gordon/application/templates/java_web_app_spec.rb
|
162
164
|
- spec/gordon/application/templates/ruby_standalone_app_spec.rb
|
163
165
|
- spec/gordon/application/templates/ruby_web_app_spec.rb
|