protocore 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
 - data/.gitignore +14 -0
 - data/.rspec +3 -0
 - data/Gemfile +2 -0
 - data/LICENSE +22 -0
 - data/README.md +50 -0
 - data/Rakefile +2 -0
 - data/bin/protocore +4 -0
 - data/lib/protocore.rb +42 -0
 - data/lib/protocore/cli.rb +28 -0
 - data/lib/protocore/description.rb +3 -0
 - data/lib/protocore/version.rb +3 -0
 - data/protocore.gemspec +27 -0
 - data/spec/fixtures/cluster-config.yaml +55 -0
 - data/spec/fixtures/db.1.cloud-config.yaml +21 -0
 - data/spec/protocore_spec.rb +41 -0
 - data/spec/spec_helper.rb +31 -0
 - metadata +135 -0
 
    
        checksums.yaml
    ADDED
    
    | 
         @@ -0,0 +1,7 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ---
         
     | 
| 
      
 2 
     | 
    
         
            +
            SHA1:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 45d2e321de942be06a53dc49f5c817895fc8b676
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 68bb67438f039e7d027c37b23e8234783ec7242c
         
     | 
| 
      
 5 
     | 
    
         
            +
            SHA512:
         
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 0972789eab2fc5c3672aeb812eda9cf3c34473f5044c0cfe746f656f1604ba2e1fb631afdceace61105c7f6a52521d9f0718218a6d3fa722957871f35ce5dfd7
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: d18c33b0f87e50210c77d959c375ccfbfe4d2bebd4247c5bb0ae509356c1a0d3d9e9c23edfb86e5b77962fad13c24ec20bcf490447ad27fd4162b79e944d83ad
         
     | 
    
        data/.gitignore
    ADDED
    
    
    
        data/.rspec
    ADDED
    
    
    
        data/Gemfile
    ADDED
    
    
    
        data/LICENSE
    ADDED
    
    | 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            Copyright (c) 2015 Philip Vieira
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            MIT License
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
      
 6 
     | 
    
         
            +
            a copy of this software and associated documentation files (the
         
     | 
| 
      
 7 
     | 
    
         
            +
            "Software"), to deal in the Software without restriction, including
         
     | 
| 
      
 8 
     | 
    
         
            +
            without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
      
 9 
     | 
    
         
            +
            distribute, sublicense, and/or sell copies of the Software, and to
         
     | 
| 
      
 10 
     | 
    
         
            +
            permit persons to whom the Software is furnished to do so, subject to
         
     | 
| 
      
 11 
     | 
    
         
            +
            the following conditions:
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            The above copyright notice and this permission notice shall be
         
     | 
| 
      
 14 
     | 
    
         
            +
            included in all copies or substantial portions of the Software.
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         
     | 
| 
      
 17 
     | 
    
         
            +
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         
     | 
| 
      
 18 
     | 
    
         
            +
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         
     | 
| 
      
 19 
     | 
    
         
            +
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         
     | 
| 
      
 20 
     | 
    
         
            +
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         
     | 
| 
      
 21 
     | 
    
         
            +
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         
     | 
| 
      
 22 
     | 
    
         
            +
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
    
        data/README.md
    ADDED
    
    | 
         @@ -0,0 +1,50 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Protocore
         
     | 
| 
      
 2 
     | 
    
         
            +
            CoreOS cluster configuration generator
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            ## Installation
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            ```bash
         
     | 
| 
      
 7 
     | 
    
         
            +
            $ gem install protocore
         
     | 
| 
      
 8 
     | 
    
         
            +
            ```
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            ## Usage
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            ### Creating your cluster config templates
         
     | 
| 
      
 13 
     | 
    
         
            +
            In your cluster config you need a hosts key containing an array of all the hosts in your cluster.
         
     | 
