yaml_servers 0.1.8

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: 7160ed4f67167f19c574026d4edda401020fe383
4
+ data.tar.gz: d576649e0f3d99bb56ab7c1f8c67d1a6e9021493
5
+ SHA512:
6
+ metadata.gz: 28a0bbfc66281a03ff397224d57746394174e52ac9c6a467d92818830513bb6fa4ec51bc1af6358dbcff710408996e96c2f3057aabaac4837a77d221046d1544
7
+ data.tar.gz: b6a7c1267140ad6941d5ae4390eddd2635a61b4d28384808e3e1bc54a6ef385455df9a3ae77d22345103712c178d1193f19fa70e7c342e4dd3e2693e893a1512
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+ source 'https://gems.reporo.com'
3
+
4
+ # Specify your gem's dependencies in yaml_servers.gemspec
5
+ gemspec
data/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # YamlServers
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/yaml_servers`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'yaml_servers'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install yaml_servers
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on Gitlab at https://gitlab.london.reporo.net/robb/yaml_servers.
36
+
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ # Don't push the gem to rubygems
4
+ ENV["gem_push"] = "false" # Utilizes feature in bundler 1.3.0
5
+
6
+ # Let bundler's release task do its job, minus the push to Rubygems,
7
+ # and after it completes, use "gem inabox" to publish the gem to our
8
+ # internal gem server.
9
+
10
+ Rake::Task["release"].enhance do
11
+ spec = Gem::Specification::load(Dir.glob("*.gemspec").first)
12
+ sh "gem inabox pkg/#{spec.name}-#{spec.version}.gem"
13
+ end
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "yaml_servers"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,3 @@
1
+ module YamlServers
2
+ VERSION = "0.1.8"
3
+ end
@@ -0,0 +1,115 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ require 'active_support'
5
+ require 'active_support/core_ext'
6
+ require 'getoptlong'
7
+ require 'resolv'
8
+ require 'yaml'
9
+ require "yaml_servers/version"
10
+
11
+ module YamlServers
12
+ def self.apply_defaults(config, defaults)
13
+ # merge defaults
14
+ config = defaults.deep_merge(config)
15
+
16
+ # apply defaults to each server
17
+ servers = {}
18
+ config["servers"].each { |hostname, server|
19
+ servers[hostname] = config["default"].deep_merge(server.is_a?(Hash) ? server : { })
20
+ servers[hostname]["is_primary"] = (hostname == config["primary"])
21
+ if servers[hostname].key?("ip") then
22
+ begin
23
+ servers[hostname]["ip"] = Resolv.new.getaddresses(server["ip"])[0]
24
+ rescue => err
25
+ STDERR.puts err
26
+ servers[hostname]["ip"] = server["ip"]
27
+ end
28
+ end
29
+ servers[hostname]["nfshome"] = File.expand_path(servers[hostname]["nfshome"]) if servers[hostname]["nfshome"]
30
+ servers[hostname]["inline"] = servers[hostname]["inline"].lines.to_a if servers[hostname]["inline"].is_a?(String)
31
+ } if config.key?("servers")
32
+
33
+ return servers
34
+ end
35
+
36
+ def self.get_yaml(file, missing_ok)
37
+ if missing_ok then
38
+ return {} unless File.file?(file)
39
+ end
40
+
41
+ begin
42
+ yaml = YAML::load(File.read(file))
43
+ rescue => err
44
+ STDERR.puts "Warning: #{file} not available"
45
+ STDERR.puts err
46
+ end
47
+
48
+ # if our config is not a hash we assume it is a list of servers
49
+ if yaml and !yaml.is_a?(Hash) then
50
+ begin
51
+ return { "servers" => Hash[yaml.to_a.map {|server| server.is_a?(Hash) ? server.flatten : [server.to_str,nil]}] }
52
+ rescue => err
53
+ STDERR.puts err
54
+ return {}
55
+ end
56
+ elsif yaml.is_a?(Hash) and !yaml.key?("servers") and !missing_ok
57
+ yaml = { "servers" => yaml }
58
+ end
59
+ return yaml ? yaml : {}
60
+ end
61
+
62
+ def self.get_config(path, defaults = {}, yaml_configs = [], localconf = "local.yaml")
63
+ # get data from local.yaml
64
+ local_config = get_yaml(File.join(path,localconf),true)
65
+
66
+ # get additional configs set as include in local config
67
+ yaml_configs = yaml_configs | (local_config.key?("include") ? local_config["include"] : [])
68
+
69
+ # collect servers from each yaml file applying defaults
70
+ servers = {}
71
+ config = {}
72
+ yaml_configs.each do |yaml|
73
+ config = get_yaml(File.join(path,yaml),false)
74
+
75
+ # merge localconf defaults over top of lower precedence defaults
76
+ config = config.deep_merge(local_config.reject { |key| key == "servers"} )
77
+
78
+ # get servers from config
79
+ servers.merge!(apply_defaults(config, defaults))
80
+ end
81
+
82
+ # build new config hash with servers collected above and local config applied
83
+ config = { "servers" => servers, "primary" => config["primary"] }
84
+ config = defaults.deep_merge(config)
85
+ config = config.deep_merge(local_config)
86
+
87
+ # we need at least one server
88
+ config["servers"] = { "default" => nil } unless config.key?("servers")
89
+
90
+ # final rendering
91
+ return apply_defaults(config, defaults)
92
+ end
93
+
94
+ def self.get_provider_opt(default = false)
95
+ opts = GetoptLong.new(
96
+ [ '--help', '-h', GetoptLong::NO_ARGUMENT ],
97
+ [ '--provider', GetoptLong::OPTIONAL_ARGUMENT ]
98
+ )
99
+ opts.quiet = true
100
+
101
+ provider = default
102
+ begin
103
+ opts.each do |opt, arg|
104
+ case opt
105
+ when '--provider'
106
+ if arg
107
+ provider=arg
108
+ end
109
+ end
110
+ end
111
+ rescue => err
112
+ end
113
+ return provider
114
+ end
115
+ end
@@ -0,0 +1,34 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'yaml_servers/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "yaml_servers"
8
+ spec.version = YamlServers::VERSION
9
+ spec.authors = ["Robert Brooks"]
10
+ spec.email = ["robert.brooks@reporo.com"]
11
+
12
+ spec.summary = %q{yaml_servers creates a hash of server configs from yaml}
13
+ spec.description = %q{yaml_servers creates a hash of server config from yaml}
14
+ spec.homepage = "https://github.com/robmbrooks/yaml_servers"
15
+
16
+ # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
17
+ # delete this section to allow pushing this gem to any host.
18
+ # if spec.respond_to?(:metadata)
19
+ # spec.metadata['allowed_push_host'] = "http://gems.reporo.com"
20
+ # else
21
+ # raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
22
+ # end
23
+
24
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
+ spec.bindir = "exe"
26
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
+ spec.require_paths = ["lib"]
28
+
29
+ spec.add_runtime_dependency 'activesupport', '~> 4.2', '>= 4.2.6'
30
+
31
+ spec.add_development_dependency "bundler", "~> 1.10"
32
+ spec.add_development_dependency "rake", "~> 10.0"
33
+ spec.add_development_dependency "geminabox"
34
+ end
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yaml_servers
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.8
5
+ platform: ruby
6
+ authors:
7
+ - Robert Brooks
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-02-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
20
+ - - '>='
21
+ - !ruby/object:Gem::Version
22
+ version: 4.2.6
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '4.2'
30
+ - - '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 4.2.6
33
+ - !ruby/object:Gem::Dependency
34
+ name: bundler
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ~>
38
+ - !ruby/object:Gem::Version
39
+ version: '1.10'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: '1.10'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '10.0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ version: '10.0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: geminabox
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - '>='
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ description: yaml_servers creates a hash of server config from yaml
76
+ email:
77
+ - robert.brooks@reporo.com
78
+ executables: []
79
+ extensions: []
80
+ extra_rdoc_files: []
81
+ files:
82
+ - .gitignore
83
+ - Gemfile
84
+ - README.md
85
+ - Rakefile
86
+ - bin/console
87
+ - bin/setup
88
+ - lib/yaml_servers.rb
89
+ - lib/yaml_servers/version.rb
90
+ - yaml_servers.gemspec
91
+ homepage: https://github.com/robmbrooks/yaml_servers
92
+ licenses: []
93
+ metadata: {}
94
+ post_install_message:
95
+ rdoc_options: []
96
+ require_paths:
97
+ - lib
98
+ required_ruby_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - '>='
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ requirements: []
109
+ rubyforge_project:
110
+ rubygems_version: 2.0.14.1
111
+ signing_key:
112
+ specification_version: 4
113
+ summary: yaml_servers creates a hash of server configs from yaml
114
+ test_files: []
115
+ has_rdoc: