oo-cartridge-tools 0.1
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/README.md +46 -0
- data/bin/oo-cartridge-lint +31 -0
- data/lib/openshift/cartridge_tools.rb +5 -0
- data/lib/openshift/cartridge_tools/lint.rb +57 -0
- data/schema/manifest_schema_20130929.yml +165 -0
- metadata +84 -0
data/README.md
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# OpenShift Cartridge Lint
|
2
|
+
|
3
|
+
The OpenShift Cartridge Lint is an utility which helps developers to test
|
4
|
+
the validity and syntax of the cartridge metadata.
|
5
|
+
|
6
|
+
In future this command will be expanded to provide more functionality, but for
|
7
|
+
now you can use it to validate the cartridge 'manifest.yml' file to make sure
|
8
|
+
you haven't missed some required attribute or you not made the syntax error.
|
9
|
+
|
10
|
+
## Using oo-cartridge-lint
|
11
|
+
|
12
|
+
### Dependencies:
|
13
|
+
|
14
|
+
* [kwalify](http://www.kuwata-lab.com/kwalify)
|
15
|
+
* [commander](http://visionmedia.github.io/commander)
|
16
|
+
|
17
|
+
(Don't worry, these dependencies are installed automatically for you)
|
18
|
+
|
19
|
+
### Installation:
|
20
|
+
|
21
|
+
```
|
22
|
+
$ gem install oo-cartridge-lint
|
23
|
+
```
|
24
|
+
|
25
|
+
(the Fedora/RHEL packages are TBD)
|
26
|
+
|
27
|
+
### Usage:
|
28
|
+
|
29
|
+
To check your current cartridge, you can run the following command:
|
30
|
+
|
31
|
+
```
|
32
|
+
$ cd cartridge-dir/
|
33
|
+
$ oo-cartridge-lint manifest
|
34
|
+
```
|
35
|
+
|
36
|
+
The output should tell you if your manifest.yml has correct syntax or not. The
|
37
|
+
sample output might look like this:
|
38
|
+
|
39
|
+
```
|
40
|
+
~/code/openshift-origin-cartridge-ruby → oo-cartridge-lint manifest --file metadata/manifest.yml.rhel
|
41
|
+
[openshift-origin-cartridge-ruby/metadata/manifest.yml.rhel] INVALID
|
42
|
+
[/] - key 'Description:' is required.
|
43
|
+
[/Architecture] - 'arm': invalid Architecture value.
|
44
|
+
```
|
45
|
+
|
46
|
+
(Note: The --file option is optional, by default the command will check the `metadata/manifest.yml` path.
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'commander/import'
|
5
|
+
|
6
|
+
require_relative '../lib/openshift/cartridge_utils'
|
7
|
+
|
8
|
+
program :name, 'OpenShift cartridge lint'
|
9
|
+
program :version, '1.0.0'
|
10
|
+
program :description, 'Validate the OpenShift cartridge'
|
11
|
+
|
12
|
+
command :manifest do |c|
|
13
|
+
c.syntax = 'manifest'
|
14
|
+
c.description = 'Validates the manifest.yml'
|
15
|
+
c.option '--file STRING', String, 'The manifest.yml path (default: ./metadata/manifest.yml'
|
16
|
+
c.option '--schema STRING', String, 'Override the manifest.yaml kwalify schema'
|
17
|
+
|
18
|
+
c.action do |_, options|
|
19
|
+
manifest_file = OpenShift::CartridgeUtils::Lint.guess_manifest_path(options.file)
|
20
|
+
schema_file = OpenShift::CartridgeUtils::Lint.guess_schema_path(options.schema)
|
21
|
+
result = OpenShift::CartridgeUtils::Lint.parse(manifest_file, schema_file)
|
22
|
+
if result.errors?
|
23
|
+
say "[#{manifest_file}] INVALID"
|
24
|
+
result.errors.each { |e| say " [#{e.path}] - #{e.message}" }
|
25
|
+
exit(1)
|
26
|
+
else
|
27
|
+
say "[#{manifest_file}] VALID"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'kwalify'
|
3
|
+
|
4
|
+
module OpenShift
|
5
|
+
module CartridgeTools
|
6
|
+
|
7
|
+
class Lint
|
8
|
+
|
9
|
+
CURRENT_MANIFEST_SCHEMA = "manifest_schema_20130929.yml"
|
10
|
+
|
11
|
+
def self.guess_manifest_path(file=nil)
|
12
|
+
base_path = Dir.pwd
|
13
|
+
unless file.nil?
|
14
|
+
file_path = File.join(base_path, file)
|
15
|
+
else
|
16
|
+
file_path = File.join(base_path, 'metadata', 'manifest.yml')
|
17
|
+
end
|
18
|
+
raise "File not found: #{file_path}" unless File.exists?(file_path)
|
19
|
+
return file_path
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.guess_schema_path(schema=nil)
|
23
|
+
base_path = Dir.pwd
|
24
|
+
unless schema.nil?
|
25
|
+
schema_path = File.join(base_path, schema)
|
26
|
+
else
|
27
|
+
schema_path = File.join(File.dirname(__FILE__), '..', '..', '..', 'schema', CURRENT_MANIFEST_SCHEMA)
|
28
|
+
end
|
29
|
+
raise "Schema not found: #{schema_path}" unless File.exists?(schema_path)
|
30
|
+
return schema_path
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.parse(manifest_file, schema_file=nil)
|
34
|
+
manifest = YAML.load_file(manifest_file)
|
35
|
+
schema = Kwalify::Yaml.load_file(schema_file)
|
36
|
+
validator = Kwalify::Validator.new(schema)
|
37
|
+
LintResult.get(validator.validate(manifest))
|
38
|
+
end
|
39
|
+
|
40
|
+
class LintResult
|
41
|
+
attr_accessor :errors
|
42
|
+
|
43
|
+
def initialize(errors)
|
44
|
+
@errors = errors
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.get(validator)
|
48
|
+
self.new(validator)
|
49
|
+
end
|
50
|
+
|
51
|
+
def errors?; !errors.empty?; end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,165 @@
|
|
1
|
+
&manifest
|
2
|
+
type: map
|
3
|
+
required: yes
|
4
|
+
mapping:
|
5
|
+
"Name":
|
6
|
+
required: yes
|
7
|
+
"Cartridge-Short-Name":
|
8
|
+
required: yes
|
9
|
+
pattern: /[A-Z_]+/
|
10
|
+
"Display-Name":
|
11
|
+
required: yes
|
12
|
+
"Architecture":
|
13
|
+
enum: [ 'noarch', 'i386', 'x86_64' ]
|
14
|
+
"Description":
|
15
|
+
required: yes
|
16
|
+
"Version":
|
17
|
+
required: yes
|
18
|
+
pattern: /^([\d\.]+)$/
|
19
|
+
"Versions":
|
20
|
+
type: seq
|
21
|
+
sequence:
|
22
|
+
- { unique: yes }
|
23
|
+
"License":
|
24
|
+
required: yes
|
25
|
+
"License-Url":
|
26
|
+
pattern: /^http(s?):\/\//
|
27
|
+
"Vendor":
|
28
|
+
required: yes
|
29
|
+
"Cartridge-Version":
|
30
|
+
required: yes
|
31
|
+
pattern: /[0-9][0-9\.]*/
|
32
|
+
"Compatible-Versions":
|
33
|
+
type: seq
|
34
|
+
sequence:
|
35
|
+
- { unique: yes, pattern: "/[0-9][0-9\.]*/" }
|
36
|
+
"Cartridge-Vendor":
|
37
|
+
required: yes
|
38
|
+
"Categories":
|
39
|
+
type: seq
|
40
|
+
required: yes
|
41
|
+
sequence:
|
42
|
+
- { unique: yes, required: true, pattern: "/[a-z][a-z_]*/" }
|
43
|
+
"Website":
|
44
|
+
pattern: /^http(s?):\/\//
|
45
|
+
"Help-Topics":
|
46
|
+
type: map
|
47
|
+
mapping:
|
48
|
+
"Developer Center":
|
49
|
+
"=": { type: str }
|
50
|
+
"Cart-Data":
|
51
|
+
type: seq
|
52
|
+
sequence:
|
53
|
+
- type: map
|
54
|
+
mapping:
|
55
|
+
"Key":
|
56
|
+
required: true
|
57
|
+
"Type":
|
58
|
+
required: true
|
59
|
+
enum: [environment, cart_data]
|
60
|
+
"Description":
|
61
|
+
required: true
|
62
|
+
"Publishes": &publishes
|
63
|
+
type: map
|
64
|
+
mapping:
|
65
|
+
"=":
|
66
|
+
type: map
|
67
|
+
mapping:
|
68
|
+
"Type":
|
69
|
+
pattern: /^(ENV|STRING|NET_TCP|NET_UDP|FILESYSTEM)\:/
|
70
|
+
"Subscribes": &subscribes
|
71
|
+
type: map
|
72
|
+
mapping:
|
73
|
+
"=":
|
74
|
+
type: map
|
75
|
+
mapping:
|
76
|
+
"Type":
|
77
|
+
pattern: /^(ENV|STRING|NET_TCP|NET_UDP|FILESYSTEM)\:/
|
78
|
+
"Required":
|
79
|
+
type: bool
|
80
|
+
"Scaling": &scaling
|
81
|
+
type: map
|
82
|
+
mapping:
|
83
|
+
"Min": &scale_type
|
84
|
+
type: int
|
85
|
+
range: { max: 10, min: -10 }
|
86
|
+
"Max": *scale_type
|
87
|
+
"Multiplier": *scale_type
|
88
|
+
"Provides":
|
89
|
+
type: seq
|
90
|
+
sequence:
|
91
|
+
- { unique: yes }
|
92
|
+
"Endpoints":
|
93
|
+
type: seq
|
94
|
+
sequence:
|
95
|
+
- type: map
|
96
|
+
mapping:
|
97
|
+
"Private-IP-Name": { required: yes, pattern: "/[A-Z][A-Z_]+/" }
|
98
|
+
"Private-Port-Name": { required: yes, pattern: "/[A-Z][A-Z_]+/" }
|
99
|
+
"Private-Port": { type: int, range: { min-ex: 1024 } }
|
100
|
+
"Public-Port-Name": { unique: yes, pattern: "/[A-Z][A-Z_]+/" }
|
101
|
+
"WebSocket-Port": { type: int, range: { min-ex: 1024 } }
|
102
|
+
"WebSocket-Port-Name": { unique: yes, pattern: "/[A-Z][A-Z_]+/" }
|
103
|
+
"Protocols":
|
104
|
+
type: seq
|
105
|
+
sequence:
|
106
|
+
- { unique: yes }
|
107
|
+
"Options":
|
108
|
+
type: map
|
109
|
+
mapping:
|
110
|
+
"ssl_to_gear": {type: bool}
|
111
|
+
"Mappings":
|
112
|
+
type: seq
|
113
|
+
sequence:
|
114
|
+
- type: map
|
115
|
+
mapping:
|
116
|
+
"Frontend": { required: yes }
|
117
|
+
"Backend": { required: yes }
|
118
|
+
"Options":
|
119
|
+
type: map
|
120
|
+
mapping:
|
121
|
+
"websocket": { type: any, enum: [true, false, 1, 0] }
|
122
|
+
"health": {type: any, enum: [true, false, 1,0] }
|
123
|
+
"target_update": { type: any, enum: [true, false, 1, 0] }
|
124
|
+
"connections": { type: int }
|
125
|
+
"file": {type: any, enum: [true, false, 1, 0] }
|
126
|
+
"tohttps": {type: any, enum: [true, false, 1, 0] }
|
127
|
+
"Additional-Control-Actions":
|
128
|
+
type: seq
|
129
|
+
sequence:
|
130
|
+
- { unique: yes, enum: [threaddump] }
|
131
|
+
"Configure-Order":
|
132
|
+
type: seq
|
133
|
+
sequence:
|
134
|
+
- { unique: yes, pattern: "/[a-z-]+/" }
|
135
|
+
"Group-Overrides":
|
136
|
+
type: seq
|
137
|
+
sequence:
|
138
|
+
- type: map
|
139
|
+
mapping:
|
140
|
+
"components":
|
141
|
+
type: seq
|
142
|
+
sequence:
|
143
|
+
- { type: str, unique: yes, pattern: "/[a-z-]+/" }
|
144
|
+
"Components":
|
145
|
+
type: map
|
146
|
+
mapping:
|
147
|
+
"=":
|
148
|
+
type: map
|
149
|
+
mapping:
|
150
|
+
"Publishes": *publishes
|
151
|
+
"Subscribes": *subscribes
|
152
|
+
"Scaling": *scaling
|
153
|
+
"Version-Overrides":
|
154
|
+
type: map
|
155
|
+
mapping:
|
156
|
+
"=":
|
157
|
+
type: map
|
158
|
+
mapping:
|
159
|
+
"=": { type: any }
|
160
|
+
"Suggests":
|
161
|
+
type: seq
|
162
|
+
sequence:
|
163
|
+
- { unique: yes }
|
164
|
+
"Install-Build-Required":
|
165
|
+
type: bool
|
metadata
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: oo-cartridge-tools
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Michal Fojtik
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-10-03 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: kwalify
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.7.2
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.7.2
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: commander
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
description: Various utilities to help with OpenShift cartridge development
|
47
|
+
email:
|
48
|
+
- mfojtik@redhat.com
|
49
|
+
executables:
|
50
|
+
- oo-cartridge-lint
|
51
|
+
extensions: []
|
52
|
+
extra_rdoc_files: []
|
53
|
+
files:
|
54
|
+
- lib/openshift/cartridge_tools.rb
|
55
|
+
- lib/openshift/cartridge_tools/lint.rb
|
56
|
+
- bin/oo-cartridge-lint
|
57
|
+
- schema/manifest_schema_20130929.yml
|
58
|
+
- README.md
|
59
|
+
homepage: https://github.com/mfojtik/oo-cartridge-tools
|
60
|
+
licenses:
|
61
|
+
- ASL 2.0
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ! '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
requirements: []
|
79
|
+
rubyforge_project:
|
80
|
+
rubygems_version: 1.8.23
|
81
|
+
signing_key:
|
82
|
+
specification_version: 3
|
83
|
+
summary: OpenShift Cartridge utilities
|
84
|
+
test_files: []
|