lambom 0.1.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
+ metadata.gz: 144162d3f7b3636e039a8d09381ee380d484972f
4
+ data.tar.gz: 1d8b1ee42de69116792b4cc96c874c5ed8451e3b
5
+ SHA512:
6
+ metadata.gz: dc7a6b4ab57fd0821abc439336e2015e7a709035d82bf3e08785888866da28a549e169cd675536896580232ddf7c773150edd2d81f51cc4ab91cb74523465bd8
7
+ data.tar.gz: b6fbfe89b8e83257f24fd2c39323a06594d940cee1351b62c07b97bf66280a2d5982b121da4e3b03db01715b8425da5a55c95a846cf484abcf99ef764e81700f
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.swp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/bin/lambom ADDED
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'lambom'
4
+ require 'optparse'
5
+
6
+ # -e environment
7
+ # -j json_file
8
+ # -s server
9
+ # -l loglevel
10
+ # -k private_key_file
11
+ options = {}
12
+
13
+ OptionParser.new do |opts|
14
+ opts.banner = "Usage: lambom [options]"
15
+
16
+ opts.on("-j", "--json [JSON FILE]",
17
+ "Run server configuration with json attributes file") do |j|
18
+ options[:json_file] = j
19
+ end
20
+
21
+ opts.on("-e", "--env [ENVIRONMENT]",
22
+ "Select environment") do |e|
23
+ options[:environment] = e
24
+ end
25
+
26
+ opts.on("-s", "--server [SERVER_UUID]",
27
+ "Set server to which get configuration from riyic api") do |s|
28
+ options[:server] = s
29
+ end
30
+
31
+ opts.on("-k", "--keyfile [PRIVATE KEYFILE]",
32
+ "PEM Private keyfile to sign api requests") do |k|
33
+ options[:private_key_file] = k
34
+ end
35
+
36
+ opts.on("-l","--loglevel [LOG_LEVEL]",
37
+ "Set loglevel") do |l|
38
+ options[:loglevel] = l
39
+ end
40
+
41
+ end.parse!
42
+
43
+ out = ''
44
+ begin
45
+ out = Lambom.run(options)
46
+ rescue Exception => e
47
+ puts "Error: #{e.message}"
48
+ exit 1
49
+ end
50
+
51
+ puts "Command executed successfully"
52
+
data/lambom.gemspec ADDED
@@ -0,0 +1,20 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'lambom'
3
+ s.version = '0.1.1'
4
+ s.date = '2013-12-16'
5
+ s.summary = "Tool to apply riyic configurations"
6
+ s.description = "Riyic is a server configuration service based on chef (http://riyic.com). The lambom gem is a tool to apply, through chef-solo, your riyic configurations in your server"
7
+ s.authors = ["J. Gomez"]
8
+ s.email = 'alambike@gmail.com'
9
+ s.require_paths = ["lib"]
10
+ s.executables << 'lambom'
11
+ s.files = `git ls-files`.split($/)
12
+ s.license = 'Apache-2.0'
13
+
14
+ s.add_runtime_dependency "oj","~> 2.0"
15
+ s.add_runtime_dependency "mixlib-authentication","~> 1.3"
16
+ s.add_runtime_dependency "mixlib-shellout","~> 1.3"
17
+
18
+ s.homepage =
19
+ 'https://github.com/RIYIC/lambom'
20
+ end
data/lib/lambom/api.rb ADDED
@@ -0,0 +1,121 @@
1
+ require 'time'
2
+ require "mixlib/authentication"
3
+ require "mixlib/authentication/signedheaderauth"
4
+ require 'digest/sha1'
5
+ require 'openssl'
6
+ require 'net/http'
7
+
8
+ module Lambom
9
+ class ApiClient
10
+ API_URL = {
11
+ :production => "http://riyic.com/api/v1",
12
+ :development => "http://10.0.3.1:3000/api/v1"
13
+ }
14
+
15
+ def initialize(conf)
16
+ @server_id = conf.server or raise "Required parameter \"server\" not found"
17
+ @private_key_file = conf.private_key_file or raise "Required parameter \"private_key_file\" not found"
18
+ @env = conf.environment
19
+
20
+ @api_url = (@env == "production")?
21
+ API_URL[:production]:
22
+ API_URL[:development]
23
+ end
24
+
25
+ def get_server_config
26
+ get('servers',"#{@server_id}/generate_config");
27
+
28
+ end
29
+
30
+
31
+
32
+ def get(controller, action='',params={})
33
+ uri = build_uri(controller,action)
34
+ req = Net::HTTP::Get.new(uri.request_uri)
35
+ req.body=generate_body_string(params)
36
+ send(uri,req)
37
+
38
+ end
39
+
40
+ def post(controller, action='',params={})
41
+ uri = build_uri(controller,action)
42
+ req = Net::HTTP::Post.new(uri.request_uri)
43
+ #req.set_form_data(params)
44
+ req.body=generate_body_string(params)
45
+ send(uri,req)
46
+ end
47
+
48
+ def send(uri,req)
49
+
50
+ ## agregamos os headers da signature
51
+ headers = generate_headers(@server_id, @private_key_file, req)
52
+ puts headers.inspect if $debug
53
+
54
+ headers.each do |header,value|
55
+ req[header] = value
56
+ end
57
+
58
+ http = Net::HTTP.new(uri.host, uri.port)
59
+ #http.use_ssl = true
60
+
61
+ response = http.request(req)
62
+ puts response.body if $debug
63
+
64
+ if response.is_a?(Net::HTTPSuccess)
65
+ return response.body
66
+ else
67
+ puts "code:#{response.code}, message:#{response.message}" if $debug
68
+ raise "api error: #{response.body}"
69
+ end
70
+
71
+ #puts resp.inspect if @debug
72
+ #response = Oj.load(response.body)
73
+
74
+ #if response["status"] == "OK"
75
+ # return response
76
+ #else
77
+ # raise response.body
78
+ #end
79
+
80
+ end
81
+
82
+
83
+ private
84
+
85
+ def build_uri(controller, action='')
86
+ URI("#{@api_url}/#{controller}/#{action}")
87
+ end
88
+
89
+ def generate_body_string(h={})
90
+ r = ""
91
+
92
+ h.each do |k,v|
93
+ r << "&#{k}=#{v}"
94
+ end
95
+
96
+ r
97
+ end
98
+
99
+
100
+ def generate_headers(server_id, private_key_file, request)
101
+
102
+ args = {
103
+ :body => request.body.to_s,
104
+ :user_id => server_id.to_s,
105
+ :http_method => request.method.to_s,
106
+ :timestamp => Time.now.iso8601,
107
+ #:file => MockFile.new,
108
+ :path => request.path.to_s,
109
+ :proto_version => 1.1
110
+ }
111
+
112
+ # cargamos a private key do ficheiro
113
+ key = IO::read(private_key_file)
114
+ private_key = OpenSSL::PKey::RSA.new(key)
115
+
116
+ Mixlib::Authentication::SignedHeaderAuth.signing_object(args).sign(private_key)
117
+ end
118
+
119
+
120
+ end
121
+ end
@@ -0,0 +1,24 @@
1
+ module Riyic
2
+ module AttributeMixin
3
+ # si extendemos unha clase con este modulo os metodos fanse de clase
4
+ # si incluimos esta clase os metodos fanse de instancia
5
+
6
+ def attr_setter(*method_names)
7
+ method_names.each do |name|
8
+ send :define_method, name do |data|
9
+ instance_variable_set "@#{name}".to_sym, data
10
+ end
11
+ end
12
+ end
13
+
14
+ def varargs_setter(*method_names)
15
+
16
+ method_names.each do |name|
17
+ send :define_method, name do |*data|
18
+ instance_variable_set "@#{name}".to_sym, data
19
+ end
20
+ end
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,75 @@
1
+ require 'yaml'
2
+
3
+ module Lambom
4
+ class Config
5
+ FILE = '/etc/riyic/lambom.conf'
6
+
7
+
8
+ attr_accessor :server, :private_key_file, :environment, :loglevel
9
+ attr_reader :logdir, :logfile
10
+
11
+ def initialize
12
+ @server = nil
13
+ @private_key_file = nil
14
+ @environment = 'production'
15
+ @loglevel = 'debug'
16
+ @logdir = '/var/log/riyic'
17
+ @logfile = "solo_#{Time.now.strftime("%F_%T")}"
18
+ end
19
+
20
+ def load
21
+ # evitamos cascar si o ficheiro de configuracion non existe
22
+ return self unless File.exists?(FILE)
23
+
24
+ h = {}
25
+ begin
26
+ h = YAML.load(IO::read(FILE))
27
+ rescue Exception => e
28
+ e.to_s =~ /line (\d+) column/
29
+ raise "Error loading yaml config file #{FILE}, syntax error in line #{$1}"
30
+ end
31
+
32
+ puts h.inspect if $debug
33
+
34
+ h.each do |k,v|
35
+ if validate(k,v)
36
+ instance_variable_set "@#{k}".to_sym, v
37
+ else
38
+ raise "Invalid value '#{v}' to parameter '#{k}'"
39
+ end
40
+ end
41
+
42
+ self
43
+
44
+ end
45
+
46
+ def merge(options)
47
+ options.each do |k,v|
48
+ puts "mergeando #{k} con valor #{v} en config" if $debug
49
+ self.send("#{k}=",v) if validate(k,v)
50
+ #instance_variable_set "@#{k}".to_sym, v if validate(k,v)
51
+ end
52
+ end
53
+
54
+ def validate(parametro,valor)
55
+ case parametro.to_sym
56
+ when :server
57
+ # uuid
58
+ valor =~ /^[\d\w\-]{36}$/
59
+ when :private_key_file
60
+ #unix path
61
+ valor =~ /^[\w\s.\/\-_+%]+$/i
62
+ when :environment
63
+ #env de rails
64
+ ["production","development","test"].include?(valor)
65
+ when :loglevel
66
+ #loglevel de chef
67
+ %w{debug info}.include?(valor)
68
+ else
69
+ false
70
+ #raise "Invalid parameter #{parametro}"
71
+ end
72
+
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,62 @@
1
+ require 'yaml'
2
+ require 'ostruct'
3
+
4
+ module Lambom
5
+ class Config
6
+ FILE = '/etc/riyic/lambom.conf'
7
+
8
+ def self.load
9
+ config = ::OpenStruct.new
10
+ config.server = nil
11
+ config.private_key_file = nil
12
+ config.environment = 'production'
13
+ config.loglevel = 'debug'
14
+
15
+ # si non existe o ficheiro de configuracion devolvemos a configuracion inicializada
16
+ # pode que se complete por linea de comandos
17
+ return config unless File.exists?(FILE)
18
+
19
+ h = {}
20
+ begin
21
+ h = YAML.load(IO::read(FILE))
22
+ rescue Exception => e
23
+ e.to_s =~ /line (\d+) column/
24
+ raise "Error loading yaml config file #{FILE}, syntax error in line #{$1}"
25
+ end
26
+
27
+ puts h.inspect if $debug
28
+
29
+ h.each do |k,v|
30
+ if validate(k,v)
31
+ config.send("#{k}=", v)
32
+ else
33
+ raise "Invalid value '#{v}' to parameter '#{k}'"
34
+ end
35
+ end
36
+
37
+ config
38
+
39
+ end
40
+
41
+
42
+ def self.validate(parametro,valor)
43
+ case parametro
44
+ when "server"
45
+ # uuid
46
+ valor =~ /^[\d\w\-]{36}$/
47
+ when "private_key_file"
48
+ #unix path
49
+ valor =~ /^[\w\s.\/\-_+%]+$/i
50
+ when "environment"
51
+ #env de rails
52
+ ["production","development","test"].include?(valor)
53
+ when "loglevel"
54
+ #loglevel de chef
55
+ %w{debug info}.include?(valor)
56
+ else
57
+ false
58
+ end
59
+
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,95 @@
1
+ module Lambom
2
+ class Converger
3
+ include ShellMixin
4
+
5
+ COOKBOOKS_URL = 'http://www2.ruleyourcloud.com/cookbooks.tar.gz'
6
+
7
+ DEFAULT_CHEF_PATH = '/var/chef'
8
+
9
+ TEMP = "#{DEFAULT_CHEF_PATH}/cache"
10
+
11
+ ENV_VARS_DELETE = %w{
12
+ GEM_PATH
13
+ RUBY_VERSION
14
+ GEM_HOME
15
+ MY_RUBY_HOME
16
+ rvm_bin_path
17
+ rvm_path
18
+ rvm_gem_options
19
+ rvm_prefix
20
+ rvm_version
21
+ }
22
+
23
+ CHEF_CONF_FILE = '/etc/chef/solo.rb'
24
+
25
+ CHEF_CONF = {
26
+ development: '
27
+ cookbook_path ["/mnt/opscode/cookbooks", "/mnt/others/cookbooks", "/mnt/riyic/cookbooks"]
28
+ '
29
+ }
30
+
31
+ def initialize(conf, json)
32
+ @conf = conf
33
+ @attributes_json = json
34
+ end
35
+
36
+
37
+ attr_reader :conf,:attributes_json
38
+
39
+ def run
40
+ preparar_entorno
41
+
42
+ descargar_cookbooks
43
+
44
+ ejecutar_converger
45
+ end
46
+
47
+
48
+ private
49
+
50
+ def ejecutar_converger
51
+
52
+ filename = "#{TEMP}/#{conf.server}.json"
53
+ file = File.new(filename,"w")
54
+ file.write(attributes_json)
55
+ file.close
56
+
57
+ run_cmd('/usr/bin/chef-solo',
58
+ '--log_level', conf.loglevel,
59
+ '--logfile', "#{conf.logdir}/#{conf.logfile}",
60
+ '-j', filename)
61
+
62
+ end
63
+
64
+ def preparar_entorno
65
+ ENV_VARS_DELETE.each {|v| ENV.delete(v)}
66
+ ENV["PATH"] = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
67
+
68
+ #creamos directorio de logs
69
+ FileUtils.mkdir_p(conf.logdir) unless Dir.exists?(conf.logdir)
70
+ File.chmod(0750, conf.logdir)
71
+
72
+ #creamos o directorio cache de chef
73
+ FileUtils.mkdir_p(TEMP) unless Dir.exists?(TEMP)
74
+ File.chmod(0750,TEMP)
75
+
76
+ # establecemos o archivo de configuracion de chef segun o entorno
77
+ switch_chef_conf(conf.environment)
78
+ end
79
+
80
+ def descargar_cookbooks
81
+ unless (conf.environment == 'development')
82
+ # aqui podemos meter unha ejecucion de berkshelf para descargar os cookbooks necesarios
83
+ run_cmd('curl','-o','/tmp/cookbooks.tar.gz', '-L',COOKBOOKS_URL)
84
+ FileUtils.mkdir_p(DEFAULT_CHEF_PATH) unless Dir.exists?(DEFAULT_CHEF_PATH)
85
+ run_cmd('tar','xzf','/tmp/cookbooks.tar.gz','--no-same-owner','-C', DEFAULT_CHEF_PATH);
86
+ end
87
+ end
88
+
89
+ def switch_chef_conf(env)
90
+ if CHEF_CONF.has_key?(env)
91
+ IO.write(CHEF_CONF_FILE,CHEF_CONF[env])
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,14 @@
1
+ require 'mixlib/shellout'
2
+
3
+ module Lambom
4
+ module ShellMixin
5
+ def run_cmd(*cmd)
6
+ puts "RUN_CMD: #{cmd}" if $debug
7
+ com = Mixlib::ShellOut.new(cmd)
8
+ com.run_command
9
+ com.error!
10
+ puts "salida: #{com.stdout}" if $debug
11
+ com.stdout
12
+ end
13
+ end
14
+ end
data/lib/lambom.rb ADDED
@@ -0,0 +1,47 @@
1
+ require "oj"
2
+ require 'time'
3
+ require "mixlib/authentication"
4
+ require "mixlib/authentication/signedheaderauth"
5
+ require 'digest/sha1'
6
+ require 'openssl'
7
+ require 'net/http'
8
+
9
+ require "lambom/shell_mixin"
10
+ require "lambom/config"
11
+ require "lambom/api"
12
+ require "lambom/converger"
13
+
14
+
15
+ module Lambom
16
+ $debug = false
17
+
18
+ class << self
19
+ def run(argv)
20
+ puts "DEBUG ENABLED" if $debug
21
+ puts "args recibidos #{argv.inspect}" if $debug
22
+
23
+ #cargar config
24
+ conf = Lambom::Config.new.load
25
+
26
+ # sobreescribimos a configuracion ca linea de comandos
27
+ conf.merge(argv)
28
+
29
+ attributes = {}
30
+ # descargar atributos do servidor (a menos que nos pasen json_file => file.json)
31
+ if argv.has_key?(:json_file)
32
+ json_attributes = IO.read(argv[:json_file])
33
+ else
34
+ json_attributes = Lambom::ApiClient.new(conf).get_server_config
35
+ end
36
+
37
+ # executar converxencia
38
+ Lambom::Converger.new(conf,json_attributes).run
39
+ end
40
+
41
+
42
+ def enable_debug
43
+ $debug = true
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,27 @@
1
+ require "lambom"
2
+ require "lambom/api"
3
+
4
+ describe Lambom::ApiClient do
5
+ conf = Lambom::Config.new.load
6
+
7
+ conf.merge(environment: 'development',
8
+ server: '61a75d44-9856-4e64-a269-f95a232c9bcd',
9
+ private_key_file: "spec/private_key.pem")
10
+
11
+ api = Lambom::ApiClient.new(conf)
12
+
13
+ it "must be an ApiClient object" do
14
+ expect(api).to be_an_instance_of(Lambom::ApiClient)
15
+ end
16
+
17
+ describe "getAttributes" do
18
+ it "must connect to riyic api" do
19
+ expect(api.get_server_config).to match(/^\{.+\}$/)
20
+ end
21
+ it "must fail to connect to api" do
22
+ conf.merge(server: "61a75d44-9856-4e64-a269-111111111111")
23
+ api2 = Lambom::ApiClient.new(conf)
24
+ expect{api2.get_server_config}.to raise_error(/api error/)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,60 @@
1
+ require "lambom"
2
+ require "lambom/config"
3
+
4
+ describe Lambom::Config do
5
+ Lambom.enable_debug
6
+
7
+ describe "load config" do
8
+ Lambom::Config::FILE = 'spec/test_config.yml'
9
+ config = Lambom::Config.new.load
10
+
11
+ it "must load config file if exists" do
12
+ expect(config).to be_an_instance_of(Lambom::Config)
13
+ end
14
+ it "must have test file values" do
15
+ expect(config.server).to eq("1ca71cd6-08c4-4855-9381-2f41aeffe59c")
16
+ expect(config.environment).to eq("development")
17
+ expect(config.private_key_file).to eq("/etc/riyic/private.pem")
18
+ expect(config.loglevel).to eq("debug")
19
+ end
20
+
21
+ it "must have merged values" do
22
+ merge_key_file = 'test.pem'
23
+ merge_server = "1ca71cd6-08c4-4855-9381-111111111111"
24
+ merge_env = 'test'
25
+ merge_loglevel = 'info'
26
+
27
+ options = {
28
+ private_key_file: merge_key_file,
29
+ server: merge_server,
30
+ environment: merge_env,
31
+ loglevel: merge_loglevel
32
+ }
33
+
34
+ config.merge(options)
35
+ expect(config.private_key_file).to eq(merge_key_file)
36
+ expect(config.server).to eq(merge_server)
37
+ expect(config.environment).to eq(merge_env)
38
+ expect(config.loglevel).to eq(merge_loglevel)
39
+ end
40
+ end
41
+
42
+ describe "loading bad yaml file" do
43
+ it "must raise error if config file has bad yaml format" do
44
+ expect {
45
+ Lambom::Config::FILE = 'spec/test_config_bad_yaml.yml'
46
+ Lambom::Config.new.load
47
+ }.to raise_error(/yaml/)
48
+ end
49
+ end
50
+
51
+ describe "bad options in config file" do
52
+ it "must raise error if config options not validate" do
53
+ expect {
54
+ Lambom::Config::FILE = 'spec/test_config_bad_options.yml'
55
+ Lambom::Config.new.load
56
+ }.to raise_error(/Invalid value/)
57
+ end
58
+ end
59
+ end
60
+
@@ -0,0 +1,30 @@
1
+ require "lambom"
2
+ require "lambom/converger"
3
+
4
+ describe Lambom::Converger do
5
+ conf = Lambom::Config.new
6
+
7
+ conf.merge(environment: 'test',
8
+ server: '61a75d44-9856-4e64-a269-f95a232c9bcd',
9
+ private_key_file: "spec/private_key.pem")
10
+ json = <<EOF
11
+ {
12
+ "riyic": {
13
+ "dockerized": "no",
14
+ "updates_check_interval": "never",
15
+ "env": "development"
16
+ },
17
+ "run_list": [
18
+ "recipe[riyic::default]"
19
+ ]
20
+ }
21
+ EOF
22
+
23
+ it "must run convergence tool" do
24
+ expect{
25
+ Lambom::Converger.new(conf, json).run
26
+ }.not_to raise_error
27
+ end
28
+ end
29
+
30
+
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpAIBAAKCAQEA5CLLZToKmeqMnkcdE5ibIB3dh28nEeKF07XOEq9MrxKwHtNX
3
+ D5oMS9eyvQxesbolXYDUCDSQmFYA4jEh8CJBE0sJsgGXi1/gkbSbTdAujH4LHAPS
4
+ RiFS9m5yQVHPHmf7FK/EKoNTEWokiOVf3UayZ8oKolOLqno6BAqDYPvp7g4+5G1s
5
+ LiblxZVuS/l4Z4OqkhIKJBygjMHXkFk5PiCG/NeM6hJ+in5RXdWJK7lorJooRUY5
6
+ 7YoNRN0bkiDyPJLxGE19hHT42oghmdXKKi4h8FUkA+BCQ7GuDKqmtltCDFX6ypIn
7
+ Q2SGlDC6UIyGkmbKbSEfXZdz5mRpGGcAzuY+dwIDAQABAoIBAFGRPzfKMNAnVG+i
8
+ 7Xp8Lbql8vbhfw6d90tizXNQyhIulFnxJkelxI+5Z2bAbXsOGx37WdQ1Nx3AYkB9
9
+ YK0DElFbmvPSLeTfOuPdt0lzDbGdv0sc8qmwcIE7rA4+udcdRmB3F6Q7oA+x664m
10
+ lMgA5vjE/Fhdlqo1WVjoiWC7sUAzmtZrRq/U1NBmMcCnw97/JXzTpeDVY3K1g5vl
11
+ viF+q7XBz0AtLsMIavrzx9AwSBZC+99GWuxU02zTVfz8OeZwrQJLCALQfBYfGsoW
12
+ YvMEt4o5EDBnVX8i3bkrqFnHwbzBGbgXaf7e6TksH7PkMDdw0HOlGCkmZxqg5yAg
13
+ yo5Hl4ECgYEA+MCytVGSJ5xEJgWGMpSHR5yvdU6xh4aqbYqINvD4NqSlh/b3YWVN
14
+ rn0j5M+PzUc+avNGRkcGYDYlWs58lDT250r7Juc2KJaPqMXoMJDmye6+AjD/vrEh
15
+ qXTPeKdjqdmRCnG33C4J5BVkykxa1kqi1TLk9BijFvwkGsl0X+sGW38CgYEA6shT
16
+ 37tUc6NMMIOz0DHfDtWlU6uaxbqQ1WyWE/cDordQ0UYAd8dUUWHjKy19KQC5rFb1
17
+ FwTS3V9nOaMxGLDg9e3sDZHgsZpJ66ks/6szIEFjGgdpJV66tFBvDBZOyHt05Tvp
18
+ Cpl+583WPc3JorGCq3+/Di8ISazlIGlBsqSSeQkCgYAzTxwNhmvNO9Bav1z05eoZ
19
+ fVo7qiW4PLC+s4pxOrcYHlH+f5R7RHgHe8yBj8arovxe9xsRt+i6w7Bk0J6lu18K
20
+ Sk8PsTVcneG4AEpqahkQoewTa6P043h8CZoZ2v0VtcjTDK3N/rkPkNIfYCyEcxSv
21
+ QTY0mzhYr12LIO6eMk43ZQKBgQCpgcCsgz9RzdAwJqYn5hm5SB547ihsIWp37FHe
22
+ UDTbwaYjsXqc/9iseRPeFJWMiO2Es7N3zw++rCaGwn+r5+hDJmeK1It5Ln+4GQhX
23
+ /m6HFy5JmJgdVutNS9Ug0OpIbHnVFxAFixTInx/St0SgpbBFyZFS2DoPlzhF0jiQ
24
+ laj6oQKBgQDnKVnTvJimmztji2/nw24dVX0peHM0puuNfkpZg1MjNf7/kMiLl2ur
25
+ P3S8ohb4voe04gyPGzh6Cy0g10silYFCJJr1+gXrn/e/WdtHRirp+0DlE4sH3xQ/
26
+ F7JtKg840udKVxgKUdoS4POsXnMa6AQzW9Hc2vl/LwpdNACcaiGjEg==
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,17 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ config.filter_run :focus
11
+
12
+ # Run specs in random order to surface order dependencies. If you find an
13
+ # order dependency and want to debug it, you can fix the order by providing
14
+ # the seed, which is printed after each run.
15
+ # --seed 1234
16
+ config.order = 'random'
17
+ end
@@ -0,0 +1,4 @@
1
+ server: 1ca71cd6-08c4-4855-9381-2f41aeffe59c
2
+ environment: development
3
+ private_key_file: /etc/riyic/private.pem
4
+ loglevel: debug
@@ -0,0 +1,4 @@
1
+ server: 1casfdsfs71cd6-08c4-4855-9381-2f41aeffe59c
2
+ environment: devefdsdfdlopment
3
+ private_key_file: /etc/riyic/private.pem
4
+ loglevel: debugfsd
@@ -0,0 +1,4 @@
1
+ servedfa 1casfdsfs71cd6-08c4-4855-9381-2f41aeffe59c
2
+ environment: devefdsdfdlopment
3
+ private_key_file: /etc/riyic/private.pem
4
+ loglevel: debugfsd
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lambom
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - J. Gomez
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: oj
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mixlib-authentication
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mixlib-shellout
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ description: Riyic is a server configuration service based on chef (http://riyic.com).
56
+ The lambom gem is a tool to apply, through chef-solo, your riyic configurations
57
+ in your server
58
+ email: alambike@gmail.com
59
+ executables:
60
+ - lambom
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - .gitignore
65
+ - .rspec
66
+ - bin/lambom
67
+ - lambom.gemspec
68
+ - lib/lambom.rb
69
+ - lib/lambom/api.rb
70
+ - lib/lambom/attribute_mixin.rb
71
+ - lib/lambom/config.rb
72
+ - lib/lambom/config_static.rb
73
+ - lib/lambom/converger.rb
74
+ - lib/lambom/shell_mixin.rb
75
+ - spec/api_client_spec.rb
76
+ - spec/config_spec.rb
77
+ - spec/converger_spec.rb
78
+ - spec/private_key.pem
79
+ - spec/spec_helper.rb
80
+ - spec/test_config.yml
81
+ - spec/test_config_bad_options.yml
82
+ - spec/test_config_bad_yaml.yml
83
+ homepage: https://github.com/RIYIC/lambom
84
+ licenses:
85
+ - Apache-2.0
86
+ metadata: {}
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 2.1.11
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: Tool to apply riyic configurations
107
+ test_files: []