mantra 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f4c83562bb8a27496087aa37e7585c7b8732a2a4
4
- data.tar.gz: 359689e95b93eddb73263abd1d9d95839a3353c3
3
+ metadata.gz: 4bde299aead3e479dcc120a2cac913f12db69610
4
+ data.tar.gz: 22b16fe9b31eb8254f5403c15d461b55a2ad38dc
5
5
  SHA512:
6
- metadata.gz: aefe2b31df347529fbb9fcc28e53f8046f87587aea529f5b4fb9d790e22f52cadd33c185ba319eb1bb7404de0f14d6a89ec3c6e9c7bb9453979ab13f84750330
7
- data.tar.gz: 34ed3e362bb454af43997aec1e06fd5de3b226687cc90d1187adde4a6e10326ba01cb03e63474ebbb9d7310fedea0e82d859e6dc9f779975eb9661a3d4a57834
6
+ metadata.gz: 3ca75ec86cd4208543bddc0e135dd59f6fb280cdb02341fd2ea17b81a8b1dda76f3b6b67af7d83c2a55a7872d9c66042acb585313fcfa655004394d0e83bf8f2
7
+ data.tar.gz: d6dd4ec38e35a77849248c1edf9e7711ee9ffb089172edaa11b90026a752f34ca2bf9c18a7412c716ba4c8e18aa9efa3f4ea3a6481bbe980e904c99bec7d7f50
data/README.md CHANGED
@@ -24,12 +24,25 @@ Mantra tends to be an easily extendable tool, so you can add new commands and tr
24
24
 
25
25
  While some actions performed on manifest can be automated, anther require special configuration and extra knowledges about source manifes. Here is a small glossery that I use:
26
26
 
27
- `Transformation Manifest` - config file that describes how your manifest should be udpated
27
+ `Transformation Manifest` - config file that describes how your manifest should be udpated.
28
+
28
29
  `Source Manifest` - your source BOSH manifest, if you run templatizers on source manifest they can change it.
30
+
29
31
  `Target Manifest` - manifest that will contain extracted template properties, to restore source manifest you'll need to run merge tool with resulting source manifest.
32
+
30
33
  `Transform` - a ruby class that declares how specific transformation should be done.
31
34
 
32
- One more concept: no nokogiri and native dependencies.
35
+ One more concept: **no nokogiri and native dependencies**.
36
+
37
+ ### Dependencies
38
+
39
+ Ruby.
40
+
41
+ ### How to install
42
+
43
+ ```
44
+ gem install mantra
45
+ ```
33
46
 
34
47
  ### Examples
35
48
 
data/bin/mantra CHANGED
@@ -2,16 +2,24 @@
2
2
 
3
3
  $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
4
4
  require "mantra"
5
+ include Mantra::Helpers
5
6
 
6
- if ARGV.empty?
7
+ if ARGV.empty? || ARGV.first == "-h" || ARGV.first == "--help"
7
8
  puts Mantra::Command.usage
8
9
  exit 0
9
10
  end
10
11
 
11
- command_type = ARGV.shift
12
- options = {type: command_type.to_sym, args: ARGV}
12
+ command_name = ARGV.shift
13
+ options = {type: command_name.to_sym, args: ARGV}
14
+
15
+ begin
16
+ command = Mantra::Command.create(options)
17
+ command.run
18
+ rescue ObjectWithType::UnknownType, ObjectWithType::UnspecifiedType
19
+ puts "Error: Unknown command '#{command_name}', see command usage\n\n"
20
+ puts Mantra::Command.usage
21
+ exit 1
22
+ end
13
23
 
14
- command = Mantra::Command.create(options)
15
24
 
16
- command.run
17
25
 
@@ -9,8 +9,22 @@ module Mantra
9
9
  end
10
10
 
11
11
  def self.usage
