salthiera 0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ data.tar.gz: b3bd8ac1830135bc9f921f621e22a91f8513d1ad
4
+ metadata.gz: bda943843e60bf6ed7c5fed8cb05fbdeb986db6e
5
+ SHA512:
6
+ data.tar.gz: 20be867bae02f46069e12896694140a7b0b8535f733dbd5196b9acb29ca5c25363c82d2da6c90c576125b28de37f49429b68f77476ef09382a112e95623a122f
7
+ metadata.gz: c50cf042528029489d54b98c966c580dbac20f4d5cd63483b90f8ae6327eb5e42d63fbdf28d313f9009b9eb6c45bc6a2aaab2e212edfcebc55f4bc91a115918a
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ .idea
2
+ *.iml
3
+ *.gradle
4
+ keys/*.pem
5
+ pkg/
6
+ tmp/
7
+ .DS_Store
8
+ .rvmrc
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.8.7"
4
+ - "1.9.2"
5
+ - "1.9.3"
6
+ before_install:
7
+ - sudo apt-get update
8
+ - sudo apt-get install expect
9
+ script:
10
+ bundle exec cucumber -f progress
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org/'
2
+
3
+ group :development do
4
+ gem "aruba"
5
+ end
6
+
7
+ group :test do
8
+ gem "rake"
9
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,32 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ aruba (0.5.4)
5
+ childprocess (>= 0.3.6)
6
+ cucumber (>= 1.1.1)
7
+ rspec-expectations (>= 2.7.0)
8
+ builder (3.2.2)
9
+ childprocess (0.4.0)
10
+ ffi (~> 1.0, >= 1.0.11)
11
+ cucumber (1.3.10)
12
+ builder (>= 2.1.2)
13
+ diff-lcs (>= 1.1.3)
14
+ gherkin (~> 2.12)
15
+ multi_json (>= 1.7.5, < 2.0)
16
+ multi_test (>= 0.0.2)
17
+ diff-lcs (1.2.5)
18
+ ffi (1.9.3)
19
+ gherkin (2.12.2)
20
+ multi_json (~> 1.3)
21
+ multi_json (1.8.4)
22
+ multi_test (0.0.3)
23
+ rake (10.1.1)
24
+ rspec-expectations (2.14.4)
25
+ diff-lcs (>= 1.1.3, < 2.0)
26
+
27
+ PLATFORMS
28
+ ruby
29
+
30
+ DEPENDENCIES
31
+ aruba
32
+ rake
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+
2
+ The MIT License (MIT)
3
+
4
+ Copyright (c) 2013 GTMTech Ltd
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
7
+ this software and associated documentation files (the "Software"), to deal in
8
+ the Software without restriction, including without limitation the rights to
9
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
10
+ the Software, and to permit persons to whom the Software is furnished to do so,
11
+ subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,43 @@
1
+ SaltHiera
2
+ =========
3
+
4
+ [![Build Status](https://travis-ci.org/Gtmtechltd/salthiera.png?branch=master)](https://travis-ci.org/gtmtechltd/salthiera)
5
+
6
+ salthiera is a hiera-like tool which is designed to work with SaltStack Pillars via the ext_pillar option.
7
+
8
+ Background
9
+ ----------
10
+
11
+ Hiera is a great way of defining conventions by which environmental data can be accessed. Unfortunately it is limited to specific lookup dictionary "keys", which you specify one at a time. This is incompatible with salt which expects an external pillar to supply a range of keys/values which it merges into its existing pillar information.
12
+
13
+ Therefore there was a need to create something which gives the convention advantages of the Hiera system which integrates well with SaltStack.
14
+
15
+ Initially this project is written in Ruby as a gem, however I intend to port to python to align with SaltStack properly when I get the time.
16
+
17
+ Setup
18
+ -----
19
+
20
+ ### Installing salthiera
21
+
22
+ $ gem install salthiera
23
+
24
+ ### Define a salthiera.yaml configuration file
25
+
26
+ $ chown -R puppet:puppet /etc/puppet/secure/keys
27
+ $ chmod -R 0500 /etc/puppet/secure/keys
28
+ $ chmod 0400 /etc/puppet/secure/keys/*.pem
29
+ $ ls -lha /etc/puppet/secure/keys
30
+ -r-------- 1 puppet puppet 1.7K Sep 24 16:24 private_key.pkcs7.pem
31
+ -r-------- 1 puppet puppet 1.1K Sep 24 16:24 public_key.pkcs7.pem
32
+
33
+ ### Use it to lookup data!
34
+
35
+ $ salthiera -c /etc/salthiera.yaml key1=value1 key2=value
36
+
37
+ SaltHiera supports keys, values
38
+
39
+
40
+ Authors
41
+ -------
42
+
43
+ - [Geoff Meakin](http://github.com/gtmtech) - Author
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/salthiera ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'salt_hiera/CLI'
5
+
6
+ SaltHiera::CLI.parse
7
+ SaltHiera::CLI.execute
@@ -0,0 +1,2 @@
1
+ test1: this_is_the_root
2
+
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpAIBAAKCAQEA49eiqbbJyECQvy3/5jO7YZ+qaHj0uJj35f09ahQZ7mHfUA6Z
3
+ cf759uJFTh+cBT4bCcKCAy5AUGmmLb0jLb+pU5c5Fn6mlm+bYipjuTNkaVbbwBRI
4
+ 3vIrQO7RO/eaYRhgG3CrO9Yl7eTkmFU3P1rqfKcSnTGW4AlVrDuEOqf0tXTsVgZ0
5
+ cSdXfi80bEkz+6oMAn+DyWO1LjvGvdsW05o0SMDM8NyV/7GPyp0a3A3gwiX/WSMI
6
+ xf7TuxSGc/JMTYzSUvdzT8RiFAYJ/0m3CDm+DRXAEpmG6RqjGrrnTokQepcclMf8
7
+ NV917qKj61hEv4Si043zEMQbAzotCBQAgjL45QIDAQABAoIBAQDKjOsI4X0lT3De
8
+ 5O/4IMlWknEWC2HTsfnANo+gfFpJOC0kqLX1R+3Ec4eVWjiD2KCE3qxiU33Nfv7C
9
+ 7sAVbawEqg2QV+uVFYcXkAOzo2KC2zrk2aOmv7eANE9Cdm6CHv9hpZo0yb5SbQhj
10
+ /G3vHs4THxxHLsyoQuQtB4QX+TRtEuVb7jWLfhLRO/rR44D3oak1MewLI4FSJHIH
11
+ 3jK/oxMfntoM1469ZFP4O7DVEAT3GiqZ1aFJHcYGZUXiOlZIQOOykkmnzOlQeI4d
12
+ gQSlHSTC5LT9mpHY9NctkGCYJZtevAI6N0ZXcPNnATNnvLTarmxeH9yflQKJj2nF
13
+ HTwqfimJAoGBAPmLRMB55SFK+PO8zw5wIqsVxdAZg+tFWEFAo/T25elz18GMZD+v
14
+ FariMVh61b6TCN/Tf2baCu4n/RxJHk4YEF2q09zr4KtQpV1rxmtB25RrEsdQCQEp
15
+ XKHHBF8W0e4ufn6eD2WcIYHDmON03YUSuD2tA5ns7jKyZm5SQ77ksaIbAoGBAOm8
16
+ ouvbrxVhXMdOxhZ8hC9W9QzD4tzJo9o4d3l4JS2eIHHej9r7QZw2Rjr2wBCBtMbs
17
+ Kp5MPKoNr4OnhLuYGURaJYURoeNCTTuUzvoFQ4AvQv3zyZWqezU1fBDJtSroavkR
18
+ Gr8dzTgShGlPJzedYzwQlBc3Nuhdrxx3RAN374D/AoGAce0DFlyQHwL7ZUttvEm1
19
+ iiYGiVscvuyJvkCkmdGeZVZdyh8uJWTpn3pkzOBHdRnrk0QbhflFxDS9eYxoKX8S
20
+ +bBjyRhnGc9Xr67kh1MpzDiV+iiv87fOco1JkZ/5d6QCXAwNO3ZsVbHWuwE/oOFK
21
+ +91hJ4TjuoF4AiXMh/ognsECgYEAjeguDf5hjRyAhK0JzOsqIcesnWRsXtm5Nirk
22
+ NoZAJDMFxbx3IF89VUcKWpAmyZ7GD6OguFzW0/PdJJRXHMHaTUphzymGXQCK/Wp6
23
+ QwdhFPkctiwFrm1DwmlHerXL3VIgaDj/QRsp1io/4+Pfjn9qmTQDhRjLqEYAo8qx
24
+ K13sticCgYA8b//RGcPISHLRfyrHWY4y7fhaHgyBO+tIqLHQWXnMTQCFhf6FW0g+
25
+ z9d9isfie04PgY7471EJpkzSPg4QWAk8crWfPA5/wSVUAM+uGCHC0GAwnzPljNDY
26
+ T2U8xToB7Ev7DDAFDc4LMxR6ReYKytALQjX1gNfZecNhFP3FcjW9+g==
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1 @@
1
+ ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDj16KptsnIQJC/Lf/mM7thn6poePS4mPfl/T1qFBnuYd9QDplx/vn24kVOH5wFPhsJwoIDLkBQaaYtvSMtv6lTlzkWfqaWb5tiKmO5M2RpVtvAFEje8itA7tE795phGGAbcKs71iXt5OSYVTc/Wup8pxKdMZbgCVWsO4Q6p/S1dOxWBnRxJ1d+LzRsSTP7qgwCf4PJY7UuO8a92xbTmjRIwMzw3JX/sY/KnRrcDeDCJf9ZIwjF/tO7FIZz8kxNjNJS93NPxGIUBgn/SbcIOb4NFcASmYbpGqMauudOiRB6lxyUx/w1X3XuoqPrWES/hKLTjfMQxBsDOi0IFACCMvjl geoffmeakin@dtp478
@@ -0,0 +1,8 @@
1
+ ---
2
+ hierarchy:
3
+ - files:environments/%{environment}/files/*
4
+ - yaml:environments/%{environment}/%{id}/*.yaml
5
+ - yaml:environments/%{environment}/default.yaml
6
+ - yaml:environments/defaults.yaml
7
+ - eyaml:environments/%{environment}/%{id}/*.eyaml
8
+
@@ -0,0 +1,45 @@
1
+ require 'salt_hiera/salt_hiera'
2
+
3
+ module SaltHiera
4
+ class CLI
5
+
6
+ def self.help
7
+ puts "Usage: salthiera [ -c configfile ] key1=value1 key2=value2 key3=value3 ..."
8
+ puts " -c : specify a configfile to use"
9
+ exit 0
10
+ end
11
+
12
+ def self.parse
13
+
14
+ params = {}
15
+ config_file = "/etc/salthiera.yaml"
16
+
17
+ while arg = ARGV.shift do
18
+ case arg
19
+ when "--help"
20
+ self.help
21
+ when "-c"
22
+ config_file = ARGV.shift
23
+ else
24
+ key, value = arg.split("=", 2)
25
+ if value
26
+ params[key] = value
27
+ else
28
+ self.help
29
+ end
30
+ end
31
+ end
32
+
33
+ @@opts = { :config => config_file, :params => params }
34
+
35
+ end
36
+
37
+ def self.execute
38
+
39
+ salthiera = SaltHiera.new :config_file => @@opts[:config], :params => @@opts[:params]
40
+ puts salthiera.to_yaml
41
+
42
+ end
43
+
44
+ end
45
+ end
@@ -0,0 +1,15 @@
1
+ module SaltHiera
2
+ class Configuration
3
+
4
+ def self.set key, value
5
+ @@confighash ||= {}
6
+ @@confighash[key] = value
7
+ end
8
+
9
+ def self.get key
10
+ @@confighash ||= {}
11
+ @@confighash[key]
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,56 @@
1
+ # Simple logger - not designed to be particularly good, just basic
2
+
3
+ module SaltHiera
4
+ class Logger
5
+ @@loglevels = { :critical => 1,
6
+ :error => 2,
7
+ :warn => 3,
8
+ :info => 4,
9
+ :debug => 5,
10
+ :trace => 6 }
11
+
12
+ def self.logfile filename
13
+ @@logfile ||= filename
14
+ @@loglevel ||= :info
15
+ @@log ||= File.open(filename, "a") unless filename.nil?
16
+ end
17
+
18
+ def self.loglevel level
19
+ @@loglevel = level if @@loglevels[level]
20
+ end
21
+
22
+ def self.critical msg
23
+ self.raw :critical, msg
24
+ raise msg
25
+ end
26
+
27
+ def self.error msg
28
+ self.raw :error, msg
29
+ end
30
+
31
+ def self.warn msg
32
+ self.raw :warn, msg
33
+ end
34
+
35
+ def self.info msg
36
+ self.raw :info, msg
37
+ end
38
+
39
+ def self.debug msg
40
+ self.raw :debug, msg
41
+ end
42
+
43
+ def self.trace msg
44
+ self.raw :trace, msg
45
+ end
46
+
47
+ def self.raw level, msg
48
+ self.logfile "/tmp/salthiera.log"
49
+ # if @@loglevels[level] && @@loglevels[level] > @@loglevels[@@loglevel] then
50
+ @@log.write "[#{level.to_s}]: #{msg}\n"
51
+ @@log.flush
52
+ # end
53
+ end
54
+
55
+ end
56
+ end
@@ -0,0 +1,64 @@
1
+ require 'openssl'
2
+ require 'base64'
3
+ require 'salt_hiera/configuration'
4
+
5
+ module SaltHiera
6
+ module Plugins
7
+ class Eyaml
8
+
9
+ def self.process_file file
10
+
11
+ contents = File.read file
12
+ dict = YAML.load contents
13
+ dict ||= {}
14
+ dict = self.recurse dict
15
+ dict
16
+
17
+ end
18
+
19
+ def self.recurse obj
20
+ if obj.is_a? Array
21
+ obj.each.with_index do |element, index|
22
+ obj[index] = self.recurse element
23
+ end
24
+ elsif obj.is_a? Hash
25
+ obj.each do |k, v|
26
+ obj[k] = self.recurse v
27
+ end
28
+ elsif obj.is_a? String
29
+ obj = obj.gsub(/ENC\[PKCS7,(.*?)\]/) {|x| puts "*******" + $1
30
+ self.decrypt($1) }
31
+ else
32
+ obj
33
+ end
34
+ end
35
+
36
+ def self.decrypt cipherbinary
37
+
38
+ public_key = Configuration.get "eyaml_public_key"
39
+ private_key = Configuration.get "eyaml_private_key"
40
+
41
+ raise StandardError, "pkcs7_public_key is not defined" unless public_key
42
+ raise StandardError, "pkcs7_private_key is not defined" unless private_key
43
+
44
+ private_key_pem = File.read private_key
45
+
46
+ private_key_rsa = OpenSSL::PKey::RSA.new( private_key_pem )
47
+
48
+ public_key_pem = File.read public_key
49
+
50
+ public_key_x509 = OpenSSL::X509::Certificate.new( public_key_pem )
51
+
52
+ ciphertext = Base64.decode64(cipherbinary)
53
+ pkcs7 = OpenSSL::PKCS7.new( ciphertext )
54
+
55
+
56
+
57
+
58
+ pkcs7.decrypt(private_key_rsa, public_key_x509)
59
+
60
+ end
61
+
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,15 @@
1
+ module SaltHiera
2
+ module Plugins
3
+ class Files
4
+
5
+ def self.process_file file
6
+
7
+ key = file.split("/").last
8
+ value = File.read file
9
+ { key => value }
10
+
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ module SaltHiera
2
+ module Plugins
3
+ class NoPlugin
4
+
5
+ def self.process_file file
6
+
7
+ Logger.debug "(missing plugin) NoPlugin called on #{file}"
8
+ {}
9
+
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ module SaltHiera
2
+ module Plugins
3
+ class Yaml
4
+
5
+ def self.process_file file
6
+
7
+ contents = File.read file
8
+ dict = YAML.load contents
9
+ dict || {}
10
+
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,86 @@
1
+ require 'yaml'
2
+ require 'salt_hiera/logger'
3
+ require 'salt_hiera/configuration'
4
+ require 'salt_hiera/plugins/no_plugin'
5
+
6
+ module SaltHiera
7
+ class SaltHiera
8
+
9
+ VERSION="0.1"
10
+
11
+ def initialize attributes
12
+ raise "Config error (#{params})" unless attributes[:config_file]
13
+ raise "Config file (#{attributes[:config_file]}) doesn't exist" unless File.file? attributes[:config_file]
14
+
15
+ file_contents = File.read(attributes[:config_file])
16
+ begin
17
+ @config = YAML::load(file_contents)
18
+ rescue
19
+ raise "Problem reading from config file #{attributes[:config_file]} (invalid YAML/permissions?)"
20
+ end
21
+
22
+ @config.each do |k, v|
23
+ Configuration.set k, v
24
+ end
25
+
26
+ Logger.logfile(@config[:logfile])
27
+ Logger.loglevel(@config[:loglevel])
28
+ @params = attributes[:params]
29
+
30
+ end
31
+
32
+ def find_plugin plugin_name
33
+ begin
34
+ require "salt_hiera/plugins/#{plugin_name.downcase}"
35
+ rescue
36
+ Logger.critical "No plugin named #{plugin_name} exists"
37
+ return Module.const_get("SaltHiera").const_get("Plugins").const_get("NoPlugin")
38
+ end
39
+ plugin_class = plugin_name.downcase.split("_").collect {|word| word.capitalize }.join("_")
40
+ plugin = Module.const_get("SaltHiera").const_get("Plugins").const_get(plugin_class)
41
+ raise "Could not find plugin #{plugin_name}" if plugin.nil?
42
+ plugin
43
+ end
44
+
45
+ def to_yaml
46
+
47
+ Logger.debug @config
48
+
49
+ if @config["basedir"]
50
+ Logger.debug "Setting basedir to \"#{@config['basedir']}\""
51
+ Dir.chdir @config["basedir"]
52
+ end
53
+
54
+ results = {}
55
+
56
+ @config["hierarchy"].reverse.each do |hierarchy|
57
+ Logger.debug "Analysing hierarchy element: #{hierarchy}"
58
+ hierarchy_type, hierarchy_glob = hierarchy.split(':', 2)
59
+ Logger.debug " type: #{hierarchy_type}"
60
+ Logger.debug " glob: #{hierarchy_glob}"
61
+ hierarchy_glob.gsub!(/\%\{(.*?)\}/) {|exp| @params[exp[2..-2]] || "!NOT_DEFINED!" } # Detokenize
62
+ Logger.debug " reglob: #{hierarchy_glob}"
63
+ next if hierarchy_glob.include? "!NOT_DEFINED!"
64
+ files = Dir.glob(hierarchy_glob).collect {|x| x if File.file?(x) }.compact
65
+ files.each do |file|
66
+ Logger.debug " file: #{file} (#{hierarchy_type})"
67
+ plugin = find_plugin hierarchy_type
68
+ dict = plugin.process_file file
69
+ debug_dict "", dict
70
+ results.merge! dict
71
+ end
72
+ end if @config["hierarchy"]
73
+ results.to_yaml
74
+ end
75
+
76
+ def debug_dict prefix, dict
77
+ dict.each do |k, v|
78
+ Logger.debug " -------> Found #{prefix}#{k}"
79
+ if v.class == Hash
80
+ debug_dict "#{prefix}#{k}.", v
81
+ end
82
+ end
83
+ end
84
+
85
+ end
86
+ end
data/salthiera.gemspec ADDED
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'salt_hiera/salt_hiera'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "salthiera"
8
+ gem.version = SaltHiera::SaltHiera::VERSION
9
+ gem.description = "Hiera like tool for use as an external pillar with SaltStack"
10
+ gem.summary = "Hiera like tool for use as an external pillar with SaltStack"
11
+ gem.author = "Geoff Meakin"
12
+ gem.license = "MIT"
13
+
14
+ gem.homepage = "http://github.com/gtmtechltd/salthiera"
15
+ gem.files = `git ls-files`.split($/).reject { |file| file =~ /^features.*$/ }
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_dependency('trollop', '>=2.0')
21
+ gem.add_dependency('highline', '>=1.6.19')
22
+ end
data/tools/regem.sh ADDED
@@ -0,0 +1,8 @@
1
+ #!/bin/bash
2
+
3
+ gem uninstall salthiera --executables
4
+ RAKE_OUT=`rake build`
5
+ echo ${RAKE_OUT}
6
+ VERSION=`echo ${RAKE_OUT} | awk '{print $2}'`
7
+ echo Installing version: ${VERSION} ...
8
+ gem install pkg/salthiera-${VERSION}.gem
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: salthiera
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.1"
5
+ platform: ruby
6
+ authors:
7
+ - Geoff Meakin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2014-01-28 00:00:00 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: trollop
16
+ version_requirements: &id001 !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: "2.0"
21
+ prerelease: false
22
+ requirement: *id001
23
+ type: :runtime
24
+ - !ruby/object:Gem::Dependency
25
+ name: highline
26
+ version_requirements: &id002 !ruby/object:Gem::Requirement
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ version: 1.6.19
31
+ prerelease: false
32
+ requirement: *id002
33
+ type: :runtime
34
+ description: Hiera like tool for use as an external pillar with SaltStack
35
+ email:
36
+ executables:
37
+ - salthiera
38
+ extensions: []
39
+
40
+ extra_rdoc_files: []
41
+
42
+ files:
43
+ - .gitignore
44
+ - .travis.yml
45
+ - Gemfile
46
+ - Gemfile.lock
47
+ - LICENSE.txt
48
+ - README.md
49
+ - Rakefile
50
+ - bin/salthiera
51
+ - environments/defaults.yaml
52
+ - environments/dev/files/myuser.id_rsa
53
+ - environments/dev/files/myuser.id_rsa.pub
54
+ - environments/salthiera.yaml
55
+ - lib/salt_hiera/CLI.rb
56
+ - lib/salt_hiera/configuration.rb
57
+ - lib/salt_hiera/logger.rb
58
+ - lib/salt_hiera/plugins/eyaml.rb
59
+ - lib/salt_hiera/plugins/files.rb
60
+ - lib/salt_hiera/plugins/no_plugin.rb
61
+ - lib/salt_hiera/plugins/yaml.rb
62
+ - lib/salt_hiera/salt_hiera.rb
63
+ - salthiera.gemspec
64
+ - tools/regem.sh
65
+ homepage: http://github.com/gtmtechltd/salthiera
66
+ licenses:
67
+ - MIT
68
+ metadata: {}
69
+
70
+ post_install_message:
71
+ rdoc_options: []
72
+
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - &id003
78
+ - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: "0"
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - *id003
84
+ requirements: []
85
+
86
+ rubyforge_project:
87
+ rubygems_version: 2.0.14
88
+ signing_key:
89
+ specification_version: 4
90
+ summary: Hiera like tool for use as an external pillar with SaltStack
91
+ test_files: []
92
+