From adf104e16e7803fce8feb2bc1b28bfc61b41db9d Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Thu, 1 Dec 2016 17:31:24 +0100 Subject: [PATCH 01/45] initial puppetdb support --- lib/jerakia/scope/puppetdb.rb | 38 +++++++++++++++++++ .../lib/jerakia/data/host/agent1/test.yaml | 3 ++ 2 files changed, 41 insertions(+) create mode 100644 lib/jerakia/scope/puppetdb.rb create mode 100644 test/fixtures/var/lib/jerakia/data/host/agent1/test.yaml diff --git a/lib/jerakia/scope/puppetdb.rb b/lib/jerakia/scope/puppetdb.rb new file mode 100644 index 0000000..22fbcdf --- /dev/null +++ b/lib/jerakia/scope/puppetdb.rb @@ -0,0 +1,38 @@ +require 'lookup_http' +class Jerakia::Scope + module Puppetdb + def create + yaml_file = request.scope_options['file'] || './jerakia_scope.yaml' + puppetdb_host = request.scope_options['puppetdb_host'] || 'localhost' + puppetdb_port = request.scope_options['puppetdb_port'] || 8080 + puppetdb_api = request.scope_options['puppetdb_api'] || 4 + node = request.scope_options['node'] + + raise Jerakia::Error, "Must pass the option node to the puppetdb scope handler" unless node + + connection_opts = { + :host => puppetdb_host, + :port => puppetdb_port, + :output => 'json', + :ignore_404 => true + }.merge(request.scope_options['puppetdb_http_opts'] || {}) + + puppetdb_con = LookupHttp.new(connection_opts) + + case puppetdb_api + when 4 + path = "/pdb/query/v4/nodes/#{node}/facts" + else + raise Jerakia::Error, "Unsupported PuppetDB API version, #{puppetdb_api}" + end + + Jerakia.log.debug("Sending HTTP query to PuppetDB #{puppetdb_host}:#{puppetdb_port} at path #{path}") + + response = puppetdb_con.get_parsed(path) + + raise Jerakia::Error, "PuppetDB returned no data for node #{node}" unless response.is_a?(Array) + + response.each { |r| value[r['name'].to_sym] = r['value'] } + end + end +end diff --git a/test/fixtures/var/lib/jerakia/data/host/agent1/test.yaml b/test/fixtures/var/lib/jerakia/data/host/agent1/test.yaml new file mode 100644 index 0000000..c43f937 --- /dev/null +++ b/test/fixtures/var/lib/jerakia/data/host/agent1/test.yaml @@ -0,0 +1,3 @@ +cities: + tokyo: japan + melbourne: australia From dfad8be0d4dd0e95b9ad79fcd7da20946bc59075 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Tue, 6 Dec 2016 17:56:42 +0100 Subject: [PATCH 02/45] rest server API, tokens and other fixes for 1.2 --- Gemfile | 19 ++-- jerakia.gemspec | 7 +- lib/jerakia/cli.rb | 120 ++--------------------- lib/jerakia/cli/lookup.rb | 126 +++++++++++++++++++++++++ lib/jerakia/cli/server.rb | 50 ++++++++++ lib/jerakia/cli/token.rb | 64 +++++++++++++ lib/jerakia/config.rb | 2 + lib/jerakia/dsl/policy.rb | 2 +- lib/jerakia/log.rb | 4 + lib/jerakia/request.rb | 2 + lib/jerakia/server.rb | 38 ++++++++ lib/jerakia/server/auth.rb | 72 ++++++++++++++ lib/jerakia/server/auth/token.rb | 30 ++++++ lib/jerakia/server/rest.rb | 58 ++++++++++++ lib/jerakia/server/token.rb | 9 ++ lib/jerakia/version.rb | 2 +- test/fixtures/etc/jerakia/jerakia.yaml | 9 +- 17 files changed, 490 insertions(+), 124 deletions(-) create mode 100644 lib/jerakia/cli/lookup.rb create mode 100644 lib/jerakia/cli/server.rb create mode 100644 lib/jerakia/cli/token.rb create mode 100644 lib/jerakia/server.rb create mode 100644 lib/jerakia/server/auth.rb create mode 100644 lib/jerakia/server/auth/token.rb create mode 100644 lib/jerakia/server/rest.rb create mode 100644 lib/jerakia/server/token.rb diff --git a/Gemfile b/Gemfile index c2a9f78..2b7c56d 100644 --- a/Gemfile +++ b/Gemfile @@ -1,19 +1,26 @@ source 'https://rubygems.org' -gem 'rake' gem 'faster_require' gem 'psych' -gem 'rspec-core' -gem 'rspec' -gem 'mocha' gem 'lookup_http' gem 'thor' -gem "puppet", ENV['PUPPET_GEM_VERSION'] || '~> 3.8.0' +gem "puppet", ENV['PUPPET_GEM_VERSION'] || '~> 4.8.0' gem "deep_merge" +gem "sinatra" +gem "dm-sqlite-adapter" + +group(:development, :test) do + gem 'rake' + gem 'rspec-core' + gem 'rspec' + gem 'mocha' +end # JSON must be 1.x on Ruby 1.9 if RUBY_VERSION < '2.0' gem 'json', '~> 1.8' - gem 'json_pure', '~> 1.8' + #gem 'json_pure', '~> 1.8' + gem 'data_mapper', '~> 1.2' else gem 'json' + gem 'data_mapper' end diff --git a/jerakia.gemspec b/jerakia.gemspec index 76a40d5..2c0b2d2 100644 --- a/jerakia.gemspec +++ b/jerakia.gemspec @@ -15,5 +15,10 @@ Gem::Specification.new do |s| s.license = 'Apache 2.0' s.add_dependency 'thor', '~> 0.19' s.add_dependency 'deep_merge', '~> 1.0' - s.add_dependency('lookup_http', '>=1.0.0') + s.add_dependency 'lookup_http', '>=1.0.0' + s.add_dependency 'sinatra', '< 2.0' + s.add_dependency 'data_mapper', '~> 1.2' + s.add_dependency 'dm-sqlite-adapter', '~> 1.2' + s.add_dependency 'thin', '~> 1.6' + end diff --git a/lib/jerakia/cli.rb b/lib/jerakia/cli.rb index 4927973..fc7b8d9 100644 --- a/lib/jerakia/cli.rb +++ b/lib/jerakia/cli.rb @@ -2,122 +2,16 @@ require 'jerakia' require 'json' require 'yaml' +require 'jerakia/cli/server' +require 'jerakia/cli/token' +require 'jerakia/cli/lookup' + class Jerakia class CLI < Thor - desc 'lookup [KEY]', 'Lookup [KEY] with Jerakia' - option :config, - aliases: :c, - type: :string, - desc: 'Configuration file' - option :policy, - aliases: :p, - type: :string, - default: 'default', - desc: 'Lookup policy' - option :namespace, - aliases: :n, - type: :string, - default: '', - desc: 'Lookup namespace' - option :type, - aliases: :t, - type: :string, - default: 'first', - desc: 'Lookup type' - option :scope, - aliases: :s, - type: :string, - desc: 'Scope handler', - default: 'metadata' - option :scope_options, - type: :hash, - desc: 'Key/value pairs to be passed to the scope handler' - option :merge_type, - aliases: :m, - type: :string, - default: 'array', - desc: 'Merge type' - option :log_level, - aliases: :l, - type: :string, - desc: 'Log level' - option :verbose, - aliases: :v, - type: :boolean, - desc: 'Print verbose information' - option :debug, - aliases: :D, - type: :boolean, - desc: 'Debug information to console, implies --log-level debug' - option :trace, - type: :boolean, - desc: 'Output stacktrace to stdout' - option :metadata, - aliases: :d, - type: :hash, - desc: 'Key/value pairs to be used as metadata for the lookup' - option :schema, - aliases: :S, - type: :boolean, - desc: 'Enable/disable schema lookup, default true', - default: true - option :output, - aliases: :o, - type: :string, - default: 'json', - desc: 'Output format, yaml or json' - - def lookup(key) - # Thor by default now returns a frozen options hash so we - # need to dup this here to prevent problems later with - # modifying the request object - # - options_copy = options.dup - - case true - when options[:verbose] - loglevel = 'verbose' - logfile = STDOUT - when options[:debug] - loglevel = 'debug' - logfile = STDOUT - else - logfile = nil - loglevel = options[:log_level] - end - - begin - - jac = Jerakia.new(:config => options[:config], - :logfile => logfile, - :loglevel => loglevel, - :trace => options[:trace]) - req = Jerakia::Request.new( - :key => key.dup, - :namespace => options_copy[:namespace].split(/::/), - :policy => options_copy[:policy].to_sym, - :lookup_type => options_copy[:type].to_sym, - :merge => options_copy[:merge_type].to_sym, - :metadata => options_copy[:metadata] || {}, - :scope => options_copy[:scope].to_sym, - :scope_options => options_copy[:scope_options], - :use_schema => options_copy[:schema] - ) - - answer = jac.lookup(req) - case options[:output] - when 'json' - puts answer.payload.to_json - when 'yaml' - puts answer.payload.to_yaml - end - rescue Jerakia::Error => e - STDERR.puts "Error(#{e.class}): #{e.message}" - STDERR.puts e.backtrace.join("\n") if options[:trace] - exit 1 - end - end + include Jerakia::CLI::Server + include Jerakia::CLI::Lookup + include Jerakia::CLI::Token desc 'version', 'Version information' def version diff --git a/lib/jerakia/cli/lookup.rb b/lib/jerakia/cli/lookup.rb new file mode 100644 index 0000000..b41ed54 --- /dev/null +++ b/lib/jerakia/cli/lookup.rb @@ -0,0 +1,126 @@ +class Jerakia + class CLI < Thor + module Lookup + def self.included(thor) + thor.class_eval do + desc 'lookup [KEY]', 'Lookup [KEY] with Jerakia' + option :config, + aliases: :c, + type: :string, + desc: 'Configuration file' + option :policy, + aliases: :p, + type: :string, + default: 'default', + desc: 'Lookup policy' + option :namespace, + aliases: :n, + type: :string, + default: '', + desc: 'Lookup namespace' + option :type, + aliases: :t, + type: :string, + default: 'first', + desc: 'Lookup type' + option :scope, + aliases: :s, + type: :string, + desc: 'Scope handler', + default: 'metadata' + option :scope_options, + type: :hash, + desc: 'Key/value pairs to be passed to the scope handler' + option :merge_type, + aliases: :m, + type: :string, + default: 'array', + desc: 'Merge type' + option :log_level, + aliases: :l, + type: :string, + desc: 'Log level' + option :verbose, + aliases: :v, + type: :boolean, + desc: 'Print verbose information' + option :debug, + aliases: :D, + type: :boolean, + desc: 'Debug information to console, implies --log-level debug' + option :trace, + type: :boolean, + desc: 'Output stacktrace to stdout' + option :metadata, + aliases: :d, + type: :hash, + desc: 'Key/value pairs to be used as metadata for the lookup' + option :schema, + aliases: :S, + type: :boolean, + desc: 'Enable/disable schema lookup, default true', + default: true + option :output, + aliases: :o, + type: :string, + efault: 'json', + desc: 'Output format, yaml or json' + + def lookup(key) + # Thor by default now returns a frozen options hash so we + # need to dup this here to prevent problems later with + # modifying the request object + # + options_copy = options.dup + + case true + when options[:verbose] + loglevel = 'verbose' + logfile = STDOUT + when options[:debug] + loglevel = 'debug' + logfile = STDOUT + else + logfile = nil + loglevel = options[:log_level] + end + + begin + + puts options_copy + puts options_copy[:policy] + + jac = Jerakia.new(:config => options[:config], + :logfile => logfile, + :loglevel => loglevel, + :trace => options[:trace]) + req = Jerakia::Request.new( + :key => key.dup, + :namespace => options_copy[:namespace].split(/::/), + :policy => options_copy[:policy].to_sym, + :lookup_type => options_copy[:type].to_sym, + :merge => options_copy[:merge_type].to_sym, + :metadata => options_copy[:metadata] || {}, + :scope => options_copy[:scope].to_sym, + :scope_options => options_copy[:scope_options], + :use_schema => options_copy[:schema] + ) + + answer = jac.lookup(req) + case options[:output] + when 'json' + puts answer.payload.to_json + when 'yaml' + puts answer.payload.to_yaml + end + rescue Jerakia::Error => e + STDERR.puts "Error(#{e.class}): #{e.message}" + STDERR.puts e.backtrace.join("\n") if options[:trace] + exit 1 + end + end + end + end + end + end +end diff --git a/lib/jerakia/cli/server.rb b/lib/jerakia/cli/server.rb new file mode 100644 index 0000000..1dfebf5 --- /dev/null +++ b/lib/jerakia/cli/server.rb @@ -0,0 +1,50 @@ +class Jerakia + class CLI < Thor + module Server + def self.included(thor) + thor.class_eval do + desc 'server', 'Start the Jerakia REST server' + option :config, + aliases: :c, + type: :string, + desc: 'Configuration file' + option :log_level, + aliases: :l, + type: :string, + desc: 'Log level' + option :verbose, + aliases: :v, + type: :boolean, + desc: 'Print verbose information' + option :debug, + aliases: :D, + type: :boolean, + desc: 'Debug information to console, implies --log-level debug' + def server + case true + when options[:verbose] + loglevel = 'verbose' + logfile = STDOUT + when options[:debug] + loglevel = 'debug' + logfile = STDOUT + else + logfile = nil + loglevel = options[:log_level] + end + + jerakia_opts = { + :config => options[:config], + :logfile => logfile, + :loglevel => loglevel, + :trace => options[:trace] + } + + require 'jerakia/server' + Jerakia::Server.start(jerakia_opts) + end + end + end + end + end +end diff --git a/lib/jerakia/cli/token.rb b/lib/jerakia/cli/token.rb new file mode 100644 index 0000000..7d4c78a --- /dev/null +++ b/lib/jerakia/cli/token.rb @@ -0,0 +1,64 @@ +class Jerakia + class CLI < Thor + module Token + def self.included(thor) + thor.class_eval do + desc 'token [SUBCOMMAND] ', 'Create, view and manage token access' + option :quiet, + aliases: :q, + type: :boolean, + desc: 'Supress explanatory output' + + def token(subcommand, api_id=:all) + Jerakia.new + require 'jerakia/server/auth' + + unless subcommand == 'list' + if api_id == :all + help :token + STDERR.puts "Error: No API ID provided" + exit 1 + end + end + + if ['enable', 'disable', 'regenerate', 'delete'].include?(subcommand) + unless Jerakia::Server::Auth.exists?(api_id) + STDERR.puts "No such API ID #{api_id}" + exit 1 + end + end + + case subcommand + when 'create' + token = Jerakia::Server::Auth.create(api_id) + unless options[:quiet] + puts "Copy the following token to the application, it must be sent in the Authorization header. This token cannot be retrieved later, if you have lost the token for an application you can create a new one with 'jerakia token regenerate '\n\n" + end + puts token + + when 'list' + entries = Jerakia::Server::Auth.get_tokens + printf("%-20s %-28s %s\n\n","API Identifier","Last Seen", "Status") + entries.each do |entry| + status = entry.active ? 'active' : 'disabled' + printf("%-20s %-28s %s\n", entry.api_id, entry.last_seen.strftime('%F %X'), status) + end + + when 'disable' + Jerakia::Server::Auth.disable(api_id) + when 'enable' + Jerakia::Server::Auth.enable(api_id) + when 'delete' + Jerakia::Server::Auth.destroy(api_id) + when 'regenerate' + token('delete', api_id) + token('create', api_id) + else + STDERR.puts "Unknown subcommand #{subcommand}. Valid commands are list, create, delete, regenerate, disable, enable" + end + end + end + end + end + end +end diff --git a/lib/jerakia/config.rb b/lib/jerakia/config.rb index 8d0d5e9..252a7e0 100644 --- a/lib/jerakia/config.rb +++ b/lib/jerakia/config.rb @@ -22,6 +22,8 @@ def defaults 'policydir' => '/etc/jerakia/policy.d', 'logfile' => '/var/log/jerakia.log', 'loglevel' => 'info', + 'vardir' => '/var/lib/jerakia', + 'piddir' => '/var/run', 'enable_schema' => true } end diff --git a/lib/jerakia/dsl/policy.rb b/lib/jerakia/dsl/policy.rb index d8cdcd9..4467d7b 100644 --- a/lib/jerakia/dsl/policy.rb +++ b/lib/jerakia/dsl/policy.rb @@ -26,7 +26,7 @@ def evaluate_file(filename) policydata = Jerakia::Cache::File.retrieve(filename) unless policydata - raise Jerakia::PolicyError, "Could not load policy file, #{e.message}" + raise Jerakia::PolicyError, "Could not load policy file, #{filename}" end instance_eval policydata diff --git a/lib/jerakia/log.rb b/lib/jerakia/log.rb index 31eb23b..aeccab9 100644 --- a/lib/jerakia/log.rb +++ b/lib/jerakia/log.rb @@ -18,6 +18,10 @@ def initialize(level = :info, file = '/var/log/jerakia.log') end end + def logger + @@logger + end + def verbose(msg) @@logger.info msg if @@level == :verbose end diff --git a/lib/jerakia/request.rb b/lib/jerakia/request.rb index d1e3fb9..21b1eb8 100644 --- a/lib/jerakia/request.rb +++ b/lib/jerakia/request.rb @@ -1,3 +1,5 @@ +require 'jerakia' +require 'jerakia/log' class Jerakia class Request attr_accessor :key diff --git a/lib/jerakia/server.rb b/lib/jerakia/server.rb new file mode 100644 index 0000000..8388c66 --- /dev/null +++ b/lib/jerakia/server.rb @@ -0,0 +1,38 @@ +require 'sinatra' +require 'jerakia' +require 'thin' +class Jerakia + class Server + + @jerakia = nil + @config = {} + + def jerakia + self.class.jerakia + end + + class << self + + def default_config + { + 'bind' => '127.0.0.1', + 'port' => '9843', + } + end + + def jerakia + @jerakia + end + + def start(opts) + @jerakia = Jerakia.new(opts) + require 'jerakia/server/rest' + @config = default_config.merge(Jerakia.config[:server] || {}) + Thin::Logging.logger=Jerakia.log.logger + Jerakia::Server::Rest.set :bind, @config['bind'] + Jerakia::Server::Rest.set :port, @config['port'] + Jerakia::Server::Rest.run! + end + end + end +end diff --git a/lib/jerakia/server/auth.rb b/lib/jerakia/server/auth.rb new file mode 100644 index 0000000..dd526f3 --- /dev/null +++ b/lib/jerakia/server/auth.rb @@ -0,0 +1,72 @@ +require 'jerakia/server/auth/token' +require 'securerandom' + +class Jerakia + class Server + class Auth + + class << self + + def generate_token + SecureRandom.hex(40) + end + + + def get_entry(api_id) + Jerakia::Server::Auth::Token.get(api_id) + end + + def update(api_id, fields) + entry = get_entry(api_id) + entry.update(fields) + entry.save + end + + def seen!(api_id) + update(api_id, { :last_seen => DateTime.now }) + end + + def disable(api_id) + update(api_id, { :active => false }) + end + + def enable(api_id) + update(api_id, { :active => true }) + end + + def destroy(api_id) + entry = get_entry(api_id) + entry.destroy + end + + def exists?(api_id) + get_entry(api_id) + end + + def create(api_id) + raise Jerakia::Error, "API ID #{api_id} already exists" if exists?(api_id) + token = generate_token + entry = Jerakia::Server::Auth::Token.new(:api_id => api_id, :token => token) + entry.save + api_id + ":" + token + end + + def get_tokens + Jerakia::Server::Auth::Token.find + end + + def authenticate(token_string) + api_id, token = token_string.split(/:/) + entry = get_entry(api_id) + return false if entry.nil? + if entry.token == token and entry.active + seen!(api_id) + true + else + false + end + end + end + end + end +end diff --git a/lib/jerakia/server/auth/token.rb b/lib/jerakia/server/auth/token.rb new file mode 100644 index 0000000..a03fa93 --- /dev/null +++ b/lib/jerakia/server/auth/token.rb @@ -0,0 +1,30 @@ +require 'data_mapper' +require 'dm-sqlite-adapter' +require 'bcrypt' +require 'jerakia' +require 'jerakia/config' +class Jerakia + class Server + class Auth + + Jerakia.log.debug("Authentication database sqlite://#{Jerakia.config[:vardir]}/tokens.db") + DataMapper.setup(:default, "sqlite://#{Jerakia.config[:vardir]}/tokens.db") + + class Token + + include DataMapper::Resource + include BCrypt + + property :api_id, String, :key => true + property :token, BCryptHash + property :active, Boolean, :default => true + property :last_seen, DateTime, :default => DateTime.now + end + + DataMapper.finalize + DataMapper.auto_upgrade! + end + end +end + + diff --git a/lib/jerakia/server/rest.rb b/lib/jerakia/server/rest.rb new file mode 100644 index 0000000..1b74ade --- /dev/null +++ b/lib/jerakia/server/rest.rb @@ -0,0 +1,58 @@ +require 'sinatra' +require 'jerakia' +require 'jerakia/server/auth' + +class Jerakia + class Server + class Rest < Sinatra::Base + + def self.jerakia + Jerakia::Server.jerakia + end + + def jerakia + self.class.jerakia + end + + def auth_denied + halt(401, { :status => 'failed', :message => 'unauthorized' }.to_json) + end + + def authenticate! + token = env['HTTP_X_AUTHENTICATION'] + auth_denied if token.nil? + unless Jerakia::Server::Auth.authenticate(token) + auth_denied + end + end + + before do + content_type 'application/json' + end + + get '/' do + auth_denied + end + + get '/v1/lookup/:key' do + authenticate! + request_opts = { + :key => params['key'], + :namespace => params['namespace'].split(/\//), + } + + request_opts[:policy] = params['policy'].to_sym if params['policy'] + begin + request = Jerakia::Request.new(request_opts) + answer = jerakia.lookup(request) + rescue Jerakia::Error => e + halt(501, { :status => 'failed', :message => e.message }.to_json) + end + { + :status => 'ok', + :payload => answer.payload + }.to_json + end + end + end +end diff --git a/lib/jerakia/server/token.rb b/lib/jerakia/server/token.rb new file mode 100644 index 0000000..8ffdcd2 --- /dev/null +++ b/lib/jerakia/server/token.rb @@ -0,0 +1,9 @@ +require 'data_mapper' +require 'dm-sqlite-adapter' +require 'bcrypt' + +class Jerakia + class Auth + class + + diff --git a/lib/jerakia/version.rb b/lib/jerakia/version.rb index 8f9a33f..2d7d732 100644 --- a/lib/jerakia/version.rb +++ b/lib/jerakia/version.rb @@ -3,5 +3,5 @@ class Jerakia # # This should be updated when a new gem is released and it is read from the gemspec file # - VERSION = '1.1.2'.freeze + VERSION = '1.2.0'.freeze end diff --git a/test/fixtures/etc/jerakia/jerakia.yaml b/test/fixtures/etc/jerakia/jerakia.yaml index c1a1212..8580095 100644 --- a/test/fixtures/etc/jerakia/jerakia.yaml +++ b/test/fixtures/etc/jerakia/jerakia.yaml @@ -1,8 +1,10 @@ --- policydir: test/fixtures/etc/jerakia/policy.d -logfile: /dev/null -loglevel: debug +logfile: /tmp/jerakia.log +loglevel: info plugindir: test/fixtures/etc/jerakia/lib +vardir: /tmp +piddir: test/fixtures/var/run schema: @@ -11,3 +13,6 @@ schema: plugins: hiera: foo: bar + +server: + port: 9999 From 3298e09df68f82cff559e2f664529c41c5973d2a Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Tue, 6 Dec 2016 18:03:49 +0100 Subject: [PATCH 03/45] revert changes to test jerakia.yaml --- test/fixtures/etc/jerakia/jerakia.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/fixtures/etc/jerakia/jerakia.yaml b/test/fixtures/etc/jerakia/jerakia.yaml index 8580095..0f0c198 100644 --- a/test/fixtures/etc/jerakia/jerakia.yaml +++ b/test/fixtures/etc/jerakia/jerakia.yaml @@ -1,7 +1,7 @@ --- policydir: test/fixtures/etc/jerakia/policy.d -logfile: /tmp/jerakia.log -loglevel: info +logfile: /dev/null +loglevel: debug plugindir: test/fixtures/etc/jerakia/lib vardir: /tmp piddir: test/fixtures/var/run From bad7144c64239dff767aa15b15d28379da20193c Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Tue, 6 Dec 2016 18:15:22 +0100 Subject: [PATCH 04/45] pin public_suffix for ruby < 2.0 --- Gemfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Gemfile b/Gemfile index 2b7c56d..788f783 100644 --- a/Gemfile +++ b/Gemfile @@ -20,7 +20,9 @@ if RUBY_VERSION < '2.0' gem 'json', '~> 1.8' #gem 'json_pure', '~> 1.8' gem 'data_mapper', '~> 1.2' + gem 'public_suffix', '1.4.6' else gem 'json' gem 'data_mapper' + gem 'publc_suffix' end From e81f4f51203c1abd0dd8a55c69508a97f3682fb9 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Tue, 6 Dec 2016 18:35:58 +0100 Subject: [PATCH 05/45] fixed typo in Gemfile --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 788f783..72fb136 100644 --- a/Gemfile +++ b/Gemfile @@ -24,5 +24,5 @@ if RUBY_VERSION < '2.0' else gem 'json' gem 'data_mapper' - gem 'publc_suffix' + gem 'public_suffix' end From 001f1a78e35c0aedb3bea7c8fd317421628efa3c Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Tue, 6 Dec 2016 18:55:50 +0100 Subject: [PATCH 06/45] [ci skip]: changed version to -alpha0 to allow for packaging testing --- lib/jerakia/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jerakia/version.rb b/lib/jerakia/version.rb index 2d7d732..c8ffbb4 100644 --- a/lib/jerakia/version.rb +++ b/lib/jerakia/version.rb @@ -3,5 +3,5 @@ class Jerakia # # This should be updated when a new gem is released and it is read from the gemspec file # - VERSION = '1.2.0'.freeze + VERSION = '1.2.0-alpha0'.freeze end From 2c438b7c2bd836fceeb06c2b221bdba67466734e Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Wed, 7 Dec 2016 18:12:19 +0100 Subject: [PATCH 07/45] added server scope, api endpoints and various bug fixes for 1.2 --- .gitignore | 4 ++ lib/jerakia/scope/server.rb | 66 ++++++++++++++++++++++++++ lib/jerakia/server/auth/token.rb | 7 ++- lib/jerakia/server/rest.rb | 35 ++++++++++++++ lib/jerakia/server/token.rb | 9 ---- test/fixtures/etc/jerakia/jerakia.yaml | 6 ++- 6 files changed, 115 insertions(+), 12 deletions(-) create mode 100644 .gitignore create mode 100644 lib/jerakia/scope/server.rb delete mode 100644 lib/jerakia/server/token.rb diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d748a86 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.swo +*.swp +test/fixtures/var/db/jerakia/* + diff --git a/lib/jerakia/scope/server.rb b/lib/jerakia/scope/server.rb new file mode 100644 index 0000000..840f912 --- /dev/null +++ b/lib/jerakia/scope/server.rb @@ -0,0 +1,66 @@ +require 'securerandom' +require 'data_mapper' +# The server scope handler can store and retrieve scope data server side +# +class Jerakia::Scope + module Server + class Database + DataMapper.setup(:scope, "sqlite://#{Jerakia.config[:databasedir]}/scope.db") + Jerakia.log.debug("Server scope handler connected to sqlite://#{Jerakia.config[:databasedir]}/scope.db") + + class Resource + include DataMapper::Resource + + + def self.default_repository_name + :scope + end + + property :id, Serial, :key => true + property :identifier, String, :index => true + property :realm, String, :index => true + property :uuid, String + property :scope, Object + end + + DataMapper.finalize + DataMapper.auto_upgrade! + end + + def create + realm = request.scope_options['realm'] + identifier = request.scope_options['identifier'] + + raise Jerakia::Error, "Must supply realm and identifier for server scope handler" unless realm and identifier + resource = Jerakia::Scope::Server.find(realm, identifier) + raise Jerakia::Error, "No scope data found for realm:#{realm} identifier:#{identifier}" if resource.nil? + scope = resource.scope + raise Jerakia::Error, "Scope did not return a hash for realm:#{realm} identifier:#{identifier}" unless scope.is_a?(Hash) + @value = scope + end + + class << self + def find(realm, identifier) + Database::Resource.first(:identifier => identifier, :realm => realm) + end + + + def store(realm, identifier, scope) + uuid = SecureRandom.uuid + entry = find(realm, identifier) + if entry.nil? + Database::Resource.create(:identifier => identifier, :realm => realm, :scope => scope, :uuid => uuid) + else + entry.update({:scope => scope, :uuid => uuid}) + entry.save + end + uuid + end + end + end +end + + + + + diff --git a/lib/jerakia/server/auth/token.rb b/lib/jerakia/server/auth/token.rb index a03fa93..92b1964 100644 --- a/lib/jerakia/server/auth/token.rb +++ b/lib/jerakia/server/auth/token.rb @@ -8,13 +8,18 @@ class Server class Auth Jerakia.log.debug("Authentication database sqlite://#{Jerakia.config[:vardir]}/tokens.db") - DataMapper.setup(:default, "sqlite://#{Jerakia.config[:vardir]}/tokens.db") + + DataMapper.setup(:tokens, "sqlite://#{Jerakia.config[:databasedir]}/tokens.db") class Token include DataMapper::Resource include BCrypt + def self.default_repository_name + :tokens + end + property :api_id, String, :key => true property :token, BCryptHash property :active, Boolean, :default => true diff --git a/lib/jerakia/server/rest.rb b/lib/jerakia/server/rest.rb index 1b74ade..b3a3f1c 100644 --- a/lib/jerakia/server/rest.rb +++ b/lib/jerakia/server/rest.rb @@ -1,6 +1,8 @@ require 'sinatra' require 'jerakia' require 'jerakia/server/auth' +require 'json' +require 'jerakia/scope/server' class Jerakia class Server @@ -53,6 +55,39 @@ def authenticate! :payload => answer.payload }.to_json end + + get '/v1/scope/:realm/:identifier' do + resource = Jerakia::Scope::Server.find(params['realm'], params['identifier']) + if resource.nil? + halt(404, { :status => 'failed', :message => "No scope data found" }.to_json) + else + { + :status => 'ok', + :payload => resource.scope + }.to_json + end + end + + put '/v1/scope/:realm/:identifer' do + scope = JSON.parse(request.body.read) + uuid = Jerakia::Scope::Server.put(params['realm'], params['identifier'], scope) + { + :status => 'ok', + :uuid => uuid + }.to_json + end + + get '/v1/scope/:realm/:identifier/uuid' do + resource = Jerakia::Scope::Server.find(params['realm'], params['identifier']) + if resource.nil? + halt(404, { :status => 'failed', :message => "No scope data found" }.to_json) + else + { + :status => 'ok', + :uuid => resource.uuid + }.to_json + end + end end end end diff --git a/lib/jerakia/server/token.rb b/lib/jerakia/server/token.rb deleted file mode 100644 index 8ffdcd2..0000000 --- a/lib/jerakia/server/token.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'data_mapper' -require 'dm-sqlite-adapter' -require 'bcrypt' - -class Jerakia - class Auth - class - - diff --git a/test/fixtures/etc/jerakia/jerakia.yaml b/test/fixtures/etc/jerakia/jerakia.yaml index 0f0c198..6747620 100644 --- a/test/fixtures/etc/jerakia/jerakia.yaml +++ b/test/fixtures/etc/jerakia/jerakia.yaml @@ -3,8 +3,10 @@ policydir: test/fixtures/etc/jerakia/policy.d logfile: /dev/null loglevel: debug plugindir: test/fixtures/etc/jerakia/lib -vardir: /tmp -piddir: test/fixtures/var/run + +# Location of internal Jerakia databases used for scope storage, token management..etc +#databasedir: test/fixtures/var/db/jerakia +databasedir: /tmp schema: From 20ec7cb7395063ca41b199d923d8fda2405dbd94 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Thu, 8 Dec 2016 09:11:03 +0100 Subject: [PATCH 08/45] Gemfile.lock update for packaging --- Gemfile.lock | 74 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 71 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 7e23657..a45ddd5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,16 +1,76 @@ GEM remote: https://rubygems.org/ specs: + addressable (2.5.0) + public_suffix (~> 2.0, >= 2.0.2) + bcrypt (3.1.11) + bcrypt-ruby (3.1.5) + bcrypt (>= 3.1.3) + data_mapper (1.2.0) + dm-aggregates (~> 1.2.0) + dm-constraints (~> 1.2.0) + dm-core (~> 1.2.0) + dm-migrations (~> 1.2.0) + dm-serializer (~> 1.2.0) + dm-timestamps (~> 1.2.0) + dm-transactions (~> 1.2.0) + dm-types (~> 1.2.0) + dm-validations (~> 1.2.0) + data_objects (0.10.17) + addressable (~> 2.1) deep_merge (1.1.1) diff-lcs (1.2.5) + dm-aggregates (1.2.0) + dm-core (~> 1.2.0) + dm-constraints (1.2.0) + dm-core (~> 1.2.0) + dm-core (1.2.1) + addressable (~> 2.3) + dm-do-adapter (1.2.0) + data_objects (~> 0.10.6) + dm-core (~> 1.2.0) + dm-migrations (1.2.0) + dm-core (~> 1.2.0) + dm-serializer (1.2.2) + dm-core (~> 1.2.0) + fastercsv (~> 1.5) + json (~> 1.6) + json_pure (~> 1.6) + multi_json (~> 1.0) + dm-sqlite-adapter (1.2.0) + dm-do-adapter (~> 1.2.0) + do_sqlite3 (~> 0.10.6) + dm-timestamps (1.2.0) + dm-core (~> 1.2.0) + dm-transactions (1.2.0) + dm-core (~> 1.2.0) + dm-types (1.2.2) + bcrypt-ruby (~> 3.0) + dm-core (~> 1.2.0) + fastercsv (~> 1.5) + json (~> 1.6) + multi_json (~> 1.0) + stringex (~> 1.4) + uuidtools (~> 2.1) + dm-validations (1.2.0) + dm-core (~> 1.2.0) + do_sqlite3 (0.10.17) + data_objects (= 0.10.17) faster_require (0.9.4) + fastercsv (1.5.5) json (1.8.3) + json_pure (1.8.3) lookup_http (1.0.0) json (>= 1.1.1) metaclass (0.0.4) mocha (1.2.1) metaclass (~> 0.0.1) + multi_json (1.12.1) psych (2.2.1) + public_suffix (2.0.4) + rack (1.6.5) + rack-protection (1.5.3) + rack rake (12.0.0) rspec (3.5.0) rspec-core (~> 3.5.0) @@ -25,22 +85,30 @@ GEM diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.5.0) rspec-support (3.5.0) + sinatra (1.4.7) + rack (~> 1.5) + rack-protection (~> 1.4) + tilt (>= 1.3, < 3) + stringex (1.5.1) thor (0.19.4) + tilt (2.0.5) + uuidtools (2.1.5) PLATFORMS ruby DEPENDENCIES + data_mapper deep_merge + dm-sqlite-adapter faster_require json lookup_http mocha psych + public_suffix rake rspec rspec-core + sinatra thor - -BUNDLED WITH - 1.12.5 From 4ff0f9a349ed4b28c80cf3d5693f0c116da445b3 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Thu, 8 Dec 2016 09:13:04 +0100 Subject: [PATCH 09/45] fixed json --- Gemfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Gemfile b/Gemfile index 3ad0f4f..b9365a4 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,6 @@ gem 'psych' gem 'lookup_http' gem 'thor' gem "deep_merge" -gem 'json' gem "sinatra" gem "dm-sqlite-adapter" From c38685c13ad75c95ef136dc5bf573465aa596263 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Thu, 8 Dec 2016 09:40:17 +0100 Subject: [PATCH 10/45] added thin --- Gemfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Gemfile b/Gemfile index b9365a4..e0b6b90 100644 --- a/Gemfile +++ b/Gemfile @@ -4,6 +4,7 @@ gem 'psych' gem 'lookup_http' gem 'thor' gem "deep_merge" +gem "thin" gem "sinatra" gem "dm-sqlite-adapter" From 19dadfa6171a4c3b3d133bf7368aff0c12db8c49 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Thu, 8 Dec 2016 15:51:47 +0100 Subject: [PATCH 11/45] test gems and procfile --- Gemfile.lock | 7 +++++++ Procfile | 1 + 2 files changed, 8 insertions(+) create mode 100644 Procfile diff --git a/Gemfile.lock b/Gemfile.lock index a45ddd5..130f5ff 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -6,6 +6,7 @@ GEM bcrypt (3.1.11) bcrypt-ruby (3.1.5) bcrypt (>= 3.1.3) + daemons (1.2.4) data_mapper (1.2.0) dm-aggregates (~> 1.2.0) dm-constraints (~> 1.2.0) @@ -56,6 +57,7 @@ GEM dm-core (~> 1.2.0) do_sqlite3 (0.10.17) data_objects (= 0.10.17) + eventmachine (1.2.1) faster_require (0.9.4) fastercsv (1.5.5) json (1.8.3) @@ -90,6 +92,10 @@ GEM rack-protection (~> 1.4) tilt (>= 1.3, < 3) stringex (1.5.1) + thin (1.7.0) + daemons (~> 1.0, >= 1.0.9) + eventmachine (~> 1.0, >= 1.0.4) + rack (>= 1, < 3) thor (0.19.4) tilt (2.0.5) uuidtools (2.1.5) @@ -111,4 +117,5 @@ DEPENDENCIES rspec rspec-core sinatra + thin thor diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..699f89e --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +server: bin/jerakia server From ded51b9881b61104a1e98a99c69ac9d6ee17fd17 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Thu, 8 Dec 2016 16:04:40 +0100 Subject: [PATCH 12/45] add deps [ci skip] --- .pkgr.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.pkgr.yml b/.pkgr.yml index 9d2f391..704066c 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -1,3 +1,5 @@ +build_dependencies: + - ruby-devel targets: ubuntu-16.04: ubuntu-14.04: @@ -9,3 +11,5 @@ targets: cli: jerakia user: root group: root + + From 92467d21cf552e4eb853f3a00fa10ee9f8dfe631 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Thu, 8 Dec 2016 16:14:11 +0100 Subject: [PATCH 13/45] [ci-skip] --- .pkgr.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.pkgr.yml b/.pkgr.yml index 704066c..1626fa4 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -8,7 +8,6 @@ targets: centos-6: centos-7: -cli: jerakia user: root group: root From cd88459805e5c6afb8d58c94017186f18b4019d2 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Thu, 8 Dec 2016 16:16:14 +0100 Subject: [PATCH 14/45] [ci-skip temorarily just use centos] --- .pkgr.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.pkgr.yml b/.pkgr.yml index 1626fa4..3e38696 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -1,11 +1,11 @@ build_dependencies: - ruby-devel targets: - ubuntu-16.04: - ubuntu-14.04: - debian-8: - debian-7: - centos-6: +# ubuntu-16.04: +# ubuntu-14.04: +# debian-8: +# debian-7: +# centos-6: centos-7: user: root From 561587ab5dfa5109b8014f8a7d393ab8c5b7f5c0 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Thu, 8 Dec 2016 18:14:21 +0100 Subject: [PATCH 15/45] [ci-skip] added post install --- .pkgr.yml | 11 ++++++++--- ext/jerakia/jerakia.skel.yaml | 20 ++++++++++++++++++++ ext/jerakia/policy.skel.rb | 22 ++++++++++++++++++++++ ext/pkgr/postinstall.sh | 19 +++++++++++++++++++ ext/systemd/jerakia.service | 10 ++++++++++ 5 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 ext/jerakia/jerakia.skel.yaml create mode 100644 ext/jerakia/policy.skel.rb create mode 100644 ext/pkgr/postinstall.sh create mode 100644 ext/systemd/jerakia.service diff --git a/.pkgr.yml b/.pkgr.yml index 3e38696..f36ae5c 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -1,5 +1,3 @@ -build_dependencies: - - ruby-devel targets: # ubuntu-16.04: # ubuntu-14.04: @@ -7,8 +5,15 @@ targets: # debian-7: # centos-6: centos-7: - + build_dependencies: + - ruby-devel + env: + - RUNNER=systemd + +cli: jerakia user: root group: root +after_install: ext/pkgr/postinstall.sh + diff --git a/ext/jerakia/jerakia.skel.yaml b/ext/jerakia/jerakia.skel.yaml new file mode 100644 index 0000000..029bcc5 --- /dev/null +++ b/ext/jerakia/jerakia.skel.yaml @@ -0,0 +1,20 @@ +--- + +# policydir is where Jerakia policies are stored, by default there are +# us a default.rb which contains the default policy. +# +policydir: /etc/jerakia/policy.d + +# Plugins are loaded from the plugin directory specified here +# +plugindir: /var/lib/jerakia/plugins + +# Logging settings +# +loglevel: info +logfile: /var/log/jerakia/jerakia.log + +# Jerakia Server needs to keep some small sqlite databases +# this location determines where they are stored, if you not +# +databasedir: /var/db/jerakia diff --git a/ext/jerakia/policy.skel.rb b/ext/jerakia/policy.skel.rb new file mode 100644 index 0000000..cbb78df --- /dev/null +++ b/ext/jerakia/policy.skel.rb @@ -0,0 +1,22 @@ +# Jerakia policy file. +# +# The default policy is called :default, you can add further policies by adding +# them into the policy.d folder as name.rb +# +policy :default do + + # Lookups are initiated in order, each lookup must define at least a datasource + # to tell Jerakia where to source the data from + # + lookup :main do + datasource :file, { + :docroot => '/var/lib/jerakia/data', + :searchpath => [ + "hostname/#{scope[:certname]}", + "environment/#{scope[:environment]}", + "common", + ], + :format => :yaml + } + end +end diff --git a/ext/pkgr/postinstall.sh b/ext/pkgr/postinstall.sh new file mode 100644 index 0000000..23296ed --- /dev/null +++ b/ext/pkgr/postinstall.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +# Post install script for Jerakia + +if [ "$RUNNER" == "systemd" ]; then + cp /opt/jerakia/ext/systemd/jerakia.service /etc/systemd/system/jerakia.service + systemctl daemon-reload +fi + + +mkdir -p /var/log/jerakia +mkdir -p /var/db/jerakia +mkdir -p /etc/jerakia/policy.d + +[ -f "/etc/jerakia/policy.d/default.rb" ] || cp /opt/jerakia/ext/jerakia/policy.skel.rb /etc/jerakia/policy.d/default.rb +[ -f "/etc/jerakia/jerakia.yaml" ] || cp /opt/jerakia/ext/jerakia/jerakia.skel.yaml /etc/jerakia/jerakia.yaml + + + diff --git a/ext/systemd/jerakia.service b/ext/systemd/jerakia.service new file mode 100644 index 0000000..e083090 --- /dev/null +++ b/ext/systemd/jerakia.service @@ -0,0 +1,10 @@ +[Unit] +Description=Jerakia Server + +[Service] +ExecStart=/opt/jerakia/bin/jerakia server +Type=simple + + +[Install] +WantedBy=multi-user.target From d96f715cdf0ed4d3a72da207119b6450d8e0548a Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Thu, 8 Dec 2016 18:21:04 +0100 Subject: [PATCH 16/45] fix for systemd --- .pkgr.yml | 4 +--- ext/pkgr/postinstall.sh | 2 ++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.pkgr.yml b/.pkgr.yml index f36ae5c..e582418 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -7,13 +7,11 @@ targets: centos-7: build_dependencies: - ruby-devel - env: - - RUNNER=systemd + after_install: ext/pkgr/postinstall.sh systemd cli: jerakia user: root group: root -after_install: ext/pkgr/postinstall.sh diff --git a/ext/pkgr/postinstall.sh b/ext/pkgr/postinstall.sh index 23296ed..48782f9 100644 --- a/ext/pkgr/postinstall.sh +++ b/ext/pkgr/postinstall.sh @@ -1,5 +1,7 @@ #!/bin/sh +RUNNER=$1 + # Post install script for Jerakia if [ "$RUNNER" == "systemd" ]; then From 3f7ec098182d834fcce5e1b3652fda3e9651e09c Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Thu, 8 Dec 2016 18:27:48 +0100 Subject: [PATCH 17/45] fixed systemd --- .pkgr.yml | 2 +- ext/pkgr/postinstall.sh | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.pkgr.yml b/.pkgr.yml index e582418..8f8eecf 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -7,11 +7,11 @@ targets: centos-7: build_dependencies: - ruby-devel - after_install: ext/pkgr/postinstall.sh systemd cli: jerakia user: root group: root +after_install: ext/pkgr/postinstall.sh diff --git a/ext/pkgr/postinstall.sh b/ext/pkgr/postinstall.sh index 48782f9..5c825c3 100644 --- a/ext/pkgr/postinstall.sh +++ b/ext/pkgr/postinstall.sh @@ -1,10 +1,11 @@ #!/bin/sh -RUNNER=$1 # Post install script for Jerakia -if [ "$RUNNER" == "systemd" ]; then +IS_SYSTEMD=$((pidof systemd 2>&1 > /dev/null) && echo "yes" || echo "no") + +if [ "$IS_SYSTEMD" == "yes" ]; then cp /opt/jerakia/ext/systemd/jerakia.service /etc/systemd/system/jerakia.service systemctl daemon-reload fi From b6b47327a5382a90480d463cedfa93ba0b33058e Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Thu, 8 Dec 2016 18:58:54 +0100 Subject: [PATCH 18/45] fix jerakia service --- ext/systemd/jerakia.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/systemd/jerakia.service b/ext/systemd/jerakia.service index e083090..8e7feb8 100644 --- a/ext/systemd/jerakia.service +++ b/ext/systemd/jerakia.service @@ -2,7 +2,7 @@ Description=Jerakia Server [Service] -ExecStart=/opt/jerakia/bin/jerakia server +ExecStart=/bin/jerakia server Type=simple From efe939765a5bd82efa47c5ff9b4d2ce853ec080a Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 9 Dec 2016 09:05:47 +0100 Subject: [PATCH 19/45] removed gemfile.lock --- Gemfile.lock | 121 --------------------------------------------------- 1 file changed, 121 deletions(-) delete mode 100644 Gemfile.lock diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 130f5ff..0000000 --- a/Gemfile.lock +++ /dev/null @@ -1,121 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - addressable (2.5.0) - public_suffix (~> 2.0, >= 2.0.2) - bcrypt (3.1.11) - bcrypt-ruby (3.1.5) - bcrypt (>= 3.1.3) - daemons (1.2.4) - data_mapper (1.2.0) - dm-aggregates (~> 1.2.0) - dm-constraints (~> 1.2.0) - dm-core (~> 1.2.0) - dm-migrations (~> 1.2.0) - dm-serializer (~> 1.2.0) - dm-timestamps (~> 1.2.0) - dm-transactions (~> 1.2.0) - dm-types (~> 1.2.0) - dm-validations (~> 1.2.0) - data_objects (0.10.17) - addressable (~> 2.1) - deep_merge (1.1.1) - diff-lcs (1.2.5) - dm-aggregates (1.2.0) - dm-core (~> 1.2.0) - dm-constraints (1.2.0) - dm-core (~> 1.2.0) - dm-core (1.2.1) - addressable (~> 2.3) - dm-do-adapter (1.2.0) - data_objects (~> 0.10.6) - dm-core (~> 1.2.0) - dm-migrations (1.2.0) - dm-core (~> 1.2.0) - dm-serializer (1.2.2) - dm-core (~> 1.2.0) - fastercsv (~> 1.5) - json (~> 1.6) - json_pure (~> 1.6) - multi_json (~> 1.0) - dm-sqlite-adapter (1.2.0) - dm-do-adapter (~> 1.2.0) - do_sqlite3 (~> 0.10.6) - dm-timestamps (1.2.0) - dm-core (~> 1.2.0) - dm-transactions (1.2.0) - dm-core (~> 1.2.0) - dm-types (1.2.2) - bcrypt-ruby (~> 3.0) - dm-core (~> 1.2.0) - fastercsv (~> 1.5) - json (~> 1.6) - multi_json (~> 1.0) - stringex (~> 1.4) - uuidtools (~> 2.1) - dm-validations (1.2.0) - dm-core (~> 1.2.0) - do_sqlite3 (0.10.17) - data_objects (= 0.10.17) - eventmachine (1.2.1) - faster_require (0.9.4) - fastercsv (1.5.5) - json (1.8.3) - json_pure (1.8.3) - lookup_http (1.0.0) - json (>= 1.1.1) - metaclass (0.0.4) - mocha (1.2.1) - metaclass (~> 0.0.1) - multi_json (1.12.1) - psych (2.2.1) - public_suffix (2.0.4) - rack (1.6.5) - rack-protection (1.5.3) - rack - rake (12.0.0) - rspec (3.5.0) - rspec-core (~> 3.5.0) - rspec-expectations (~> 3.5.0) - rspec-mocks (~> 3.5.0) - rspec-core (3.5.4) - rspec-support (~> 3.5.0) - rspec-expectations (3.5.0) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.5.0) - rspec-mocks (3.5.0) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.5.0) - rspec-support (3.5.0) - sinatra (1.4.7) - rack (~> 1.5) - rack-protection (~> 1.4) - tilt (>= 1.3, < 3) - stringex (1.5.1) - thin (1.7.0) - daemons (~> 1.0, >= 1.0.9) - eventmachine (~> 1.0, >= 1.0.4) - rack (>= 1, < 3) - thor (0.19.4) - tilt (2.0.5) - uuidtools (2.1.5) - -PLATFORMS - ruby - -DEPENDENCIES - data_mapper - deep_merge - dm-sqlite-adapter - faster_require - json - lookup_http - mocha - psych - public_suffix - rake - rspec - rspec-core - sinatra - thin - thor From c0434e4d456066ea26f60b62bd56c4217fbc7208 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 9 Dec 2016 09:09:43 +0100 Subject: [PATCH 20/45] added output and cleaned up leftover debug code --- lib/jerakia/cli/lookup.rb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/jerakia/cli/lookup.rb b/lib/jerakia/cli/lookup.rb index b41ed54..b89b5f6 100644 --- a/lib/jerakia/cli/lookup.rb +++ b/lib/jerakia/cli/lookup.rb @@ -86,10 +86,6 @@ def lookup(key) end begin - - puts options_copy - puts options_copy[:policy] - jac = Jerakia.new(:config => options[:config], :logfile => logfile, :loglevel => loglevel, @@ -112,6 +108,8 @@ def lookup(key) puts answer.payload.to_json when 'yaml' puts answer.payload.to_yaml + else + puts answer.payload end rescue Jerakia::Error => e STDERR.puts "Error(#{e.class}): #{e.message}" From 0364141683d017032af20411e6808f3c89b80382 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 9 Dec 2016 09:52:54 +0100 Subject: [PATCH 21/45] Added Gemfile.lock statically --- .gitignore | 3 +- .pkgr.yml | 3 + ext/pkgr/Gemfile.lock | 134 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 ext/pkgr/Gemfile.lock diff --git a/.gitignore b/.gitignore index d748a86..258798f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.swo +.bundle *.swp test/fixtures/var/db/jerakia/* - +./Gemfile.lock diff --git a/.pkgr.yml b/.pkgr.yml index 8f8eecf..adc46dc 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -8,6 +8,9 @@ targets: build_dependencies: - ruby-devel +before: + - mv ext/pkgr/Gemfile.lock . + cli: jerakia user: root group: root diff --git a/ext/pkgr/Gemfile.lock b/ext/pkgr/Gemfile.lock new file mode 100644 index 0000000..cbe8199 --- /dev/null +++ b/ext/pkgr/Gemfile.lock @@ -0,0 +1,134 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (2.2.8) + addressable (2.5.0) + public_suffix (~> 2.0, >= 2.0.2) + bcrypt (3.1.11) + bcrypt-ruby (3.1.5) + bcrypt (>= 3.1.3) + daemons (1.2.4) + data_mapper (1.2.0) + dm-aggregates (~> 1.2.0) + dm-constraints (~> 1.2.0) + dm-core (~> 1.2.0) + dm-migrations (~> 1.2.0) + dm-serializer (~> 1.2.0) + dm-timestamps (~> 1.2.0) + dm-transactions (~> 1.2.0) + dm-types (~> 1.2.0) + dm-validations (~> 1.2.0) + data_objects (0.10.17) + addressable (~> 2.1) + deep_merge (1.1.1) + diff-lcs (1.2.5) + dm-aggregates (1.2.0) + dm-core (~> 1.2.0) + dm-constraints (1.2.0) + dm-core (~> 1.2.0) + dm-core (1.2.1) + addressable (~> 2.3) + dm-do-adapter (1.2.0) + data_objects (~> 0.10.6) + dm-core (~> 1.2.0) + dm-migrations (1.2.0) + dm-core (~> 1.2.0) + dm-serializer (1.2.2) + dm-core (~> 1.2.0) + fastercsv (~> 1.5) + json (~> 1.6) + json_pure (~> 1.6) + multi_json (~> 1.0) + dm-sqlite-adapter (1.2.0) + dm-do-adapter (~> 1.2.0) + do_sqlite3 (~> 0.10.6) + dm-timestamps (1.2.0) + dm-core (~> 1.2.0) + dm-transactions (1.2.0) + dm-core (~> 1.2.0) + dm-types (1.2.2) + bcrypt-ruby (~> 3.0) + dm-core (~> 1.2.0) + fastercsv (~> 1.5) + json (~> 1.6) + multi_json (~> 1.0) + stringex (~> 1.4) + uuidtools (~> 2.1) + dm-validations (1.2.0) + dm-core (~> 1.2.0) + do_sqlite3 (0.10.17) + data_objects (= 0.10.17) + eventmachine (1.2.1) + facter (2.4.6) + CFPropertyList (~> 2.2.6) + faster_require (0.9.4) + fastercsv (1.5.5) + hiera (3.2.2) + json (1.8.3) + json_pure (1.8.3) + lookup_http (1.0.0) + json (>= 1.1.1) + metaclass (0.0.4) + mocha (1.2.1) + metaclass (~> 0.0.1) + multi_json (1.12.1) + psych (2.2.1) + public_suffix (2.0.4) + puppet (4.8.0) + CFPropertyList (~> 2.2.6) + facter (> 2.0, < 4) + hiera (>= 2.0, < 4) + json_pure (~> 1.8) + rack (1.6.5) + rack-protection (1.5.3) + rack + rake (12.0.0) + rspec (3.5.0) + rspec-core (~> 3.5.0) + rspec-expectations (~> 3.5.0) + rspec-mocks (~> 3.5.0) + rspec-core (3.5.4) + rspec-support (~> 3.5.0) + rspec-expectations (3.5.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.5.0) + rspec-mocks (3.5.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.5.0) + rspec-support (3.5.0) + sinatra (1.4.7) + rack (~> 1.5) + rack-protection (~> 1.4) + tilt (>= 1.3, < 3) + stringex (1.5.1) + thin (1.7.0) + daemons (~> 1.0, >= 1.0.9) + eventmachine (~> 1.0, >= 1.0.4) + rack (>= 1, < 3) + thor (0.19.4) + tilt (2.0.5) + uuidtools (2.1.5) + +PLATFORMS + ruby + +DEPENDENCIES + data_mapper + deep_merge + dm-sqlite-adapter + faster_require + json + lookup_http + mocha + psych + public_suffix + puppet (= 4.8.0) + rake + rspec + rspec-core + sinatra + thin + thor + +BUNDLED WITH + 1.13.6 From 29edce93715df203807c674127f2d2cebbfbfcb1 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 9 Dec 2016 09:55:35 +0100 Subject: [PATCH 22/45] updated Gemfile.lock --- ext/pkgr/Gemfile.lock | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/ext/pkgr/Gemfile.lock b/ext/pkgr/Gemfile.lock index cbe8199..8199963 100644 --- a/ext/pkgr/Gemfile.lock +++ b/ext/pkgr/Gemfile.lock @@ -1,7 +1,6 @@ GEM remote: https://rubygems.org/ specs: - CFPropertyList (2.2.8) addressable (2.5.0) public_suffix (~> 2.0, >= 2.0.2) bcrypt (3.1.11) @@ -59,11 +58,8 @@ GEM do_sqlite3 (0.10.17) data_objects (= 0.10.17) eventmachine (1.2.1) - facter (2.4.6) - CFPropertyList (~> 2.2.6) faster_require (0.9.4) fastercsv (1.5.5) - hiera (3.2.2) json (1.8.3) json_pure (1.8.3) lookup_http (1.0.0) @@ -74,11 +70,6 @@ GEM multi_json (1.12.1) psych (2.2.1) public_suffix (2.0.4) - puppet (4.8.0) - CFPropertyList (~> 2.2.6) - facter (> 2.0, < 4) - hiera (>= 2.0, < 4) - json_pure (~> 1.8) rack (1.6.5) rack-protection (1.5.3) rack @@ -122,7 +113,6 @@ DEPENDENCIES mocha psych public_suffix - puppet (= 4.8.0) rake rspec rspec-core From 75dec83f002a6c79b9f275947069b447b87bb2e6 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 9 Dec 2016 10:36:06 +0100 Subject: [PATCH 23/45] updated Gemfile.lock --- ext/pkgr/Gemfile.lock | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ext/pkgr/Gemfile.lock b/ext/pkgr/Gemfile.lock index 8199963..2493862 100644 --- a/ext/pkgr/Gemfile.lock +++ b/ext/pkgr/Gemfile.lock @@ -1,6 +1,7 @@ GEM remote: https://rubygems.org/ specs: + CFPropertyList (2.2.8) addressable (2.5.0) public_suffix (~> 2.0, >= 2.0.2) bcrypt (3.1.11) @@ -58,8 +59,11 @@ GEM do_sqlite3 (0.10.17) data_objects (= 0.10.17) eventmachine (1.2.1) + facter (2.4.6) + CFPropertyList (~> 2.2.6) faster_require (0.9.4) fastercsv (1.5.5) + hiera (3.2.2) json (1.8.3) json_pure (1.8.3) lookup_http (1.0.0) @@ -70,6 +74,11 @@ GEM multi_json (1.12.1) psych (2.2.1) public_suffix (2.0.4) + puppet (4.8.1) + CFPropertyList (~> 2.2.6) + facter (> 2.0, < 4) + hiera (>= 2.0, < 4) + json_pure (~> 1.8) rack (1.6.5) rack-protection (1.5.3) rack @@ -113,6 +122,7 @@ DEPENDENCIES mocha psych public_suffix + puppet (~> 4.8.0) rake rspec rspec-core From 86664df614d94219a2a50143b241fac5f651fa8b Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 9 Dec 2016 10:38:16 +0100 Subject: [PATCH 24/45] pinned ruby to 2.3 --- .ruby-version | 1 + 1 file changed, 1 insertion(+) create mode 100644 .ruby-version diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 0000000..276cbf9 --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +2.3.0 From 4f19f3592716f8d7749a1967e0c6d30e68d1fd8a Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 9 Dec 2016 10:40:40 +0100 Subject: [PATCH 25/45] synced gems --- .gitignore | 2 +- Gemfile | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 258798f..24abc69 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ .bundle *.swp test/fixtures/var/db/jerakia/* -./Gemfile.lock +/Gemfile.lock diff --git a/Gemfile b/Gemfile index e0b6b90..2104b57 100644 --- a/Gemfile +++ b/Gemfile @@ -7,12 +7,13 @@ gem "deep_merge" gem "thin" gem "sinatra" gem "dm-sqlite-adapter" +gem "rake" group(:development, :test) do - gem 'rake' gem 'rspec-core' gem 'rspec' gem 'mocha' + gem "puppet", ENV['PUPPET_GEM_VERSION'] || '~> 4.8.0' end # JSON must be 1.x on Ruby 1.9 From 2176e0cc48f02bf094eb18ec4f23979254fd32c0 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 9 Dec 2016 10:44:31 +0100 Subject: [PATCH 26/45] try to pin ruby --- .pkgr.yml | 3 +++ Gemfile | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/.pkgr.yml b/.pkgr.yml index adc46dc..b042bf8 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -16,5 +16,8 @@ user: root group: root after_install: ext/pkgr/postinstall.sh +env: + - PACKAGING=1 + diff --git a/Gemfile b/Gemfile index 2104b57..d414777 100644 --- a/Gemfile +++ b/Gemfile @@ -1,4 +1,9 @@ source 'https://rubygems.org' + +if ENV['PACKAGING'].to_s == "1" +ruby '2.3.0' +end + gem 'faster_require' gem 'psych' gem 'lookup_http' From 9aea00536e9e8a9c04680d5cbbdafbdca8c5f32f Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 9 Dec 2016 11:04:14 +0100 Subject: [PATCH 27/45] removed procfile and ruby version --- .ruby-version | 1 - Procfile | 1 - 2 files changed, 2 deletions(-) delete mode 100644 .ruby-version delete mode 100644 Procfile diff --git a/.ruby-version b/.ruby-version deleted file mode 100644 index 276cbf9..0000000 --- a/.ruby-version +++ /dev/null @@ -1 +0,0 @@ -2.3.0 diff --git a/Procfile b/Procfile deleted file mode 100644 index 699f89e..0000000 --- a/Procfile +++ /dev/null @@ -1 +0,0 @@ -server: bin/jerakia server From fdc1a857beaec30a6d171987777574cba9ce889c Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 9 Dec 2016 11:45:46 +0100 Subject: [PATCH 28/45] try with version --- .pkgr.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.pkgr.yml b/.pkgr.yml index b042bf8..fda8e8a 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -18,6 +18,4 @@ after_install: ext/pkgr/postinstall.sh env: - PACKAGING=1 - - - + - APP_VERSION=1.2.0-alpha From 1c57f67f7cfc95bd673e97e8ef289b7d86120b61 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 9 Dec 2016 11:56:19 +0100 Subject: [PATCH 29/45] try with version --- .pkgr.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.pkgr.yml b/.pkgr.yml index fda8e8a..f155710 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -18,4 +18,5 @@ after_install: ext/pkgr/postinstall.sh env: - PACKAGING=1 - - APP_VERSION=1.2.0-alpha + +version: 1.2.0-alpha0 From b9ddcb47ef8e15b7541d3d8cf7797873b11b8fe7 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 9 Dec 2016 12:05:27 +0100 Subject: [PATCH 30/45] reverse try with version --- .pkgr.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.pkgr.yml b/.pkgr.yml index f155710..b46d7e6 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -19,4 +19,3 @@ after_install: ext/pkgr/postinstall.sh env: - PACKAGING=1 -version: 1.2.0-alpha0 From 02dd5f3274154122b9200ea761b2239d3a1f087e Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 9 Dec 2016 12:11:30 +0100 Subject: [PATCH 31/45] pinned rack for CI tests --- Gemfile | 1 + ext/pkgr/Gemfile.lock | 1 + 2 files changed, 2 insertions(+) diff --git a/Gemfile b/Gemfile index d414777..17f43d2 100644 --- a/Gemfile +++ b/Gemfile @@ -13,6 +13,7 @@ gem "thin" gem "sinatra" gem "dm-sqlite-adapter" gem "rake" +gem "rack", "~> 1.6.5" group(:development, :test) do gem 'rspec-core' diff --git a/ext/pkgr/Gemfile.lock b/ext/pkgr/Gemfile.lock index 2493862..abd92e6 100644 --- a/ext/pkgr/Gemfile.lock +++ b/ext/pkgr/Gemfile.lock @@ -123,6 +123,7 @@ DEPENDENCIES psych public_suffix puppet (~> 4.8.0) + rack (~> 1.6.5) rake rspec rspec-core From a8aa61c2ec21ff548d13e0eb0043e136021d67ce Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 9 Dec 2016 13:18:07 +0100 Subject: [PATCH 32/45] packager.io support (#70) --- .gitignore | 3 +- .pkgr.yml | 21 ++++++ Gemfile | 11 ++- ext/jerakia/jerakia.skel.yaml | 20 +++++ ext/jerakia/policy.skel.rb | 22 ++++++ ext/pkgr/Gemfile.lock | 135 ++++++++++++++++++++++++++++++++++ ext/pkgr/postinstall.sh | 22 ++++++ ext/systemd/jerakia.service | 10 +++ lib/jerakia/cli/lookup.rb | 6 +- 9 files changed, 243 insertions(+), 7 deletions(-) create mode 100644 .pkgr.yml create mode 100644 ext/jerakia/jerakia.skel.yaml create mode 100644 ext/jerakia/policy.skel.rb create mode 100644 ext/pkgr/Gemfile.lock create mode 100644 ext/pkgr/postinstall.sh create mode 100644 ext/systemd/jerakia.service diff --git a/.gitignore b/.gitignore index d748a86..24abc69 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.swo +.bundle *.swp test/fixtures/var/db/jerakia/* - +/Gemfile.lock diff --git a/.pkgr.yml b/.pkgr.yml new file mode 100644 index 0000000..b46d7e6 --- /dev/null +++ b/.pkgr.yml @@ -0,0 +1,21 @@ +targets: +# ubuntu-16.04: +# ubuntu-14.04: +# debian-8: +# debian-7: +# centos-6: + centos-7: + build_dependencies: + - ruby-devel + +before: + - mv ext/pkgr/Gemfile.lock . + +cli: jerakia +user: root +group: root +after_install: ext/pkgr/postinstall.sh + +env: + - PACKAGING=1 + diff --git a/Gemfile b/Gemfile index 72fb136..17f43d2 100644 --- a/Gemfile +++ b/Gemfile @@ -1,18 +1,25 @@ source 'https://rubygems.org' + +if ENV['PACKAGING'].to_s == "1" +ruby '2.3.0' +end + gem 'faster_require' gem 'psych' gem 'lookup_http' gem 'thor' -gem "puppet", ENV['PUPPET_GEM_VERSION'] || '~> 4.8.0' gem "deep_merge" +gem "thin" gem "sinatra" gem "dm-sqlite-adapter" +gem "rake" +gem "rack", "~> 1.6.5" group(:development, :test) do - gem 'rake' gem 'rspec-core' gem 'rspec' gem 'mocha' + gem "puppet", ENV['PUPPET_GEM_VERSION'] || '~> 4.8.0' end # JSON must be 1.x on Ruby 1.9 diff --git a/ext/jerakia/jerakia.skel.yaml b/ext/jerakia/jerakia.skel.yaml new file mode 100644 index 0000000..029bcc5 --- /dev/null +++ b/ext/jerakia/jerakia.skel.yaml @@ -0,0 +1,20 @@ +--- + +# policydir is where Jerakia policies are stored, by default there are +# us a default.rb which contains the default policy. +# +policydir: /etc/jerakia/policy.d + +# Plugins are loaded from the plugin directory specified here +# +plugindir: /var/lib/jerakia/plugins + +# Logging settings +# +loglevel: info +logfile: /var/log/jerakia/jerakia.log + +# Jerakia Server needs to keep some small sqlite databases +# this location determines where they are stored, if you not +# +databasedir: /var/db/jerakia diff --git a/ext/jerakia/policy.skel.rb b/ext/jerakia/policy.skel.rb new file mode 100644 index 0000000..cbb78df --- /dev/null +++ b/ext/jerakia/policy.skel.rb @@ -0,0 +1,22 @@ +# Jerakia policy file. +# +# The default policy is called :default, you can add further policies by adding +# them into the policy.d folder as name.rb +# +policy :default do + + # Lookups are initiated in order, each lookup must define at least a datasource + # to tell Jerakia where to source the data from + # + lookup :main do + datasource :file, { + :docroot => '/var/lib/jerakia/data', + :searchpath => [ + "hostname/#{scope[:certname]}", + "environment/#{scope[:environment]}", + "common", + ], + :format => :yaml + } + end +end diff --git a/ext/pkgr/Gemfile.lock b/ext/pkgr/Gemfile.lock new file mode 100644 index 0000000..abd92e6 --- /dev/null +++ b/ext/pkgr/Gemfile.lock @@ -0,0 +1,135 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (2.2.8) + addressable (2.5.0) + public_suffix (~> 2.0, >= 2.0.2) + bcrypt (3.1.11) + bcrypt-ruby (3.1.5) + bcrypt (>= 3.1.3) + daemons (1.2.4) + data_mapper (1.2.0) + dm-aggregates (~> 1.2.0) + dm-constraints (~> 1.2.0) + dm-core (~> 1.2.0) + dm-migrations (~> 1.2.0) + dm-serializer (~> 1.2.0) + dm-timestamps (~> 1.2.0) + dm-transactions (~> 1.2.0) + dm-types (~> 1.2.0) + dm-validations (~> 1.2.0) + data_objects (0.10.17) + addressable (~> 2.1) + deep_merge (1.1.1) + diff-lcs (1.2.5) + dm-aggregates (1.2.0) + dm-core (~> 1.2.0) + dm-constraints (1.2.0) + dm-core (~> 1.2.0) + dm-core (1.2.1) + addressable (~> 2.3) + dm-do-adapter (1.2.0) + data_objects (~> 0.10.6) + dm-core (~> 1.2.0) + dm-migrations (1.2.0) + dm-core (~> 1.2.0) + dm-serializer (1.2.2) + dm-core (~> 1.2.0) + fastercsv (~> 1.5) + json (~> 1.6) + json_pure (~> 1.6) + multi_json (~> 1.0) + dm-sqlite-adapter (1.2.0) + dm-do-adapter (~> 1.2.0) + do_sqlite3 (~> 0.10.6) + dm-timestamps (1.2.0) + dm-core (~> 1.2.0) + dm-transactions (1.2.0) + dm-core (~> 1.2.0) + dm-types (1.2.2) + bcrypt-ruby (~> 3.0) + dm-core (~> 1.2.0) + fastercsv (~> 1.5) + json (~> 1.6) + multi_json (~> 1.0) + stringex (~> 1.4) + uuidtools (~> 2.1) + dm-validations (1.2.0) + dm-core (~> 1.2.0) + do_sqlite3 (0.10.17) + data_objects (= 0.10.17) + eventmachine (1.2.1) + facter (2.4.6) + CFPropertyList (~> 2.2.6) + faster_require (0.9.4) + fastercsv (1.5.5) + hiera (3.2.2) + json (1.8.3) + json_pure (1.8.3) + lookup_http (1.0.0) + json (>= 1.1.1) + metaclass (0.0.4) + mocha (1.2.1) + metaclass (~> 0.0.1) + multi_json (1.12.1) + psych (2.2.1) + public_suffix (2.0.4) + puppet (4.8.1) + CFPropertyList (~> 2.2.6) + facter (> 2.0, < 4) + hiera (>= 2.0, < 4) + json_pure (~> 1.8) + rack (1.6.5) + rack-protection (1.5.3) + rack + rake (12.0.0) + rspec (3.5.0) + rspec-core (~> 3.5.0) + rspec-expectations (~> 3.5.0) + rspec-mocks (~> 3.5.0) + rspec-core (3.5.4) + rspec-support (~> 3.5.0) + rspec-expectations (3.5.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.5.0) + rspec-mocks (3.5.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.5.0) + rspec-support (3.5.0) + sinatra (1.4.7) + rack (~> 1.5) + rack-protection (~> 1.4) + tilt (>= 1.3, < 3) + stringex (1.5.1) + thin (1.7.0) + daemons (~> 1.0, >= 1.0.9) + eventmachine (~> 1.0, >= 1.0.4) + rack (>= 1, < 3) + thor (0.19.4) + tilt (2.0.5) + uuidtools (2.1.5) + +PLATFORMS + ruby + +DEPENDENCIES + data_mapper + deep_merge + dm-sqlite-adapter + faster_require + json + lookup_http + mocha + psych + public_suffix + puppet (~> 4.8.0) + rack (~> 1.6.5) + rake + rspec + rspec-core + sinatra + thin + thor + +BUNDLED WITH + 1.13.6 diff --git a/ext/pkgr/postinstall.sh b/ext/pkgr/postinstall.sh new file mode 100644 index 0000000..5c825c3 --- /dev/null +++ b/ext/pkgr/postinstall.sh @@ -0,0 +1,22 @@ +#!/bin/sh + + +# Post install script for Jerakia + +IS_SYSTEMD=$((pidof systemd 2>&1 > /dev/null) && echo "yes" || echo "no") + +if [ "$IS_SYSTEMD" == "yes" ]; then + cp /opt/jerakia/ext/systemd/jerakia.service /etc/systemd/system/jerakia.service + systemctl daemon-reload +fi + + +mkdir -p /var/log/jerakia +mkdir -p /var/db/jerakia +mkdir -p /etc/jerakia/policy.d + +[ -f "/etc/jerakia/policy.d/default.rb" ] || cp /opt/jerakia/ext/jerakia/policy.skel.rb /etc/jerakia/policy.d/default.rb +[ -f "/etc/jerakia/jerakia.yaml" ] || cp /opt/jerakia/ext/jerakia/jerakia.skel.yaml /etc/jerakia/jerakia.yaml + + + diff --git a/ext/systemd/jerakia.service b/ext/systemd/jerakia.service new file mode 100644 index 0000000..8e7feb8 --- /dev/null +++ b/ext/systemd/jerakia.service @@ -0,0 +1,10 @@ +[Unit] +Description=Jerakia Server + +[Service] +ExecStart=/bin/jerakia server +Type=simple + + +[Install] +WantedBy=multi-user.target diff --git a/lib/jerakia/cli/lookup.rb b/lib/jerakia/cli/lookup.rb index b41ed54..b89b5f6 100644 --- a/lib/jerakia/cli/lookup.rb +++ b/lib/jerakia/cli/lookup.rb @@ -86,10 +86,6 @@ def lookup(key) end begin - - puts options_copy - puts options_copy[:policy] - jac = Jerakia.new(:config => options[:config], :logfile => logfile, :loglevel => loglevel, @@ -112,6 +108,8 @@ def lookup(key) puts answer.payload.to_json when 'yaml' puts answer.payload.to_yaml + else + puts answer.payload end rescue Jerakia::Error => e STDERR.puts "Error(#{e.class}): #{e.message}" From aa7f7d2a478cebff9a4f31169092429c30321331 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 9 Dec 2016 13:34:40 +0100 Subject: [PATCH 33/45] enabled ubuntu --- .pkgr.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.pkgr.yml b/.pkgr.yml index b46d7e6..c23682a 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -1,5 +1,7 @@ targets: -# ubuntu-16.04: + ubuntu-16.04: + build_dependencies: + - ruby-dev # ubuntu-14.04: # debian-8: # debian-7: From e7c51082646ea39e833888c8569518550397a534 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 9 Dec 2016 13:38:25 +0100 Subject: [PATCH 34/45] dependencies for ubuntu --- .pkgr.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.pkgr.yml b/.pkgr.yml index c23682a..c5c8fbc 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -2,6 +2,8 @@ targets: ubuntu-16.04: build_dependencies: - ruby-dev + - libsqlite3-dev + # ubuntu-14.04: # debian-8: # debian-7: From cb53aa55d0d1727d4267a007a892f34a6fb12d3e Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 9 Dec 2016 13:58:33 +0100 Subject: [PATCH 35/45] added debian 8 --- .pkgr.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.pkgr.yml b/.pkgr.yml index c5c8fbc..1204014 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -5,7 +5,10 @@ targets: - libsqlite3-dev # ubuntu-14.04: -# debian-8: + debian-8: + build_dependencies: + - ruby-dev + - libsqlite3-dev # debian-7: # centos-6: centos-7: From a2bee3e165c99eee07a6b44bbaa5a342b677fbbe Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Tue, 13 Dec 2016 18:17:59 +0100 Subject: [PATCH 36/45] add token expiry to cache tokens for a number of seconds (#71) --- lib/jerakia/config.rb | 2 +- lib/jerakia/server.rb | 9 ++++++--- lib/jerakia/server/rest.rb | 17 +++++++++++++++++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/lib/jerakia/config.rb b/lib/jerakia/config.rb index 252a7e0..d3a32b7 100644 --- a/lib/jerakia/config.rb +++ b/lib/jerakia/config.rb @@ -24,7 +24,7 @@ def defaults 'loglevel' => 'info', 'vardir' => '/var/lib/jerakia', 'piddir' => '/var/run', - 'enable_schema' => true + 'enable_schema' => true, } end diff --git a/lib/jerakia/server.rb b/lib/jerakia/server.rb index 8388c66..ff1d8ca 100644 --- a/lib/jerakia/server.rb +++ b/lib/jerakia/server.rb @@ -4,19 +4,22 @@ class Jerakia class Server - @jerakia = nil - @config = {} - def jerakia self.class.jerakia end class << self + @jerakia = nil + @config = {} + + attr_reader :config + def default_config { 'bind' => '127.0.0.1', 'port' => '9843', + 'token_ttl' => 300, } end diff --git a/lib/jerakia/server/rest.rb b/lib/jerakia/server/rest.rb index b3a3f1c..9c58919 100644 --- a/lib/jerakia/server/rest.rb +++ b/lib/jerakia/server/rest.rb @@ -12,6 +12,11 @@ def self.jerakia Jerakia::Server.jerakia end + def initialize + @authorized_tokens={} + super + end + def jerakia self.class.jerakia end @@ -20,12 +25,24 @@ def auth_denied halt(401, { :status => 'failed', :message => 'unauthorized' }.to_json) end + def token_ttl + Jerakia::Server.config["token_ttl"] + end + + def token_valid?(token) + return false unless @authorized_tokens[token].is_a?(Time) + (Time.now - @authorized_tokens[token]) < token_ttl.to_s + end + + def authenticate! token = env['HTTP_X_AUTHENTICATION'] auth_denied if token.nil? + return true if token_valid?(token) unless Jerakia::Server::Auth.authenticate(token) auth_denied end + @authorized_tokens[token] = Time.now end before do From 87ee8d32d02fdcd99baeb42b78087df650e4a562 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Tue, 13 Dec 2016 18:26:15 +0100 Subject: [PATCH 37/45] removed old obsolete files --- bin/jerakia.example | 19 ------------ ext/api/client/jacaranda_example.rb | 17 ----------- ext/api/rack/jacaranda.rb | 47 ----------------------------- 3 files changed, 83 deletions(-) delete mode 100644 bin/jerakia.example delete mode 100644 ext/api/client/jacaranda_example.rb delete mode 100644 ext/api/rack/jacaranda.rb diff --git a/bin/jerakia.example b/bin/jerakia.example deleted file mode 100644 index fd8c510..0000000 --- a/bin/jerakia.example +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env ruby - -require 'jerakia' -jac = Jerakia.new - - -100.times do -req = Jerakia::Request.new( - :key => 'port', - :namespace => [ 'apache' ], - :policy => :craig, - :lookup_type => :first, - :metadata => { :environment => 'development' } -) - -answer = jac.lookup(req) -puts "---- FINAL OUTPUT ----" -p answer -end diff --git a/ext/api/client/jacaranda_example.rb b/ext/api/client/jacaranda_example.rb deleted file mode 100644 index 80757bd..0000000 --- a/ext/api/client/jacaranda_example.rb +++ /dev/null @@ -1,17 +0,0 @@ -require 'rest_client' -require 'json' -url='http://localhost:4567/craig/port' - -payload={ - :namespace => [ "apache" ], - :lookup_type => :first, - :metadata => { - :environment => "development" - } -}.to_json - - -response = RestClient.get url, :params => { :payload => payload } -puts response.to_json - - diff --git a/ext/api/rack/jacaranda.rb b/ext/api/rack/jacaranda.rb deleted file mode 100644 index 58dcf8c..0000000 --- a/ext/api/rack/jacaranda.rb +++ /dev/null @@ -1,47 +0,0 @@ -require 'sinatra' -require 'json' -require 'jerakia' - -jac=Jerakia.new - -get '/:policy/:key' do - - payload=JSON.load(params[:payload]) - - policy=params[:policy] - key=params[:key] - p payload - - namespace=payload["namespace"] - lookup_type=payload["lookup_type"] - metadata=payload["metadata"] - merge=payload["merge"] - - reqdata = { - :policy => policy.to_sym, - :key => key - } - - if namespace.is_a?(Array) - reqdata[:namespace] = namespace - end - - if metadata.is_a?(Hash) - reqdata[:metadata] = metadata.inject({}) { |m,(k,v)| m[k.to_sym] = v; m } - end - - if merge.is_a?(String) - reqdata[:merge] = merge.to_sym - end - - if lookup_type.is_a?(String) - reqdata[:lookup_type] = lookup_type.to_sym - end - - jacreq=Jerakia::Request.new(reqdata) - answer = jac.lookup(jacreq) - answer.payload.to_json - -end - - From 5e94e51204c49ac828810473c17608109475739a Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Tue, 13 Dec 2016 18:27:15 +0100 Subject: [PATCH 38/45] changed version to 1.2.0-rc0 --- lib/jerakia/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jerakia/version.rb b/lib/jerakia/version.rb index c8ffbb4..1986f83 100644 --- a/lib/jerakia/version.rb +++ b/lib/jerakia/version.rb @@ -3,5 +3,5 @@ class Jerakia # # This should be updated when a new gem is released and it is read from the gemspec file # - VERSION = '1.2.0-alpha0'.freeze + VERSION = '1.2.0-rc0'.freeze end From b18bd8452657acaa87f69e41629c1ad610ebefca Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Wed, 14 Dec 2016 18:49:58 +0100 Subject: [PATCH 39/45] 1.2 rc0/bugfixes (#73) * fix to scope storage API * fixes around scope and metadata handling within jerakia server --- lib/jerakia/scope/server.rb | 11 +++-------- lib/jerakia/server/rest.rb | 20 ++++++++++++++++---- lib/jerakia/version.rb | 2 +- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/lib/jerakia/scope/server.rb b/lib/jerakia/scope/server.rb index 840f912..11ddecc 100644 --- a/lib/jerakia/scope/server.rb +++ b/lib/jerakia/scope/server.rb @@ -5,8 +5,7 @@ class Jerakia::Scope module Server class Database - DataMapper.setup(:scope, "sqlite://#{Jerakia.config[:databasedir]}/scope.db") - Jerakia.log.debug("Server scope handler connected to sqlite://#{Jerakia.config[:databasedir]}/scope.db") + DataMapper.setup(:scope, "sqlite::memory:") class Resource include DataMapper::Resource @@ -36,7 +35,7 @@ def create raise Jerakia::Error, "No scope data found for realm:#{realm} identifier:#{identifier}" if resource.nil? scope = resource.scope raise Jerakia::Error, "Scope did not return a hash for realm:#{realm} identifier:#{identifier}" unless scope.is_a?(Hash) - @value = scope + @value = Hash[ scope.map { |k,v| [ k.to_sym, v ] } ] end class << self @@ -48,6 +47,7 @@ def find(realm, identifier) def store(realm, identifier, scope) uuid = SecureRandom.uuid entry = find(realm, identifier) + puts "Storing #{realm} #{identifier} with #{scope} entry is #{entry}" if entry.nil? Database::Resource.create(:identifier => identifier, :realm => realm, :scope => scope, :uuid => uuid) else @@ -59,8 +59,3 @@ def store(realm, identifier, scope) end end end - - - - - diff --git a/lib/jerakia/server/rest.rb b/lib/jerakia/server/rest.rb index 9c58919..4e0559b 100644 --- a/lib/jerakia/server/rest.rb +++ b/lib/jerakia/server/rest.rb @@ -31,10 +31,9 @@ def token_ttl def token_valid?(token) return false unless @authorized_tokens[token].is_a?(Time) - (Time.now - @authorized_tokens[token]) < token_ttl.to_s + (Time.now - @authorized_tokens[token]) < token_ttl.to_i end - def authenticate! token = env['HTTP_X_AUTHENTICATION'] auth_denied if token.nil? @@ -47,6 +46,7 @@ def authenticate! before do content_type 'application/json' + end get '/' do @@ -60,7 +60,19 @@ def authenticate! :namespace => params['namespace'].split(/\//), } + metadata = params.select { |k,v| k =~ /^metadata_.*/ } + scope_opts = params.select { |k,v| k =~ /^scope_.*/ } + + request_opts[:metadata] = Hash[metadata.map { |k,v| [k.gsub(/^metadata_/, ""), v] }] + request_opts[:scope_options] = Hash[scope_opts.map { |k,v| [k.gsub(/^scope_/, ""), v] }] + + request_opts[:policy] = params['policy'].to_sym if params['policy'] + request_opts[:lookup_type] = params['lookup_type'].to_sym if params['lookup_type'] + request_opts[:merge] = params['merge'].to_sym if params['merge'] + request_opts[:scope] = params['scope'].to_sym if params['scope'] + request_opts[:use_schema] = false if params['use_schema'] == 'false' + begin request = Jerakia::Request.new(request_opts) answer = jerakia.lookup(request) @@ -85,9 +97,9 @@ def authenticate! end end - put '/v1/scope/:realm/:identifer' do + put '/v1/scope/:realm/:identifier' do scope = JSON.parse(request.body.read) - uuid = Jerakia::Scope::Server.put(params['realm'], params['identifier'], scope) + uuid = Jerakia::Scope::Server.store(params['realm'], params['identifier'], scope) { :status => 'ok', :uuid => uuid diff --git a/lib/jerakia/version.rb b/lib/jerakia/version.rb index 1986f83..d35d482 100644 --- a/lib/jerakia/version.rb +++ b/lib/jerakia/version.rb @@ -3,5 +3,5 @@ class Jerakia # # This should be updated when a new gem is released and it is read from the gemspec file # - VERSION = '1.2.0-rc0'.freeze + VERSION = '1.2.0-rc2'.freeze end From c217e7a072a7ed6bfdda618c21de3b1902a1f14e Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Wed, 11 Jan 2017 10:01:50 +0100 Subject: [PATCH 40/45] refined error messages --- lib/jerakia/server/rest.rb | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/jerakia/server/rest.rb b/lib/jerakia/server/rest.rb index 4e0559b..dfe03e6 100644 --- a/lib/jerakia/server/rest.rb +++ b/lib/jerakia/server/rest.rb @@ -22,7 +22,7 @@ def jerakia end def auth_denied - halt(401, { :status => 'failed', :message => 'unauthorized' }.to_json) + request_failed('unauthorized', 401) end def token_ttl @@ -46,15 +46,33 @@ def authenticate! before do content_type 'application/json' - end get '/' do auth_denied end + def request_failed(message, status_code=501) + halt(status_code, { + :status => 'failed', + :message => message, + }.to_json) + end + + def mandatory_params(mandatory, params) + mandatory.each do |m| + unless params.include?(m) + request_failed("Must include parameter #{m} in request", 400) + end + end + end + + get '/v1/lookup' do + request_failed("Keyless lookups not supported in this version of Jerakia") + end + get '/v1/lookup/:key' do - authenticate! + mandatory_params(['namespace'], params) request_opts = { :key => params['key'], :namespace => params['namespace'].split(/\//), @@ -77,7 +95,7 @@ def authenticate! request = Jerakia::Request.new(request_opts) answer = jerakia.lookup(request) rescue Jerakia::Error => e - halt(501, { :status => 'failed', :message => e.message }.to_json) + request_failed(e.message, 501) end { :status => 'ok', @@ -109,7 +127,7 @@ def authenticate! get '/v1/scope/:realm/:identifier/uuid' do resource = Jerakia::Scope::Server.find(params['realm'], params['identifier']) if resource.nil? - halt(404, { :status => 'failed', :message => "No scope data found" }.to_json) + request_failed('No scope data found', 404) else { :status => 'ok', From c4327507391e11de63f771428519d30302a6ef8c Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Wed, 11 Jan 2017 10:02:24 +0100 Subject: [PATCH 41/45] added environment file for dev testing --- test/environment.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 test/environment.sh diff --git a/test/environment.sh b/test/environment.sh new file mode 100644 index 0000000..db9d40e --- /dev/null +++ b/test/environment.sh @@ -0,0 +1,10 @@ +if [ ! -d "./lib/jerakia" ]; then + echo "FAILED: You don't appear to be in the Jerakia root directory!" + +else + export RUBYLIB=${PWD}/lib + export JERAKIA_CONFIG=./test/fixtures/etc/jerakia/jerakia.yaml + export PATH=${PATH}:${PWD}/bin +fi + + From 55c10e0e9c729a2d36f7a9eb0e85014e03b00d1b Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 13 Jan 2017 11:40:33 +0100 Subject: [PATCH 42/45] read scope from file db, not memory to avoid pooling issues. TBA --- lib/jerakia/scope/server.rb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/jerakia/scope/server.rb b/lib/jerakia/scope/server.rb index 11ddecc..a9dcf20 100644 --- a/lib/jerakia/scope/server.rb +++ b/lib/jerakia/scope/server.rb @@ -5,7 +5,7 @@ class Jerakia::Scope module Server class Database - DataMapper.setup(:scope, "sqlite::memory:") + DataMapper.setup(:scope, "sqlite://#{Jerakia.config[:databasedir]}/scope.db") class Resource include DataMapper::Resource @@ -22,8 +22,8 @@ def self.default_repository_name property :scope, Object end - DataMapper.finalize - DataMapper.auto_upgrade! + DataMapper.repository(:scope).auto_upgrade! + DataMapper.repository(:scope).auto_migrate! end def create @@ -47,7 +47,6 @@ def find(realm, identifier) def store(realm, identifier, scope) uuid = SecureRandom.uuid entry = find(realm, identifier) - puts "Storing #{realm} #{identifier} with #{scope} entry is #{entry}" if entry.nil? Database::Resource.create(:identifier => identifier, :realm => realm, :scope => scope, :uuid => uuid) else From 81563249b0a9368dbc9a97ef3d415895b050c5fe Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Fri, 13 Jan 2017 12:06:19 +0100 Subject: [PATCH 43/45] 1.2.0-rc3 --- lib/jerakia/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jerakia/version.rb b/lib/jerakia/version.rb index d35d482..bad231a 100644 --- a/lib/jerakia/version.rb +++ b/lib/jerakia/version.rb @@ -3,5 +3,5 @@ class Jerakia # # This should be updated when a new gem is released and it is read from the gemspec file # - VERSION = '1.2.0-rc2'.freeze + VERSION = '1.2.0-rc3'.freeze end From 37edf2da66293ec4cfda4d619af954c44b9521c9 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Tue, 17 Jan 2017 18:58:13 +0100 Subject: [PATCH 44/45] bumped version to 1.2.0 --- lib/jerakia/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jerakia/version.rb b/lib/jerakia/version.rb index bad231a..2d7d732 100644 --- a/lib/jerakia/version.rb +++ b/lib/jerakia/version.rb @@ -3,5 +3,5 @@ class Jerakia # # This should be updated when a new gem is released and it is read from the gemspec file # - VERSION = '1.2.0-rc3'.freeze + VERSION = '1.2.0'.freeze end From 011adc0e2cf55aa922f15e545efa612378285ff3 Mon Sep 17 00:00:00 2001 From: Craig Dunn Date: Tue, 17 Jan 2017 19:01:25 +0100 Subject: [PATCH 45/45] added 1.2 changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ad214f..21792be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Jerakia Release Notes +## 1.2.0 + +* New feature, Jerakia Server +* New feature, PuppetDB scope handler +* This release has many additions, please see the [full release notes](http://jerakia.io/releasenotes/1_2) for complete documentation + ### 1.1.2 * Various bugfixes around resource cloning between lookups, and from the CLI (https://github.com/crayfishx/jerakia/pull/61).