12
- "\n\tUsage: \tmantra <action> [options]\n" +
13
- "\tactions:\t#{self.subclasses.map { |s| s.type }.join(", ")}\n\n"
12
+ "Mantra is Manifest Transformation tool to ease work with BOSH manifest.\n" +
13
+ "\nUsage:\tmantra <command> [options]" +
14
+ "\n\nCommands:\n" +
15
+ self.subclasses.map { |s| "#{" "*6}#{s.type}#{" "*20}\t#{s.description}" }.join("\n") +
16
+ "\n\n" +
17
+ "For help on any command run:\n" +
18
+ ["mantra <command> -h", "mantra <command> help", "mantra <command> --help"].map { |s| " " * 6 + s }.join("\n") +
19
+ "\n\n"
20
+ end
21
+
22
+ def self.description(description=nil)
23
+ description.nil? ? full_description : (@description = description)
24
+ end
25
+
26
+ def self.full_description
27
+ [@description, aliases.empty? ? nil : "(aliases: #{aliases.join(", ")})"].compact.join(" ")
14
28
  end
15
29
 
16
30
  def self.option(name, long_option, short_option, description)
@@ -33,7 +47,7 @@ module Mantra
33
47
  def parse_options
34
48
  @options = {}
35
49
  OptionParser.new do |options_parser|
36
- options_parser.banner = "Usage: mantra #{} [options]"
50
+ options_parser.banner = "Usage: mantra [options]"
37
51
  self.class.option_descriptors.each do |option|
38
52
  option_name = option.shift.to_s
39
53
  options_parser.on(*option) do |value|
@@ -50,3 +64,7 @@ end
50
64
  require "mantra/commands/find"
51
65
  require "mantra/commands/merge"
52
66
  require "mantra/commands/transform"
67
+ require "mantra/commands/highlight"
68
+ require "mantra/commands/render_release_template"
69
+ require "mantra/commands/detect_certificates"
70
+ require "mantra/commands/help"
@@ -0,0 +1,17 @@
1
+ module Mantra
2
+ class Commands
3
+ class DetectCertificates < Command
4
+ type :"detect-certificates"
5
+ aliases "certs", "dc"
6
+ description "Find and group certificates in manifest"
7
+
8
+ option :manifest, "--manifest manifest-file", "-m manifest-file", "manifest file"
9
+
10
+ def perform
11
+ m = Manifest.new(manifest)
12
+ raise "Not implemented yet"
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -5,7 +5,9 @@ module Mantra
5
5
  class Commands
6
6
  class Find < Command
7
7
  type :find
8
- alias_type :f
8
+ aliases :f
9
+ description "Transform manifest using transform config"
10
+
9
11
  option :scope, "--scope scope-path", "-s scope", "path scope you want to find"
10
12
  option :manifest, "--manifest manifest-file", "-m manifest-file", "manifest"
11
13
  option :format, "--format format", "-f format", "format (yaml or json)"
@@ -0,0 +1,17 @@
1
+ require "yaml"
2
+ require "json"
3
+
4
+ module Mantra
5
+ class Commands
6
+ class Help < Command
7
+ type :help
8
+ description "Print help message"
9
+
10
+ def perform
11
+ puts Mantra::Command.usage
12
+ exit 0
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,23 @@
1
+ require "yaml"
2
+ require "json"
3
+
4
+ module Mantra
5
+ class Commands
6
+ class Highlight < Command
7
+ type :highlight
8
+ aliases :h
9
+ description "Highlight manifest path or values"
10
+
11
+ option :scope, "--scope scope-path", "-s scope", "path scope you want to highlight"
12
+ option :value, "--value value", "-v value", "value to highlight"
13
+ option :regex, "--regex value", "-r regex", "regex of value to highlight"
14
+ option :manifest, "--manifest manifest-file", "-m manifest-file", "manifest file"
15
+
16
+ def perform
17
+ m = Manifest.new(manifest)
18
+ raise "Not implemented yet"
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -5,14 +5,17 @@ module Mantra
5
5
  class Commands
6
6
  class Merge < Command
7
7
  type :merge