| 
      
 14 
     | 
    
         
            +
            You can configure these hosts by using regular YAML inheritance. For a full example take a look at this [cluster-config.yaml](https://github.com/chatspry/protocore/tree/master/spec/fixtures/cluster-config.yaml).
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            ```yaml
         
     | 
| 
      
 17 
     | 
    
         
            +
            node: &node
         
     | 
| 
      
 18 
     | 
    
         
            +
              coreos:
         
     | 
| 
      
 19 
     | 
    
         
            +
                update:
         
     | 
| 
      
 20 
     | 
    
         
            +
                  reboot-strategy: etcd-lock
         
     | 
| 
      
 21 
     | 
    
         
            +
                  group: beta
         
     | 
| 
      
 22 
     | 
    
         
            +
            hosts:
         
     | 
| 
      
 23 
     | 
    
         
            +
              - hostname: node.1
         
     | 
| 
      
 24 
     | 
    
         
            +
                <<: *node
         
     | 
| 
      
 25 
     | 
    
         
            +
            ```
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            ### Command line client
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            #### Plan your cluster and print cloud-config for all host
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            ```bash
         
     | 
| 
      
 32 
     | 
    
         
            +
            $ protocore plan
         
     | 
| 
      
 33 
     | 
    
         
            +
            #cloud-config
         
     | 
| 
      
 34 
     | 
    
         
            +
            hostname: node.1
         
     | 
| 
      
 35 
     | 
    
         
            +
            coreos:
         
     | 
| 
      
 36 
     | 
    
         
            +
              etcd:
         
     | 
| 
      
 37 
     | 
    
         
            +
            ...
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            #cloud-config
         
     | 
| 
      
 40 
     | 
    
         
            +
            hostname: node.2
         
     | 
| 
      
 41 
     | 
    
         
            +
            coreos:
         
     | 
| 
      
 42 
     | 
    
         
            +
              etcd:
         
     | 
| 
      
 43 
     | 
    
         
            +
            ...
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            #cloud-config
         
     | 
| 
      
 46 
     | 
    
         
            +
            hostname: db.1
         
     | 
| 
      
 47 
     | 
    
         
            +
            coreos:
         
     | 
| 
      
 48 
     | 
    
         
            +
              etcd:
         
     | 
| 
      
 49 
     | 
    
         
            +
            ...
         
     | 
| 
      
 50 
     | 
    
         
            +
            ```
         
     | 
    
        data/Rakefile
    ADDED
    
    
    
        data/bin/protocore
    ADDED
    
    
    
        data/lib/protocore.rb
    ADDED
    
    | 
         @@ -0,0 +1,42 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "protocore/version"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "protocore/description"
         
     | 
| 
      
 3 
     | 
    
         
            +
            require "yaml"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module Protocore
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              def self.load(path)
         
     | 
| 
      
 8 
     | 
    
         
            +
                parse read path
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              def self.read(path)
         
     | 
| 
      
 12 
     | 
    
         
            +
                File.read(path).
         
     | 
| 
      
 13 
     | 
    
         
            +
                  gsub(/(?<=\:\s)(off)(?=\n)/, '"\1"')
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              def self.parse(yaml)
         
     | 
| 
      
 17 
     | 
    
         
            +
                hosts = YAML.load(yaml)["hosts"]
         
     | 
| 
      
 18 
     | 
    
         
            +
                raise "could not parse 'hosts' key is missing" if hosts == nil
         
     | 
| 
      
 19 
     | 
    
         
            +
                return hosts.map { |host| Host.new(host) }
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              class Host
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                attr_reader :structure
         
     | 
| 
      
 25 
     | 
    
         
            +
                attr_reader :name
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                def initialize(structure)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  raise ArgumentError, "structure cannot be nil" unless structure
         
     | 
| 
      
 29 
     | 
    
         
            +
                  @structure = structure
         
     | 
| 
      
 30 
     | 
    
         
            +
                  @name = structure["hostname"]
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                def to_yaml
         
     | 
| 
      
 34 
     | 
    
         
            +
                  @yaml ||= structure.to_yaml.
         
     | 
| 
      
 35 
     | 
    
         
            +
                    gsub(/(?<=\:\s)\"(.*)\"(?=\n)/i, '\1').
         
     | 
| 
      
 36 
     | 
    
         
            +
                    gsub(/(?<=\:\s)\'(off)\'(?=\n)/, '\1').
         
     | 
| 
      
 37 
     | 
    
         
            +
                    gsub(/^---/,"#cloud-config")
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,28 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "thor"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Protocore
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              class Cli < Thor
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                desc "plan [HOSTNAME]", "Plan your cluster and print cloud-config for all host"
         
     | 
| 
      
 8 
     | 
    
         
            +
                long_desc <<-LONGDESC
         
     | 
| 
      
 9 
     | 
    
         
            +
                  By planning you evaluate a cluster-config file and print all your host configuration to /dev/stdout
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  You can specify a specific path to your cluster-config yaml file:
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  $ protocore plan --config ./my/path/to/cluster-config.yaml
         
     | 
| 
      
 14 
     | 
    
         
            +
                LONGDESC
         
     | 
| 
      
 15 
     | 
    
         
            +
                option :config, default: "./cluster-config.yaml", aliases: ["-c"]
         
     | 
| 
      
 16 
     | 
    
         
            +
                def plan(hostname=nil)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  require "pathname"
         
     | 
| 
      
 18 
     | 
    
         
            +
                  path = Pathname.new(ENV["PWD"]).join(options[:config])
         
     | 
| 
      
 19 
     | 
    
         
            +
                  hosts = Protocore.load(path)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  hosts.select! { |host| host.name == hostname } if hostname
         
     | 
| 
      
 21 
     | 
    
         
            +
                  hosts.each do |host|
         
     | 
| 
      
 22 
     | 
    
         
            +
                    puts host.to_yaml + "\n"
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            end
         
     | 
    
        data/protocore.gemspec
    ADDED
    
    | 
         @@ -0,0 +1,27 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # coding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
            lib = File.expand_path('../lib', __FILE__)
         
     | 
| 
      
 3 
     | 
    
         
            +
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         
     | 
| 
      
 4 
     | 
    
         
            +
            require "protocore/version"
         
     | 
| 
      
 5 
     | 
    
         
            +
            require "protocore/description"
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            Gem::Specification.new do |spec|
         
     | 
| 
      
 8 
     | 
    
         
            +
              spec.name          = "protocore"
         
     | 
| 
      
 9 
     | 
    
         
            +
              spec.version       = Protocore::VERSION
         
     | 
| 
      
 10 
     | 
    
         
            +
              spec.authors       = ["Philip Vieira"]
         
     | 
| 
      
 11 
     | 
    
         
            +
              spec.email         = ["philip@chatspry.com"]
         
     | 
| 
      
 12 
     | 
    
         
            +
              spec.summary       = Protocore::DESCRIPTION
         
     | 
| 
      
 13 
     | 
    
         
            +
              spec.description   = %q{Create configuration files for your whole CoreOS cluster based on templates}
         
     | 
| 
      
 14 
     | 
    
         
            +
              spec.homepage      = "https://github.com/chatspry/protocore"
         
     | 
| 
      
 15 
     | 
    
         
            +
              spec.license       = "MIT"
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              spec.files         = `git ls-files -z`.split("\x0")
         
     | 
| 
      
 18 
     | 
    
         
            +
              spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
         
     | 
| 
      
 19 
     | 
    
         
            +
              spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
         
     | 
| 
      
 20 
     | 
    
         
            +
              spec.require_paths = ["lib"]
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              spec.add_dependency "thor"
         
     | 
| 
      
 23 
     | 
    
         
            +
              spec.add_development_dependency "bundler", "~> 1.7"
         
     | 
| 
      
 24 
     | 
    
         
            +
              spec.add_development_dependency "rake", "~> 10.0"
         
     | 
| 
      
 25 
     | 
    
         
            +
              spec.add_development_dependency "rspec"
         
     | 
| 
      
 26 
     | 
    
         
            +
              spec.add_development_dependency "pry"
         
     | 
| 
      
 27 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,55 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            etcd: &etcd
         
     | 
| 
      
 2 
     | 
    
         
            +
              discovery: https://discovery.etcd.io/xxx
         
     | 
| 
      
 3 
     | 
    
         
            +
              addr: $public_ipv4:4001
         
     | 
| 
      
 4 
     | 
    
         
            +
              peer-addr: $public_ipv4:7001
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            fleet: &fleet
         
     | 
| 
      
 7 
     | 
    
         
            +
              public-ip: $public_ipv4
         
     | 
| 
      
 8 
     | 
    
         
            +
              metadata: region=eu-west-1
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            update: &update
         
     | 
| 
      
 11 
     | 
    
         
            +
              reboot-strategy: etcd-lock
         
     | 
| 
      
 12 
     | 
    
         
            +
              group: beta
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            units: &units
         
     | 
| 
      
 15 
     | 
    
         
            +
              - name: etcd.service
         
     | 
| 
      
 16 
     | 
    
         
            +
                command: reload-or-try-restart
         
     | 
| 
      
 17 
     | 
    
         
            +
              - name: fleet.service
         
     | 
| 
      
 18 
     | 
    
         
            +
                command: reload-or-try-restart
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            coreos: &coreos
         
     | 
| 
      
 21 
     | 
    
         
            +
              etcd:
         
     | 
| 
      
 22 
     | 
    
         
            +
                <<: *etcd
         
     | 
| 
      
 23 
     | 
    
         
            +
              fleet:
         
     | 
| 
      
 24 
     | 
    
         
            +
                <<: *fleet
         
     | 
| 
      
 25 
     | 
    
         
            +
              update:
         
     | 
| 
      
 26 
     | 
    
         
            +
                <<: *update
         
     | 
| 
      
 27 
     | 
    
         
            +
              units: *units
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            ssh_authorized_keys: &keys
         
     | 
| 
      
 30 
     | 
    
         
            +
              - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzi8isXFT4oT4zfhY5K7NaETJqrfnFgS5aSN3u5v5scBozJBI09QSFQ8S85Wjz+0VM0JxU7Fcgf575nhGePcYuUixefw6JLXdHm7lXCmQ0IOjli6AebJ7H4En1wu9Qfj5BMCbzCstkEoNSsQE3gam6HHGKmC05g6WhD1QkfEx/ZpaDfHLo7xf41+TMOmeb5gyG+Bq/oDJEXK3qaSMlSrBJgmqlfgMpRRzXGAi+WFdush5hw4Zu8s48l1qRQjUeGdly6GIwi7eTC1+RzahU2/2iBwsAlEBDDcT2/SCsIJWSe+3mNbGeFdb/3jqPSJxJuOmWaXwCE/EJu/bvy5wszhyd
         
     | 
| 
      
 31 
     | 
    
         
            +
              - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBgPTcxpJwiyGsX6EXDXEpLZpPmtCL2v3d0sEZ5rL6e2tI1FO+zDI4+EYmm7HNZD+sYU1NgYoFUd6nFCZflbavLeEEPPkyB0YZa+xGpx/adZsvOyNlV7gDPBE695tfd1loKTJRa5jvNQNdOogcEbTF9VUgAp8Ign7Om5RhL99heCvyoyR1uNalw7melH09XD4e5fAEawVP0n7MTmXmaZK5E0n1WZsK5h8fcbponmUqYpAeGffeZ4hQCx4swuaipB3rwGrOt199/DoEKcCON+Qg8TfTN0n3u013sfuWlVI0CkkDd7mjolxOqHduzYS56hghlvt4UkHbunkR+ujcaZLN
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            base: &base
         
     | 
| 
      
 34 
     | 
    
         
            +
              coreos:
         
     | 
| 
      
 35 
     | 
    
         
            +
                <<: *coreos
         
     | 
| 
      
 36 
     | 
    
         
            +
              ssh_authorized_keys: *keys
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            node: &node
         
     | 
| 
      
 39 
     | 
    
         
            +
              <<: *base
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            db: &db
         
     | 
| 
      
 42 
     | 
    
         
            +
              <<: *base
         
     | 
| 
      
 43 
     | 
    
         
            +
              coreos:
         
     | 
| 
      
 44 
     | 
    
         
            +
                <<: *coreos
         
     | 
| 
      
 45 
     | 
    
         
            +
                update:
         
     | 
| 
      
 46 
     | 
    
         
            +
                  <<: *update
         
     | 
| 
      
 47 
     | 
    
         
            +
                  reboot-strategy: off
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            hosts:
         
     | 
| 
      
 50 
     | 
    
         
            +
              - hostname: node.1
         
     | 
| 
      
 51 
     | 
    
         
            +
                <<: *node
         
     | 
| 
      
 52 
     | 
    
         
            +
              - hostname: node.2
         
     | 
| 
      
 53 
     | 
    
         
            +
                <<: *node
         
     | 
| 
      
 54 
     | 
    
         
            +
              - hostname: db.1
         
     | 
| 
      
 55 
     | 
    
         
            +
                <<: *db
         
     | 
| 
         @@ -0,0 +1,21 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #cloud-config
         
     | 
| 
      
 2 
     | 
    
         
            +
            hostname: db.1
         
     | 
| 
      
 3 
     | 
    
         
            +
            coreos:
         
     | 
| 
      
 4 
     | 
    
         
            +
              etcd:
         
     | 
| 
      
 5 
     | 
    
         
            +
                discovery: https://discovery.etcd.io/xxx
         
     | 
| 
      
 6 
     | 
    
         
            +
                addr: $public_ipv4:4001
         
     | 
| 
      
 7 
     | 
    
         
            +
                peer-addr: $public_ipv4:7001
         
     | 
| 
      
 8 
     | 
    
         
            +
              fleet:
         
     | 
| 
      
 9 
     | 
    
         
            +
                public-ip: $public_ipv4
         
     | 
| 
      
 10 
     | 
    
         
            +
                metadata: region=eu-west-1
         
     | 
| 
      
 11 
     | 
    
         
            +
              update:
         
     | 
| 
      
 12 
     | 
    
         
            +
                reboot-strategy: off
         
     | 
| 
      
 13 
     | 
    
         
            +
                group: beta
         
     | 
| 
      
 14 
     | 
    
         
            +
              units:
         
     | 
| 
      
 15 
     | 
    
         
            +
              - name: etcd.service
         
     | 
| 
      
 16 
     | 
    
         
            +
                command: reload-or-try-restart
         
     | 
| 
      
 17 
     | 
    
         
            +
              - name: fleet.service
         
     | 
| 
      
 18 
     | 
    
         
            +
                command: reload-or-try-restart
         
     | 
| 
      
 19 
     | 
    
         
            +
            ssh_authorized_keys:
         
     | 
| 
      
 20 
     | 
    
         
            +
            - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzi8isXFT4oT4zfhY5K7NaETJqrfnFgS5aSN3u5v5scBozJBI09QSFQ8S85Wjz+0VM0JxU7Fcgf575nhGePcYuUixefw6JLXdHm7lXCmQ0IOjli6AebJ7H4En1wu9Qfj5BMCbzCstkEoNSsQE3gam6HHGKmC05g6WhD1QkfEx/ZpaDfHLo7xf41+TMOmeb5gyG+Bq/oDJEXK3qaSMlSrBJgmqlfgMpRRzXGAi+WFdush5hw4Zu8s48l1qRQjUeGdly6GIwi7eTC1+RzahU2/2iBwsAlEBDDcT2/SCsIJWSe+3mNbGeFdb/3jqPSJxJuOmWaXwCE/EJu/bvy5wszhyd
         
     | 
| 
      
 21 
     | 
    
         
            +
            - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBgPTcxpJwiyGsX6EXDXEpLZpPmtCL2v3d0sEZ5rL6e2tI1FO+zDI4+EYmm7HNZD+sYU1NgYoFUd6nFCZflbavLeEEPPkyB0YZa+xGpx/adZsvOyNlV7gDPBE695tfd1loKTJRa5jvNQNdOogcEbTF9VUgAp8Ign7Om5RhL99heCvyoyR1uNalw7melH09XD4e5fAEawVP0n7MTmXmaZK5E0n1WZsK5h8fcbponmUqYpAeGffeZ4hQCx4swuaipB3rwGrOt199/DoEKcCON+Qg8TfTN0n3u013sfuWlVI0CkkDd7mjolxOqHduzYS56hghlvt4UkHbunkR+ujcaZLN
         
     | 
| 
         @@ -0,0 +1,41 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "pathname"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            RSpec.describe Protocore do
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              let(:fixtures_path) { Pathname.new(__FILE__).dirname.join("fixtures") }
         
     | 
| 
      
 6 
     | 
    
         
            +
              let(:cluster_data_file_path) { fixtures_path.join("cluster-config.yaml").to_s }
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              describe ".load" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                subject(:load) { described_class.load(cluster_data_file_path) }
         
     | 
| 
      
 10 
     | 
    
         
            +
                it { expect(load).to be_kind_of Array }
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              describe ".read" do
         
     | 
| 
      
 14 
     | 
    
         
            +
                subject(:read) { described_class.read(cluster_data_file_path) }
         
     | 
| 
      
 15 
     | 
    
         
            +
                it { expect(read).to be_kind_of String }
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              describe ".parse" do
         
     | 
| 
      
 19 
     | 
    
         
            +
                subject(:parse) { described_class.parse described_class.read cluster_data_file_path }
         
     | 
| 
      
 20 
     | 
    
         
            +
                it "contains an array of Hosts" do
         
     | 
| 
      
 21 
     | 
    
         
            +
                  expect(parse).to match Array.new(3) { an_instance_of(Protocore::Host) }
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              describe Protocore::Host do
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                subject(:host) { Protocore.load(cluster_data_file_path).last }
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                let(:cloud_config_file_path) { fixtures_path.join("db.1.cloud-config.yaml").to_s }
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                describe "#to_yaml" do
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  it "contains three hosts with the correct data" do
         
     | 
| 
      
 34 
     | 
    
         
            +
                    expect(subject.to_yaml).to eq File.read(cloud_config_file_path)
         
     | 
| 
      
 35 
     | 
    
         
            +
                  end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/spec_helper.rb
    ADDED
    
    | 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "rspec"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "protocore"
         
     | 
| 
      
 3 
     | 
    
         
            +
            require "pry"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            RSpec.configure do |config|
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              config.expect_with :rspec do |expectations|
         
     | 
| 
      
 8 
     | 
    
         
            +
                expectations.include_chain_clauses_in_custom_matcher_descriptions = true
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              config.mock_with :rspec do |mocks|
         
     | 
| 
      
 12 
     | 
    
         
            +
                mocks.verify_partial_doubles = true
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              config.filter_run :focus
         
     | 
| 
      
 16 
     | 
    
         
            +
              config.run_all_when_everything_filtered = true
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              config.disable_monkey_patching!
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              config.warnings = false
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              if config.files_to_run.one?
         
     | 
| 
      
 23 
     | 
    
         
            +
                config.default_formatter = 'doc'
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              config.profile_examples = 10
         
     | 
| 
      
 27 
     | 
    
         
            +
              config.order = :random
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              Kernel.srand config.seed
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,135 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: protocore
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.1
         
     | 
| 
      
 5 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 6 
     | 
    
         
            +
            authors:
         
     | 
| 
      
 7 
     | 
    
         
            +
            - Philip Vieira
         
     | 
| 
      
 8 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 9 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 10 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2015-03-24 00:00:00.000000000 Z
         
     | 
| 
      
 12 
     | 
    
         
            +
            dependencies:
         
     | 
| 
      
 13 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 14 
     | 
    
         
            +
              name: thor
         
     | 
| 
      
 15 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 16 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 17 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 18 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 19 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 20 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 21 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 22 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 23 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 24 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 25 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 26 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 27 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 28 
     | 
    
         
            +
              name: bundler
         
     | 
| 
      
 29 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 30 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 31 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 32 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: '1.7'
         
     | 
| 
      
 34 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 35 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 36 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 37 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 38 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 39 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 40 
     | 
    
         
            +
                    version: '1.7'
         
     | 
| 
      
 41 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 42 
     | 
    
         
            +
              name: rake
         
     | 
| 
      
 43 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 44 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 45 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 46 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 47 
     | 
    
         
            +
                    version: '10.0'
         
     | 
| 
      
 48 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 49 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 50 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 51 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 52 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 53 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 54 
     | 
    
         
            +
                    version: '10.0'
         
     | 
| 
      
 55 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 56 
     | 
    
         
            +
              name: rspec
         
     | 
| 
      
 57 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 58 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 59 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 60 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 61 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 62 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 63 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 64 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 65 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 66 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 67 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 68 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 69 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 70 
     | 
    
         
            +
              name: pry
         
     | 
| 
      
 71 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 72 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 73 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 74 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 75 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 76 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 77 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 78 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 79 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 80 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 81 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 82 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 83 
     | 
    
         
            +
            description: Create configuration files for your whole CoreOS cluster based on templates
         
     | 
| 
      
 84 
     | 
    
         
            +
            email:
         
     | 
| 
      
 85 
     | 
    
         
            +
            - philip@chatspry.com
         
     | 
| 
      
 86 
     | 
    
         
            +
            executables:
         
     | 
| 
      
 87 
     | 
    
         
            +
            - protocore
         
     | 
| 
      
 88 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 89 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 90 
     | 
    
         
            +
            files:
         
     | 
| 
      
 91 
     | 
    
         
            +
            - ".gitignore"
         
     | 
| 
      
 92 
     | 
    
         
            +
            - ".rspec"
         
     | 
| 
      
 93 
     | 
    
         
            +
            - Gemfile
         
     | 
| 
      
 94 
     | 
    
         
            +
            - LICENSE
         
     | 
| 
      
 95 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 96 
     | 
    
         
            +
            - Rakefile
         
     | 
| 
      
 97 
     | 
    
         
            +
            - bin/protocore
         
     | 
| 
      
 98 
     | 
    
         
            +
            - lib/protocore.rb
         
     | 
| 
      
 99 
     | 
    
         
            +
            - lib/protocore/cli.rb
         
     | 
| 
      
 100 
     | 
    
         
            +
            - lib/protocore/description.rb
         
     | 
| 
      
 101 
     | 
    
         
            +
            - lib/protocore/version.rb
         
     | 
| 
      
 102 
     | 
    
         
            +
            - protocore.gemspec
         
     | 
| 
      
 103 
     | 
    
         
            +
            - spec/fixtures/cluster-config.yaml
         
     | 
| 
      
 104 
     | 
    
         
            +
            - spec/fixtures/db.1.cloud-config.yaml
         
     | 
| 
      
 105 
     | 
    
         
            +
            - spec/protocore_spec.rb
         
     | 
| 
      
 106 
     | 
    
         
            +
            - spec/spec_helper.rb
         
     | 
| 
      
 107 
     | 
    
         
            +
            homepage: https://github.com/chatspry/protocore
         
     | 
| 
      
 108 
     | 
    
         
            +
            licenses:
         
     | 
| 
      
 109 
     | 
    
         
            +
            - MIT
         
     | 
| 
      
 110 
     | 
    
         
            +
            metadata: {}
         
     | 
| 
      
 111 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 112 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 113 
     | 
    
         
            +
            require_paths:
         
     | 
| 
      
 114 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 115 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 116 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 117 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 118 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 119 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 120 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 121 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 122 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 123 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 124 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 125 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 126 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 127 
     | 
    
         
            +
            rubygems_version: 2.2.2
         
     | 
| 
      
 128 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 129 
     | 
    
         
            +
            specification_version: 4
         
     | 
| 
      
 130 
     | 
    
         
            +
            summary: CoreOS cluster configuration generator
         
     | 
| 
      
 131 
     | 
    
         
            +
            test_files:
         
     | 
| 
      
 132 
     | 
    
         
            +
            - spec/fixtures/cluster-config.yaml
         
     | 
| 
      
 133 
     | 
    
         
            +
            - spec/fixtures/db.1.cloud-config.yaml
         
     | 
| 
      
 134 
     | 
    
         
            +
            - spec/protocore_spec.rb
         
     | 
| 
      
 135 
     | 
    
         
            +
            - spec/spec_helper.rb
         
     |