8
- alias_type :m
9
- attr_accessor :manifest
10
-
11
- option :json, "--json JSON_STRING", "-j", "json in text format"
12
- option :file, "--file JSON_FILE", "-f", "File that should be merged to the manifest (not implemented)"
8
+ aliases :m
9
+ description "Merge object to manifest to specified path"
10
+
11
+ option :json, "--json JSON_STRING", "-j", "String with JSON object that should be merged to the manifest"
12
+ option :file, "--file JSON_FILE", "-f", "JSON file that should be merged to the manifest"
13
+ option :yaml_file, "--yaml YAML_FILE", "-y", "File that should be merged to the manifest (not implemented)"
13
14
  option :path, "--scope PATH", "-s", "Scope (or path) in Manifest where to merge this value"
14
15
  option :manifest_path, "--manifest MANIFEST", "-m", "Manifest path"
15
16
 
17
+ attr_accessor :manifest
18
+
16
19
  def perform
17
20
  if json.nil? && file.nil?
18
21
  raise "json of file should be specified"
@@ -0,0 +1,23 @@
1
+ require "yaml"
2
+ require "json"
3
+
4
+ module Mantra
5
+ class Commands
6
+ class RenderReleaseTemplate < Command
7
+ type :"render-release-template"
8
+ aliases "render-template", "rt", "rrt"
9
+ description "Transform manifest using transform config"
10
+
11
+ option :release_folder, "--release-folder release-folder", "-r scope", "path scope you want to find"
12
+ option :template_name, "--template template-path", "-m manifest-file", "manifest"
13
+ option :context, "--context format", "-f format", "format (yaml or json)"
14
+ option :context_file, "--context-file", "-p", "format (yaml or json)"
15
+
16
+ def perform
17
+ # see this gist: https://gist.github.com/allomov/c2e7780384674fa85486cc3c3f6bf54f
18
+ raise "Not implemented yet"
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -4,12 +4,14 @@ module Mantra
4
4
  class Commands
5
5
  class Transform < Command
6
6
  type :transform
7
- alias_type :t
8
- attr_accessor :manifest
7
+ aliases :t
8
+ description "Transform manifest using transform config"
9
9
 
10
10
  option :transform_config_path, "--config CONFIG", "-t", "Transformation config path"
11
11
  option :manifest_path, "--manifest MANIFEST", "-m", "Manifest path"
12
12
 
13
+ attr_accessor :manifest
14
+
13
15
  def transform_config
14
16
  @transform_config ||= YAML.load_file(transform_config_path)
15
17
  end
@@ -15,8 +15,13 @@ module Mantra
15
15
  type.nil? ? @type : (@type = type.to_sym)
16
16
  end
17
17
 
18
- def alias_type(alias_type=nil)
19
- alias_type.nil? ? @alias_type : (@alias_type = alias_type.to_sym)
18
+ def alias_type(alias_type)
19
+ aliases(alias_type)
20
+ end
21
+
22
+ def aliases(*args)
23
+ @aliases = [] if @aliases.nil?
24
+ args.empty? ? @aliases : (@aliases.concat(args.map {|a| a.to_sym }))
20
25
  end
21
26
 
22
27
  def create(options)
@@ -31,7 +36,7 @@ module Mantra
31
36
  end
32
37
 
33
38
  def find_by_type(type)
34
- self.subclasses.find { |s| s.type == type || s.alias_type == type }
39
+ self.subclasses.find { |s| s.type == type || s.aliases.include?(type) }
35
40
  end
36
41
 
37
42
  def inherited(subclass)
@@ -1,3 +1,3 @@
1
1
  module Mantra
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mantra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Lomov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-12 00:00:00.000000000 Z
11
+ date: 2017-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -120,8 +120,12 @@ files:
120
120
  - lib/mantra/certificates/cortege.rb
121
121
  - lib/mantra/certificates/group.rb
122
122
  - lib/mantra/command.rb
123
+ - lib/mantra/commands/detect_certificates.rb
123
124
  - lib/mantra/commands/find.rb
125
+ - lib/mantra/commands/help.rb
126
+ - lib/mantra/commands/highlight.rb
124
127
  - lib/mantra/commands/merge.rb
128
+ - lib/mantra/commands/render_release_template.rb
125
129
  - lib/mantra/commands/transform.rb
126
130
  - lib/mantra/helpers/object_with_type.rb
127
131
  - lib/mantra/helpers/regexp_helper.rb