minke 1.10.0 → 1.11.0
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 +8 -8
 - data/lib/minke/config/config.rb +14 -14
 - data/lib/minke/config/reader.rb +7 -7
 - data/lib/minke/docker/consul.rb +57 -0
 - data/lib/minke/docker/docker_compose.rb +34 -21
 - data/lib/minke/docker/docker_runner.rb +38 -23
 - data/lib/minke/docker/health_check.rb +61 -0
 - data/lib/minke/docker/network.rb +23 -0
 - data/lib/minke/docker/service_discovery.rb +17 -2
 - data/lib/minke/helpers/copy.rb +17 -0
 - data/lib/minke/helpers/error.rb +12 -0
 - data/lib/minke/helpers/logger.rb +17 -0
 - data/lib/minke/helpers/rake.rb +11 -0
 - data/lib/minke/{docker/system_runner.rb → helpers/shell.rb} +5 -5
 - data/lib/minke/rake/app.rake +61 -47
 - data/lib/minke/rake/config.rake +1 -1
 - data/lib/minke/scripts/minke.sh +1 -1
 - data/lib/minke/tasks/build.rb +4 -6
 - data/lib/minke/tasks/cucumber.rb +14 -10
 - data/lib/minke/tasks/fetch.rb +5 -4
 - data/lib/minke/tasks/run.rb +10 -8
 - data/lib/minke/tasks/task.rb +55 -81
 - data/lib/minke/tasks/task_runner.rb +33 -0
 - data/lib/minke/tasks/test.rb +1 -1
 - data/lib/minke/version.rb +1 -1
 - data/lib/minke.rb +9 -2
 - data/minke.gemspec +1 -0
 - metadata +25 -4
 - data/lib/minke/helpers/helper.rb +0 -68
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,15 +1,15 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            !binary "U0hBMQ==":
         
     | 
| 
       3 
3 
     | 
    
         
             
              metadata.gz: !binary |-
         
     | 
| 
       4 
     | 
    
         
            -
                 
     | 
| 
      
 4 
     | 
    
         
            +
                ZjYxZTYwNDkzZDQwOTQ0OTJhYjRjZjBmYzViNDE5OWQ0YmYxOTNhMg==
         
     | 
| 
       5 
5 
     | 
    
         
             
              data.tar.gz: !binary |-
         
     | 
| 
       6 
     | 
    
         
            -
                 
     | 
| 
      
 6 
     | 
    
         
            +
                NGFhMWY0MTY5MDBlMGQ1ZDM1YzVmNjUyNjQwYWE2MmI5ZjRkNzAyZA==
         
     | 
| 
       7 
7 
     | 
    
         
             
            SHA512:
         
     | 
| 
       8 
8 
     | 
    
         
             
              metadata.gz: !binary |-
         
     | 
| 
       9 
     | 
    
         
            -
                 
     | 
| 
       10 
     | 
    
         
            -
                 
     | 
| 
       11 
     | 
    
         
            -
                 
     | 
| 
      
 9 
     | 
    
         
            +
                NDRkZmEwNzMzZDI2MjM4ZmFiMDJjZjM4ZjEyMDI3MTkwMjE0NmUyMGYwYmU3
         
     | 
| 
      
 10 
     | 
    
         
            +
                M2Y1NjU4NjRhMjllNDdlYTMyODJjM2NlNDQ5N2ZmNTQyODUxNzRhY2ViOGQ3
         
     | 
| 
      
 11 
     | 
    
         
            +
                NDc3MGQ3NjA2YWMxYjg5NzQ5MWY0Mzc1NGI5NGE3MzhmYzBmZTA=
         
     | 
| 
       12 
12 
     | 
    
         
             
              data.tar.gz: !binary |-
         
     | 
| 
       13 
     | 
    
         
            -
                 
     | 
| 
       14 
     | 
    
         
            -
                 
     | 
| 
       15 
     | 
    
         
            -
                 
     | 
| 
      
 13 
     | 
    
         
            +
                YTExMTAzZDUxNmRmNjQ2MzZhODM2Y2UxMzQzZTY3MzQxZjEyN2E4ZmMxMDMz
         
     | 
| 
      
 14 
     | 
    
         
            +
                ZjljNWFjNWRhOWRmZTY2YWUwMTFkZTRjMjczNDBiMGUxZDRlNzJiNmEzYmIw
         
     | 
| 
      
 15 
     | 
    
         
            +
                MjJlM2E3ODVmODk4ZTE2ZTY4ZDBiMTVhYjJhYmQ3N2Y2MDRhZmQ=
         
     | 
    
        data/lib/minke/config/config.rb
    CHANGED
    
    | 
         @@ -200,6 +200,20 @@ module Minke 
     | 
|
| 
       200 
200 
     | 
    
         
             
                ##
         
     | 
| 
       201 
201 
     | 
    
         
             
                # Task encapsulates the configuration for the various rake tasks like build, run, etc.
         
     | 
| 
       202 
202 
     | 
    
         
             
                class Task
         
     | 
| 
      
 203 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 204 
     | 
    
         
            +
                  # consul_loader will specify that the given config file is loaded into Consul.
         
     | 
| 
      
 205 
     | 
    
         
            +
                  # instance of Minke::Config::ConsulLoader
         
     | 
| 
      
 206 
     | 
    
         
            +
                  #
         
     | 
| 
      
 207 
     | 
    
         
            +
                  # [Optional]
         
     | 
| 
      
 208 
     | 
    
         
            +
                  attr_accessor :consul_loader
         
     | 
| 
      
 209 
     | 
    
         
            +
             
     | 
| 
      
 210 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 211 
     | 
    
         
            +
                  # health_check is the string representation of a url to check before continuing with the rest of the
         
     | 
| 
      
 212 
     | 
    
         
            +
                  # task a successfull 200 response from the endpoint is required to contine.
         
     | 
| 
      
 213 
     | 
    
         
            +
                  #
         
     | 
| 
      
 214 
     | 
    
         
            +
                  # [Optional]
         
     | 
| 
      
 215 
     | 
    
         
            +
                  attr_accessor :health_check
         
     | 
| 
      
 216 
     | 
    
         
            +
             
     | 
| 
       203 
217 
     | 
    
         
             
                  ##
         
     | 
| 
       204 
218 
     | 
    
         
             
                  # pre tasks will run before the main task executes.
         
     | 
| 
       205 
219 
     | 
    
         
             
                  # instance of Minke::Config::TaskRunSettings
         
     | 
| 
         @@ -239,20 +253,6 @@ module Minke 
     | 
|
| 
       239 
253 
     | 
    
         
             
                  # [Optional]
         
     | 
| 
       240 
254 
     | 
    
         
             
                  attr_accessor :tasks
         
     | 
| 
       241 
255 
     | 
    
         | 
| 
       242 
     | 
    
         
            -
                  ##
         
     | 
| 
       243 
     | 
    
         
            -
                  # consul_loader will specify that the given config file is loaded into Consul.
         
     | 
| 
       244 
     | 
    
         
            -
                  # instance of Minke::Config::ConsulLoader
         
     | 
| 
       245 
     | 
    
         
            -
                  #
         
     | 
| 
       246 
     | 
    
         
            -
                  # [Optional]
         
     | 
| 
       247 
     | 
    
         
            -
                  attr_accessor :consul_loader
         
     | 
| 
       248 
     | 
    
         
            -
             
     | 
| 
       249 
     | 
    
         
            -
                  ##
         
     | 
| 
       250 
     | 
    
         
            -
                  # health_check is the string representation of a url to check before continuing with the rest of the
         
     | 
| 
       251 
     | 
    
         
            -
                  # task a successfull 200 response from the endpoint is required to contine.
         
     | 
| 
       252 
     | 
    
         
            -
                  #
         
     | 
| 
       253 
     | 
    
         
            -
                  # [Optional]
         
     | 
| 
       254 
     | 
    
         
            -
                  attr_accessor :health_check
         
     | 
| 
       255 
     | 
    
         
            -
             
     | 
| 
       256 
256 
     | 
    
         
             
                  ##
         
     | 
| 
       257 
257 
     | 
    
         
             
                  # copy is an array of Copy instances which will be copied before the task continues.
         
     | 
| 
       258 
258 
     | 
    
         
             
                  # instance of Minke::Config::Copy
         
     | 
    
        data/lib/minke/config/reader.rb
    CHANGED
    
    | 
         @@ -49,18 +49,18 @@ module Minke 
     | 
|
| 
       49 
49 
     | 
    
         | 
| 
       50 
50 
     | 
    
         
             
                  def read_task_section section, docker_config
         
     | 
| 
       51 
51 
     | 
    
         
             
                    Task.new.tap do |t|
         
     | 
| 
       52 
     | 
    
         
            -
                      t. 
     | 
| 
       53 
     | 
    
         
            -
                      t. 
     | 
| 
       54 
     | 
    
         
            -
                      t. 
     | 
| 
      
 52 
     | 
    
         
            +
                      t.consul_loader = read_consul_loader_section section['consul_loader'] unless section['consul_loader'] == nil
         
     | 
| 
      
 53 
     | 
    
         
            +
                      t.health_check  = read_url section['health_check']  unless section['health_check'] == nil
         
     | 
| 
      
 54 
     | 
    
         
            +
                      t.docker        = read_docker_section section['docker'] unless section['docker'] == nil
         
     | 
| 
      
 55 
     | 
    
         
            +
                      t.pre           = read_pre_post_section section['pre']  unless section['pre'] == nil
         
     | 
| 
      
 56 
     | 
    
         
            +
                      t.post          = read_pre_post_section section['post'] unless section['post'] == nil
         
     | 
| 
       55 
57 
     | 
    
         
             
                    end
         
     | 
| 
       56 
58 
     | 
    
         
             
                  end
         
     | 
| 
       57 
59 
     | 
    
         | 
| 
       58 
60 
     | 
    
         
             
                  def read_pre_post_section section
         
     | 
| 
       59 
61 
     | 
    
         
             
                    TaskRunSettings.new.tap do |tr|
         
     | 
| 
       60 
     | 
    
         
            -
                      tr.tasks         = section['tasks'] 
     | 
| 
       61 
     | 
    
         
            -
                      tr.copy          = read_copy_section section['copy'] 
     | 
| 
       62 
     | 
    
         
            -
                      tr.consul_loader = read_consul_loader_section section['consul_loader'] unless section['consul_loader'] == nil
         
     | 
| 
       63 
     | 
    
         
            -
                      tr.health_check  = read_url section['health_check']                    unless section['health_check'] == nil
         
     | 
| 
      
 62 
     | 
    
         
            +
                      tr.tasks         = section['tasks']                  unless section['tasks'] == nil
         
     | 
| 
      
 63 
     | 
    
         
            +
                      tr.copy          = read_copy_section section['copy'] unless section['copy'] == nil
         
     | 
| 
       64 
64 
     | 
    
         
             
                    end
         
     | 
| 
       65 
65 
     | 
    
         
             
                  end
         
     | 
| 
       66 
66 
     | 
    
         | 
| 
         @@ -0,0 +1,57 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Minke
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Docker
         
     | 
| 
      
 3 
     | 
    
         
            +
                class Consul
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def initialize health_check, service_discovery, consul_loader, docker_runner, network, project_name
         
     | 
| 
      
 5 
     | 
    
         
            +
                    @health_check = health_check
         
     | 
| 
      
 6 
     | 
    
         
            +
                    @service_discovery = service_discovery
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @consul_loader = consul_loader
         
     | 
| 
      
 8 
     | 
    
         
            +
                    @docker_runner = docker_runner
         
     | 
| 
      
 9 
     | 
    
         
            +
                    @network = network
         
     | 
| 
      
 10 
     | 
    
         
            +
                    @project_name = project_name
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 14 
     | 
    
         
            +
                  # start_and_load_data config
         
     | 
| 
      
 15 
     | 
    
         
            +
                  def start_and_load_data consul_config
         
     | 
| 
      
 16 
     | 
    
         
            +
                    start
         
     | 
| 
      
 17 
     | 
    
         
            +
                    wait_for_startup consul_config.url
         
     | 
| 
      
 18 
     | 
    
         
            +
                    load_data consul_config.url, consul_config.config_file
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 22 
     | 
    
         
            +
                  # stop consul
         
     | 
| 
      
 23 
     | 
    
         
            +
                  def stop
         
     | 
| 
      
 24 
     | 
    
         
            +
                    @docker_runner.stop_container @container
         
     | 
| 
      
 25 
     | 
    
         
            +
                    @docker_runner.delete_container @container
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  private
         
     | 
| 
      
 29 
     | 
    
         
            +
                  def start
         
     | 
| 
      
 30 
     | 
    
         
            +
                    @docker_runner.pull_image 'progrium/consul:latest' unless @docker_runner.find_image 'progrium/consul:latest'
         
     | 
| 
      
 31 
     | 
    
         
            +
                    @container, success = @docker_runner.create_and_run_container(
         
     | 
| 
      
 32 
     | 
    
         
            +
                      {
         
     | 
| 
      
 33 
     | 
    
         
            +
                        :image   => 'progrium/consul',
         
     | 
| 
      
 34 
     | 
    
         
            +
                        :network => @network,
         
     | 
| 
      
 35 
     | 
    
         
            +
                        :command => '-server -bootstrap -ui-dir /ui',
         
     | 
| 
      
 36 
     | 
    
         
            +
                        :name    => "/#{@project_name}_consul_1",
         
     | 
| 
      
 37 
     | 
    
         
            +
                        :deamon  => true
         
     | 
| 
      
 38 
     | 
    
         
            +
                      }
         
     | 
| 
      
 39 
     | 
    
         
            +
                    )
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                    puts @container
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
      
 43 
     | 
    
         
            +
                  
         
     | 
| 
      
 44 
     | 
    
         
            +
                  def wait_for_startup url
         
     | 
| 
      
 45 
     | 
    
         
            +
                    server = @service_discovery.build_address(url)
         
     | 
| 
      
 46 
     | 
    
         
            +
                    @health_check.wait_for_HTTPOK "#{server}/v1/status/leader"
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 50 
     | 
    
         
            +
                  # Loads consul data into the given server
         
     | 
| 
      
 51 
     | 
    
         
            +
                  def load_data url, config_file
         
     | 
| 
      
 52 
     | 
    
         
            +
                    server = @service_discovery.build_address(url)
         
     | 
| 
      
 53 
     | 
    
         
            +
                    @consul_loader.load_config config_file, server
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
              end
         
     | 
| 
      
 57 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,23 +1,25 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Minke
         
     | 
| 
       2 
2 
     | 
    
         
             
              module Docker
         
     | 
| 
       3 
3 
     | 
    
         
             
                class DockerComposeFactory
         
     | 
| 
       4 
     | 
    
         
            -
                  def initialize system_runner, project_name
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def initialize system_runner, project_name, docker_network = nil
         
     | 
| 
       5 
5 
     | 
    
         
             
                    @project_name = project_name
         
     | 
| 
       6 
6 
     | 
    
         
             
                    @system_runner = system_runner
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @docker_network = docker_network
         
     | 
| 
       7 
8 
     | 
    
         
             
                  end
         
     | 
| 
       8 
9 
     | 
    
         | 
| 
       9 
10 
     | 
    
         
             
                  def create compose_file
         
     | 
| 
       10 
     | 
    
         
            -
                    Minke::Docker::DockerCompose.new compose_file, @system_runner, @project_name
         
     | 
| 
      
 11 
     | 
    
         
            +
                    Minke::Docker::DockerCompose.new compose_file, @system_runner, @project_name, @docker_network 
         
     | 
| 
       11 
12 
     | 
    
         
             
                  end
         
     | 
| 
       12 
13 
     | 
    
         
             
                end
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
       14 
15 
     | 
    
         
             
                class DockerCompose
         
     | 
| 
       15 
16 
     | 
    
         
             
                  @compose_file = nil
         
     | 
| 
       16 
17 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
                  def initialize compose_file, system_runner, project_name
         
     | 
| 
      
 18 
     | 
    
         
            +
                  def initialize compose_file, system_runner, project_name, docker_network = nil
         
     | 
| 
       18 
19 
     | 
    
         
             
                    @project_name = project_name
         
     | 
| 
       19 
20 
     | 
    
         
             
                    @compose_file = compose_file
         
     | 
| 
       20 
21 
     | 
    
         
             
                    @system_runner = system_runner
         
     | 
| 
      
 22 
     | 
    
         
            +
                    @docker_network = docker_network ||= 'bridge'
         
     | 
| 
       21 
23 
     | 
    
         
             
                  end
         
     | 
| 
       22 
24 
     | 
    
         | 
| 
       23 
25 
     | 
    
         
             
                  ##
         
     | 
| 
         @@ -45,33 +47,44 @@ module Minke 
     | 
|
| 
       45 
47 
     | 
    
         
             
                    execute_command 'logs -f'
         
     | 
| 
       46 
48 
     | 
    
         
             
                  end
         
     | 
| 
       47 
49 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
                  ##
         
     | 
| 
       49 
     | 
    
         
            -
                  # return the local address and port of a containers private port
         
     | 
| 
       50 
     | 
    
         
            -
                  def public_address container, private_port
         
     | 
| 
       51 
     | 
    
         
            -
                    @system_runner.execute_and_return "docker-compose -f #{@compose_file} port #{container} #{private_port}"
         
     | 
| 
       52 
     | 
    
         
            -
                  end
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
50 
     | 
    
         
             
                  def execute_command command
         
     | 
| 
       55 
     | 
    
         
            -
                     
     | 
| 
       56 
     | 
    
         
            -
                      directory = create_compose_network_file
         
     | 
| 
      
 51 
     | 
    
         
            +
                    hash = create_compose
         
     | 
| 
       57 
52 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
                       
     | 
| 
       60 
     | 
    
         
            -
                    else
         
     | 
| 
       61 
     | 
    
         
            -
                      @system_runner.execute "docker-compose -f #{@compose_file} -p #{@project_name} #{command}"
         
     | 
| 
      
 53 
     | 
    
         
            +
                    unless @docker_network == nil
         
     | 
| 
      
 54 
     | 
    
         
            +
                      hash.merge!(create_compose_network)
         
     | 
| 
       62 
55 
     | 
    
         
             
                    end
         
     | 
| 
       63 
     | 
    
         
            -
                  end
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
                  def create_compose_network_file
         
     | 
| 
       66 
     | 
    
         
            -
                    content = { 'version' => '2'.to_s, 'networks' => {'default' => { 'external' => { 'name' => ENV['DOCKER_NETWORK'] } } } }
         
     | 
| 
       67 
56 
     | 
    
         | 
| 
       68 
57 
     | 
    
         
             
                    directory = @system_runner.mktmpdir
         
     | 
| 
       69 
58 
     | 
    
         | 
| 
       70 
59 
     | 
    
         
             
                    temp_file = directory + '/docker-compose.yml'
         
     | 
| 
       71 
     | 
    
         
            -
                     
     | 
| 
      
 60 
     | 
    
         
            +
                    puts temp_file
         
     | 
| 
      
 61 
     | 
    
         
            +
                    @system_runner.write_file temp_file, YAML.dump(hash)
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                    ex = "docker-compose -f #{temp_file} -p #{@project_name} #{command}"
         
     | 
| 
      
 64 
     | 
    
         
            +
                    puts ex
         
     | 
| 
       72 
65 
     | 
    
         | 
| 
       73 
     | 
    
         
            -
                     
     | 
| 
      
 66 
     | 
    
         
            +
                    @system_runner.execute ex
         
     | 
| 
      
 67 
     | 
    
         
            +
                    @system_runner.remove_entry_secure directory
         
     | 
| 
       74 
68 
     | 
    
         
             
                  end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                  def create_compose_network
         
     | 
| 
      
 71 
     | 
    
         
            +
                    { 'networks' => {'default' => { 'external' => { 'name' => @docker_network } } } }
         
     | 
| 
      
 72 
     | 
    
         
            +
                  end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                  def create_compose
         
     | 
| 
      
 75 
     | 
    
         
            +
                    existing = YAML.load(File.read(@compose_file))
         
     | 
| 
      
 76 
     | 
    
         
            +
                    services = {}
         
     | 
| 
      
 77 
     | 
    
         
            +
                    
         
     | 
| 
      
 78 
     | 
    
         
            +
                    existing['services'].keys.each do |key|
         
     | 
| 
      
 79 
     | 
    
         
            +
                      newservice = existing['services'][key].merge({'external_links' => ["#{@project_name}_consul_1:consul"]})
         
     | 
| 
      
 80 
     | 
    
         
            +
                      services[key] = newservice
         
     | 
| 
      
 81 
     | 
    
         
            +
                    end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                    compose = { 'version' => 2.to_s, 'services' => services }
         
     | 
| 
      
 84 
     | 
    
         
            +
                    
         
     | 
| 
      
 85 
     | 
    
         
            +
                    compose
         
     | 
| 
      
 86 
     | 
    
         
            +
                  end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
       75 
88 
     | 
    
         
             
                end
         
     | 
| 
       76 
89 
     | 
    
         
             
              end
         
     | 
| 
       77 
90 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,6 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Minke
         
     | 
| 
       2 
2 
     | 
    
         
             
              module Docker
         
     | 
| 
       3 
3 
     | 
    
         
             
                class DockerRunner
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def initialize network = nil
         
     | 
| 
      
 5 
     | 
    
         
            +
                    @network = network ||= 'bridge'
         
     | 
| 
      
 6 
     | 
    
         
            +
                  end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
       4 
8 
     | 
    
         
             
                  ##
         
     | 
| 
       5 
9 
     | 
    
         
             
                  # returns the ip address that docker is running on
         
     | 
| 
       6 
10 
     | 
    
         
             
                  def get_docker_ip_address
         
     | 
| 
         @@ -39,6 +43,7 @@ module Minke 
     | 
|
| 
       39 
43 
     | 
    
         
             
                  # pull_image pulls a new copy of the given image from the registry
         
     | 
| 
       40 
44 
     | 
    
         
             
                  def pull_image image_name
         
     | 
| 
       41 
45 
     | 
    
         
             
                  	puts "Pulling Image: #{image_name}"
         
     | 
| 
      
 46 
     | 
    
         
            +
                    ::Docker.options = {:chunk_size => 1, :read_timeout => 3600}
         
     | 
| 
       42 
47 
     | 
    
         
             
                    ::Docker::Image.create('fromImage' => image_name)
         
     | 
| 
       43 
48 
     | 
    
         
             
                  end
         
     | 
| 
       44 
49 
     | 
    
         | 
| 
         @@ -58,39 +63,42 @@ module Minke 
     | 
|
| 
       58 
63 
     | 
    
         
             
                  # Returns:
         
     | 
| 
       59 
64 
     | 
    
         
             
                  # - Docker::Container
         
     | 
| 
       60 
65 
     | 
    
         
             
                  # - sucess (true if command succeded without error)
         
     | 
| 
       61 
     | 
    
         
            -
                  def create_and_run_container  
     | 
| 
      
 66 
     | 
    
         
            +
                  def create_and_run_container args
         
     | 
| 
       62 
67 
     | 
    
         
             
                  	# update the timeout for the Excon Http Client
         
     | 
| 
       63 
68 
     | 
    
         
             
                  	# set the chunk size to enable streaming of log files
         
     | 
| 
       64 
     | 
    
         
            -
                    #puts working_directory
         
     | 
| 
       65 
     | 
    
         
            -
                    puts volumes
         
     | 
| 
       66 
     | 
    
         
            -
                    #puts environment
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
69 
     | 
    
         
             
                    ::Docker.options = {:chunk_size => 1, :read_timeout => 3600}
         
     | 
| 
       69 
70 
     | 
    
         
             
                    container = ::Docker::Container.create(
         
     | 
| 
       70 
     | 
    
         
            -
                  		'Image' 
     | 
| 
       71 
     | 
    
         
            -
                  		'Cmd' 
     | 
| 
       72 
     | 
    
         
            -
                  		"Binds" 
     | 
| 
       73 
     | 
    
         
            -
                  		"Env" 
     | 
| 
       74 
     | 
    
         
            -
                  		'WorkingDir' 
     | 
| 
      
 71 
     | 
    
         
            +
                  		'Image'           => args[:image],
         
     | 
| 
      
 72 
     | 
    
         
            +
                  		'Cmd'             => args[:command],
         
     | 
| 
      
 73 
     | 
    
         
            +
                  		"Binds"           => args[:volumes],
         
     | 
| 
      
 74 
     | 
    
         
            +
                  		"Env"             => args[:environment],
         
     | 
| 
      
 75 
     | 
    
         
            +
                  		'WorkingDir'      => args[:working_directory],
         
     | 
| 
      
 76 
     | 
    
         
            +
                      'NetworkMode'     => @network,
         
     | 
| 
      
 77 
     | 
    
         
            +
                      'name'        => args[:name],
         
     | 
| 
      
 78 
     | 
    
         
            +
                      'PublishAllPorts' => true
         
     | 
| 
      
 79 
     | 
    
         
            +
                    )
         
     | 
| 
       75 
80 
     | 
    
         | 
| 
       76 
81 
     | 
    
         
             
                    success = true
         
     | 
| 
       77 
82 
     | 
    
         | 
| 
       78 
     | 
    
         
            -
                     
     | 
| 
       79 
     | 
    
         
            -
                       
     | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
       81 
     | 
    
         
            -
                          stream 
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
                             
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
       87 
     | 
    
         
            -
                             
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
      
 83 
     | 
    
         
            +
                    unless args[:deamon] == true 
         
     | 
| 
      
 84 
     | 
    
         
            +
                      thread = Thread.new do
         
     | 
| 
      
 85 
     | 
    
         
            +
                        container.attach(:stream => true, :stdin => nil, :stdout => true, :stderr => true, :logs => false, :tty => false) do
         
     | 
| 
      
 86 
     | 
    
         
            +
                          |stream, chunk|
         
     | 
| 
      
 87 
     | 
    
         
            +
                            stream.to_s == 'stdout' ? color = :green : color  = :red
         
     | 
| 
      
 88 
     | 
    
         
            +
                            puts "#{chunk.strip}".colorize(color)
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                            if stream.to_s == "stderr"
         
     | 
| 
      
 91 
     | 
    
         
            +
                              success = false
         
     | 
| 
      
 92 
     | 
    
         
            +
                            else
         
     | 
| 
      
 93 
     | 
    
         
            +
                              success = true
         
     | 
| 
      
 94 
     | 
    
         
            +
                            end
         
     | 
| 
      
 95 
     | 
    
         
            +
                        end
         
     | 
| 
       89 
96 
     | 
    
         
             
                      end
         
     | 
| 
       90 
97 
     | 
    
         
             
                    end
         
     | 
| 
       91 
98 
     | 
    
         | 
| 
       92 
99 
     | 
    
         
             
                    container.start
         
     | 
| 
       93 
     | 
    
         
            -
                     
     | 
| 
      
 100 
     | 
    
         
            +
                    
         
     | 
| 
      
 101 
     | 
    
         
            +
                    thread.join unless args[:deamon] == true
         
     | 
| 
       94 
102 
     | 
    
         | 
| 
       95 
103 
     | 
    
         
             
                  	return container, success
         
     | 
| 
       96 
104 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -98,6 +106,8 @@ module Minke 
     | 
|
| 
       98 
106 
     | 
    
         
             
                  ##
         
     | 
| 
       99 
107 
     | 
    
         
             
                  # build_image creates a new image from the given Dockerfile and name
         
     | 
| 
       100 
108 
     | 
    
         
             
                  def build_image dockerfile_dir, name
         
     | 
| 
      
 109 
     | 
    
         
            +
                    puts dockerfile_dir
         
     | 
| 
      
 110 
     | 
    
         
            +
                    puts name
         
     | 
| 
       101 
111 
     | 
    
         
             
                    ::Docker.options = {:read_timeout => 6200}
         
     | 
| 
       102 
112 
     | 
    
         
             
                    begin
         
     | 
| 
       103 
113 
     | 
    
         
             
                      ::Docker::Image.build_from_dir(dockerfile_dir, {:t => name}) do |v|
         
     | 
| 
         @@ -106,17 +116,22 @@ module Minke 
     | 
|
| 
       106 
116 
     | 
    
         
             
                        $stdout.puts data unless data == nil
         
     | 
| 
       107 
117 
     | 
    
         
             
                      end
         
     | 
| 
       108 
118 
     | 
    
         
             
                    rescue => e
         
     | 
| 
      
 119 
     | 
    
         
            +
                      puts e
         
     | 
| 
       109 
120 
     | 
    
         
             
                      message = /.*{"message":"(.*?)"}/.match(e.to_s)
         
     | 
| 
       110 
121 
     | 
    
         
             
                      puts "Error: #{message[1]}" unless message == nil || message.length < 1
         
     | 
| 
       111 
122 
     | 
    
         
             
                    end
         
     | 
| 
       112 
123 
     | 
    
         
             
                  end
         
     | 
| 
       113 
124 
     | 
    
         | 
| 
      
 125 
     | 
    
         
            +
                  def stop_container container 
         
     | 
| 
      
 126 
     | 
    
         
            +
                    container.stop()
         
     | 
| 
      
 127 
     | 
    
         
            +
                  end
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
       114 
129 
     | 
    
         
             
                  def delete_container container
         
     | 
| 
       115 
130 
     | 
    
         
             
                    if container != nil
         
     | 
| 
       116 
131 
     | 
    
         
             
                      begin
         
     | 
| 
       117 
132 
     | 
    
         
             
                        container.delete()
         
     | 
| 
       118 
133 
     | 
    
         
             
                      rescue => e
         
     | 
| 
       119 
     | 
    
         
            -
                        puts "Error: Unable to delete container"
         
     | 
| 
      
 134 
     | 
    
         
            +
                        puts "Error: Unable to delete container: #{e}"
         
     | 
| 
       120 
135 
     | 
    
         
             
                      end
         
     | 
| 
       121 
136 
     | 
    
         
             
                    end
         
     | 
| 
       122 
137 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -0,0 +1,61 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Minke
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Docker
         
     | 
| 
      
 3 
     | 
    
         
            +
                ##
         
     | 
| 
      
 4 
     | 
    
         
            +
                # HealthCheck checks health of a running container
         
     | 
| 
      
 5 
     | 
    
         
            +
                class HealthCheck
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                  def initialize count=nil, pause=nil
         
     | 
| 
      
 8 
     | 
    
         
            +
                    @count = count ||= 180
         
     | 
| 
      
 9 
     | 
    
         
            +
                    @pause = pause ||= 1
         
     | 
| 
      
 10 
     | 
    
         
            +
                    @successes = 2
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 14 
     | 
    
         
            +
                  # waits until a 200 response is received from the given url
         
     | 
| 
      
 15 
     | 
    
         
            +
                  def wait_for_HTTPOK url
         
     | 
| 
      
 16 
     | 
    
         
            +
                    puts "Waiting for server #{url} to start #{@count} attempts left"
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 19 
     | 
    
         
            +
                      response = RestClient.send('get', url)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    rescue
         
     | 
| 
      
 21 
     | 
    
         
            +
                      puts 'Invalid response from server'
         
     | 
| 
      
 22 
     | 
    
         
            +
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                    check_response response, url
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  private
         
     | 
| 
      
 28 
     | 
    
         
            +
                  def check_response response, url
         
     | 
| 
      
 29 
     | 
    
         
            +
                    if response == nil || !response.code.to_i == 200
         
     | 
| 
      
 30 
     | 
    
         
            +
                      check_failed url
         
     | 
| 
      
 31 
     | 
    
         
            +
                    else
         
     | 
| 
      
 32 
     | 
    
         
            +
                      check_success url
         
     | 
| 
      
 33 
     | 
    
         
            +
                    end
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  def check_failed url
         
     | 
| 
      
 37 
     | 
    
         
            +
                    @count -= 1
         
     | 
| 
      
 38 
     | 
    
         
            +
                    sleep @pause
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                    if @count > 0
         
     | 
| 
      
 41 
     | 
    
         
            +
                      wait_for_HTTPOK url
         
     | 
| 
      
 42 
     | 
    
         
            +
                    else
         
     | 
| 
      
 43 
     | 
    
         
            +
                      raise 'Server failed to start'
         
     | 
| 
      
 44 
     | 
    
         
            +
                    end
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  def check_success url
         
     | 
| 
      
 48 
     | 
    
         
            +
                    if @successes > 0 
         
     | 
| 
      
 49 
     | 
    
         
            +
                      puts "Server: #{url} passed health check, #{@successes} checks to go..."
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                      @successes -= 1
         
     | 
| 
      
 52 
     | 
    
         
            +
                      sleep @pause
         
     | 
| 
      
 53 
     | 
    
         
            +
                      wait_for_HTTPOK url
         
     | 
| 
      
 54 
     | 
    
         
            +
                    else
         
     | 
| 
      
 55 
     | 
    
         
            +
                      puts "Server: #{url} healthy"
         
     | 
| 
      
 56 
     | 
    
         
            +
                    end
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
              end
         
     | 
| 
      
 61 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Minke
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Docker
         
     | 
| 
      
 3 
     | 
    
         
            +
                class Network
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def initialize network_name, shell_runner
         
     | 
| 
      
 5 
     | 
    
         
            +
                    @network_name = network_name
         
     | 
| 
      
 6 
     | 
    
         
            +
                    @shell_runner = shell_runner
         
     | 
| 
      
 7 
     | 
    
         
            +
                  end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  def create
         
     | 
| 
      
 10 
     | 
    
         
            +
                    @shell_runner.execute("docker network create #{@network_name}") if find_network.to_s == ''
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  def remove
         
     | 
| 
      
 14 
     | 
    
         
            +
                    @shell_runner.execute("docker network rm #{@network_name}") unless find_network.to_s == ''
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  private 
         
     | 
| 
      
 18 
     | 
    
         
            +
                  def find_network
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @shell_runner.execute_and_return("docker network ls | grep #{@network_name}")
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -3,9 +3,10 @@ module Minke 
     | 
|
| 
       3 
3 
     | 
    
         
             
                ##
         
     | 
| 
       4 
4 
     | 
    
         
             
                # ServiceDiscovery allows you to look up the publicly accessible address and port for a server
         
     | 
| 
       5 
5 
     | 
    
         
             
                class ServiceDiscovery
         
     | 
| 
       6 
     | 
    
         
            -
                  def initialize project_name, docker_runner
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def initialize project_name, docker_runner, docker_network = nil
         
     | 
| 
       7 
7 
     | 
    
         
             
                    @project_name = project_name
         
     | 
| 
       8 
8 
     | 
    
         
             
                    @docker_runner = docker_runner
         
     | 
| 
      
 9 
     | 
    
         
            +
                    @docker_network = docker_network
         
     | 
| 
       9 
10 
     | 
    
         
             
                  end
         
     | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
12 
     | 
    
         
             
                  ##
         
     | 
| 
         @@ -47,7 +48,21 @@ module Minke 
     | 
|
| 
       47 
48 
     | 
    
         
             
                    return "#{ip}:#{private_port}"
         
     | 
| 
       48 
49 
     | 
    
         
             
                  end
         
     | 
| 
       49 
50 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
                   
     | 
| 
      
 51 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 52 
     | 
    
         
            +
                  # builds an address for the given url
         
     | 
| 
      
 53 
     | 
    
         
            +
                  def build_address url
         
     | 
| 
      
 54 
     | 
    
         
            +
                    if url.type == 'external'
         
     | 
| 
      
 55 
     | 
    
         
            +
                      "#{url.protocol}://#{url.address}:#{url.port}#{url.path}"
         
     | 
| 
      
 56 
     | 
    
         
            +
                    elsif url.type == 'bridge'
         
     | 
| 
      
 57 
     | 
    
         
            +
                      address = bridge_address_for @docker_network, url.address, url.port
         
     | 
| 
      
 58 
     | 
    
         
            +
                      "#{url.protocol}://#{address}#{url.path}"
         
     | 
| 
      
 59 
     | 
    
         
            +
                    elsif url.type == 'public'
         
     | 
| 
      
 60 
     | 
    
         
            +
                      address = public_address_for url.address, url.port
         
     | 
| 
      
 61 
     | 
    
         
            +
                      "#{url.protocol}://#{address}#{url.path}"
         
     | 
| 
      
 62 
     | 
    
         
            +
                    end
         
     | 
| 
      
 63 
     | 
    
         
            +
                  end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                  private
         
     | 
| 
       51 
66 
     | 
    
         
             
                  def find_container_by_name name
         
     | 
| 
       52 
67 
     | 
    
         
             
                    containers = @docker_runner.running_containers
         
     | 
| 
       53 
68 
     | 
    
         
             
                    containers.select { |c| c.info['Names'].include?(name) }
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Minke
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Helpers
         
     | 
| 
      
 3 
     | 
    
         
            +
                class Copy
         
     | 
| 
      
 4 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 5 
     | 
    
         
            +
                  # copy assets from one location to another
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def copy_assets from, to
         
     | 
| 
      
 7 
     | 
    
         
            +
                    directory = to
         
     | 
| 
      
 8 
     | 
    
         
            +
                    if File.directory?(to)
         
     | 
| 
      
 9 
     | 
    
         
            +
                      directory = File.dirname(to)
         
     | 
| 
      
 10 
     | 
    
         
            +
                    end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                    Dir.mkdir directory unless Dir.exist? to
         
     | 
| 
      
 13 
     | 
    
         
            +
                    FileUtils.cp_r from, to
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Minke
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Helpers
         
     | 
| 
      
 3 
     | 
    
         
            +
                class Logger
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def log message, level
         
     | 
| 
      
 5 
     | 
    
         
            +
                    ## implement logger implementation
         
     | 
| 
      
 6 
     | 
    
         
            +
                    case level
         
     | 
| 
      
 7 
     | 
    
         
            +
                    when :error
         
     | 
| 
      
 8 
     | 
    
         
            +
                      @logger.error message
         
     | 
| 
      
 9 
     | 
    
         
            +
                    when :info
         
     | 
| 
      
 10 
     | 
    
         
            +
                      @logger.info message
         
     | 
| 
      
 11 
     | 
    
         
            +
                    when :debug
         
     | 
| 
      
 12 
     | 
    
         
            +
                      @logger.debug message
         
     | 
| 
      
 13 
     | 
    
         
            +
                    end
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,7 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Minke
         
     | 
| 
       2 
     | 
    
         
            -
              module  
     | 
| 
       3 
     | 
    
         
            -
                class  
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 2 
     | 
    
         
            +
              module Helpers
         
     | 
| 
      
 3 
     | 
    
         
            +
                class Shell
         
     | 
| 
      
 4 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 5 
     | 
    
         
            +
                  # Executes a shell command and returns the return status
         
     | 
| 
       5 
6 
     | 
    
         
             
                  def execute command
         
     | 
| 
       6 
7 
     | 
    
         
             
                    system("#{command}")
         
     | 
| 
       7 
8 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -22,7 +23,6 @@ module Minke 
     | 
|
| 
       22 
23 
     | 
    
         
             
                  def write_file filename, data
         
     | 
| 
       23 
24 
     | 
    
         
             
                    File.open(filename, 'w') { |file| file.write(data) }
         
     | 
| 
       24 
25 
     | 
    
         
             
                  end
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
26 
     | 
    
         
             
                end
         
     | 
| 
       27 
27 
     | 
    
         
             
              end
         
     | 
| 
       28 
     | 
    
         
            -
            end
         
     | 
| 
      
 28 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/minke/rake/app.rake
    CHANGED
    
    | 
         @@ -1,52 +1,46 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            require 'minke'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            reader = Minke::Config::Reader.new
         
     | 
| 
      
 4 
     | 
    
         
            +
            @config = reader.read './config.yml'
         
     | 
| 
       2 
5 
     | 
    
         | 
| 
      
 6 
     | 
    
         
            +
            namespace :app do
         
     | 
| 
       3 
7 
     | 
    
         
             
              desc "fetch dependent packages"
         
     | 
| 
       4 
8 
     | 
    
         
             
              task :fetch => ['config:set_docker_env'] do
         
     | 
| 
       5 
     | 
    
         
            -
                create_dependencies
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
9 
     | 
    
         
             
                if @config.fetch != nil
         
     | 
| 
       8 
10 
     | 
    
         
             
                  puts 'run fetch'
         
     | 
| 
       9 
     | 
    
         
            -
                  runner = Minke::Tasks::Fetch.new  
     | 
| 
      
 11 
     | 
    
         
            +
                  runner = Minke::Tasks::Fetch.new create_dependencies :fetch
         
     | 
| 
       10 
12 
     | 
    
         
             
                  runner.run
         
     | 
| 
       11 
13 
     | 
    
         
             
                end
         
     | 
| 
       12 
14 
     | 
    
         
             
              end
         
     | 
| 
       13 
15 
     | 
    
         | 
| 
       14 
16 
     | 
    
         
             
              desc "build application"
         
     | 
| 
       15 
17 
     | 
    
         
             
              task :build => [:fetch] do
         
     | 
| 
       16 
     | 
    
         
            -
                create_dependencies
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
18 
     | 
    
         
             
                if @config.build != nil
         
     | 
| 
       19 
     | 
    
         
            -
                  runner = Minke::Tasks::Build.new  
     | 
| 
      
 19 
     | 
    
         
            +
                  runner = Minke::Tasks::Build.new create_dependencies :build
         
     | 
| 
       20 
20 
     | 
    
         
             
                  runner.run
         
     | 
| 
       21 
21 
     | 
    
         
             
                end
         
     | 
| 
       22 
22 
     | 
    
         
             
              end
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
24 
     | 
    
         
             
              desc "run unit tests"
         
     | 
| 
       25 
25 
     | 
    
         
             
              task :test => [:build] do
         
     | 
| 
       26 
     | 
    
         
            -
                create_dependencies
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
26 
     | 
    
         
             
                if @config.test != nil
         
     | 
| 
       29 
     | 
    
         
            -
                  runner = Minke::Tasks::Test.new  
     | 
| 
      
 27 
     | 
    
         
            +
                  runner = Minke::Tasks::Test.new create_dependencies :test
         
     | 
| 
       30 
28 
     | 
    
         
             
                  runner.run
         
     | 
| 
       31 
29 
     | 
    
         
             
                end
         
     | 
| 
       32 
30 
     | 
    
         
             
              end
         
     | 
| 
       33 
31 
     | 
    
         | 
| 
       34 
32 
     | 
    
         
             
              desc "build Docker image for application"
         
     | 
| 
       35 
33 
     | 
    
         
             
              task :build_image => [:test] do
         
     | 
| 
       36 
     | 
    
         
            -
                create_dependencies
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
34 
     | 
    
         
             
                if @config.build != nil
         
     | 
| 
       39 
     | 
    
         
            -
                  runner = Minke::Tasks::BuildImage.new  
     | 
| 
      
 35 
     | 
    
         
            +
                  runner = Minke::Tasks::BuildImage.new create_dependencies :build
         
     | 
| 
       40 
36 
     | 
    
         
             
                  runner.run
         
     | 
| 
       41 
37 
     | 
    
         
             
                end
         
     | 
| 
       42 
38 
     | 
    
         
             
              end
         
     | 
| 
       43 
39 
     | 
    
         | 
| 
       44 
40 
     | 
    
         
             
              desc "run application with Docker Compose"
         
     | 
| 
       45 
41 
     | 
    
         
             
              task :run => ['config:set_docker_env'] do
         
     | 
| 
       46 
     | 
    
         
            -
                create_dependencies
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
42 
     | 
    
         
             
                if @config.run != nil
         
     | 
| 
       49 
     | 
    
         
            -
                  runner = Minke::Tasks::Run.new  
     | 
| 
      
 43 
     | 
    
         
            +
                  runner = Minke::Tasks::Run.new create_dependencies :run
         
     | 
| 
       50 
44 
     | 
    
         
             
                  runner.run
         
     | 
| 
       51 
45 
     | 
    
         
             
                end
         
     | 
| 
       52 
46 
     | 
    
         
             
              end
         
     | 
| 
         @@ -56,49 +50,69 @@ namespace :app do 
     | 
|
| 
       56 
50 
     | 
    
         | 
| 
       57 
51 
     | 
    
         
             
              desc "run end to end Cucumber tests USAGE: rake app:cucumber[@tag]"
         
     | 
| 
       58 
52 
     | 
    
         
             
              task :cucumber, [:feature] => ['config:set_docker_env'] do |t, args|
         
     | 
| 
       59 
     | 
    
         
            -
                create_dependencies
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
53 
     | 
    
         
             
                if @config.cucumber != nil
         
     | 
| 
       62 
     | 
    
         
            -
                  runner = Minke::Tasks::Cucumber.new  
     | 
| 
      
 54 
     | 
    
         
            +
                  runner = Minke::Tasks::Cucumber.new create_dependencies :cucumber
         
     | 
| 
       63 
55 
     | 
    
         
             
                  runner.run
         
     | 
| 
       64 
56 
     | 
    
         
             
                end
         
     | 
| 
       65 
57 
     | 
    
         
             
              end
         
     | 
| 
       66 
58 
     | 
    
         | 
| 
       67 
59 
     | 
    
         
             
              desc "push built image to Docker registry"
         
     | 
| 
       68 
60 
     | 
    
         
             
              task :push  do
         
     | 
| 
       69 
     | 
    
         
            -
                create_dependencies
         
     | 
| 
       70 
     | 
    
         
            -
                runner = Minke::Tasks::Push.new @config, :cucumber, @generator_config, @docker_runner, @docker_compose_factory, @service_discovery, @logger, @helper, @system_runner
         
     | 
| 
      
 61 
     | 
    
         
            +
                runner = Minke::Tasks::Push.new create_dependencies :push
         
     | 
| 
       71 
62 
     | 
    
         
             
                runner.run
         
     | 
| 
       72 
63 
     | 
    
         
             
              end
         
     | 
| 
       73 
64 
     | 
    
         | 
| 
       74 
     | 
    
         
            -
              def create_dependencies
         
     | 
| 
       75 
     | 
    
         
            -
                 
     | 
| 
       76 
     | 
    
         
            -
                ENV[ 
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
                 
     | 
| 
       79 
     | 
    
         
            -
                @docker_compose_factory ||= Minke::Docker::DockerComposeFactory.new @system_runner, @project_name
         
     | 
| 
       80 
     | 
    
         
            -
                @docker_runner ||= Minke::Docker::DockerRunner.new
         
     | 
| 
       81 
     | 
    
         
            -
                @service_discovery ||= Minke::Docker::ServiceDiscovery.new @project_name, @docker_runner
         
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
     | 
    
         
            -
                if @config == nil
         
     | 
| 
       84 
     | 
    
         
            -
                  reader = Minke::Config::Reader.new
         
     | 
| 
       85 
     | 
    
         
            -
                  @config = reader.read './config.yml'
         
     | 
| 
       86 
     | 
    
         
            -
                end
         
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
                if @generator_config == nil
         
     | 
| 
       89 
     | 
    
         
            -
                  variables = Minke::Generators::ConfigVariables.new.tap do |v|
         
     | 
| 
       90 
     | 
    
         
            -
                    v.application_name = @config.application_name
         
     | 
| 
       91 
     | 
    
         
            -
                    v.namespace = @config.namespace
         
     | 
| 
       92 
     | 
    
         
            -
                    v.src_root = File.expand_path('../')
         
     | 
| 
       93 
     | 
    
         
            -
                  end
         
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
                  Minke::Generators::Processor.load_generators
         
     | 
| 
       96 
     | 
    
         
            -
                  processor = Minke::Generators::Processor.new variables, @docker_runner
         
     | 
| 
      
 65 
     | 
    
         
            +
              def create_dependencies task
         
     | 
| 
      
 66 
     | 
    
         
            +
                project_name = "minke#{SecureRandom.urlsafe_base64(12)}".downcase.gsub(/[^0-9a-z ]/i, '')
         
     | 
| 
      
 67 
     | 
    
         
            +
                network_name = ENV['DOCKER_NETWORK'] ||= "#{project_name}_default"
         
     | 
| 
      
 68 
     | 
    
         
            +
                ENV['DOCKER_PROJECT'] = project_name
         
     | 
| 
      
 69 
     | 
    
         
            +
                ENV['DOCKER_NETWORK'] = network_name
         
     | 
| 
       97 
70 
     | 
    
         | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
      
 71 
     | 
    
         
            +
                variables = Minke::Generators::ConfigVariables.new.tap do |v|
         
     | 
| 
      
 72 
     | 
    
         
            +
                  v.application_name = @config.application_name
         
     | 
| 
      
 73 
     | 
    
         
            +
                  v.namespace = @config.namespace
         
     | 
| 
      
 74 
     | 
    
         
            +
                  v.src_root = File.expand_path('../')
         
     | 
| 
       99 
75 
     | 
    
         
             
                end
         
     | 
| 
       100 
76 
     | 
    
         | 
| 
       101 
     | 
    
         
            -
                 
     | 
| 
       102 
     | 
    
         
            -
                 
     | 
| 
      
 77 
     | 
    
         
            +
                Minke::Generators::Processor.load_generators
         
     | 
| 
      
 78 
     | 
    
         
            +
                processor = Minke::Generators::Processor.new variables, @docker_runner
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                generator_config = processor.get_generator @config.generator_name
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                task_runner = Minke::Tasks::TaskRunner.new ({
         
     | 
| 
      
 83 
     | 
    
         
            +
                  :rake_helper       => Minke::Helpers::Rake.new,
         
     | 
| 
      
 84 
     | 
    
         
            +
                  :copy_helper       => Minke::Helpers::Copy.new,
         
     | 
| 
      
 85 
     | 
    
         
            +
                  :service_discovery => Minke::Docker::ServiceDiscovery.new(project_name, Minke::Docker::DockerRunner.new, network_name) 
         
     | 
| 
      
 86 
     | 
    
         
            +
                })
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                consul = Minke::Docker::Consul.new( 
         
     | 
| 
      
 89 
     | 
    
         
            +
                  Minke::Docker::HealthCheck.new,
         
     | 
| 
      
 90 
     | 
    
         
            +
                  Minke::Docker::ServiceDiscovery.new( project_name, Minke::Docker::DockerRunner.new(network_name), network_name),
         
     | 
| 
      
 91 
     | 
    
         
            +
                  ConsulLoader::Loader.new(ConsulLoader::ConfigParser.new),
         
     | 
| 
      
 92 
     | 
    
         
            +
                  Minke::Docker::DockerRunner.new(network_name),
         
     | 
| 
      
 93 
     | 
    
         
            +
                  network_name,
         
     | 
| 
      
 94 
     | 
    
         
            +
                  project_name
         
     | 
| 
      
 95 
     | 
    
         
            +
                )
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                network = Minke::Docker::Network.new(
         
     | 
| 
      
 98 
     | 
    
         
            +
                  network_name,
         
     | 
| 
      
 99 
     | 
    
         
            +
                  Minke::Helpers::Shell.new
         
     | 
| 
      
 100 
     | 
    
         
            +
                )
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                return {
         
     | 
| 
      
 103 
     | 
    
         
            +
                  :config                 => @config,
         
     | 
| 
      
 104 
     | 
    
         
            +
                  :task_name              => task,
         
     | 
| 
      
 105 
     | 
    
         
            +
                  :docker_runner          => Minke::Docker::DockerRunner.new(network_name),
         
     | 
| 
      
 106 
     | 
    
         
            +
                  :task_runner            => task_runner,
         
     | 
| 
      
 107 
     | 
    
         
            +
                  :error_helper           => Minke::Helpers::Error.new,
         
     | 
| 
      
 108 
     | 
    
         
            +
                  :shell_helper           => Minke::Helpers::Shell.new,
         
     | 
| 
      
 109 
     | 
    
         
            +
                  :logger_helper          => Minke::Helpers::Logger.new,
         
     | 
| 
      
 110 
     | 
    
         
            +
                  :generator_config       => generator_config,
         
     | 
| 
      
 111 
     | 
    
         
            +
                  :docker_compose_factory => Minke::Docker::DockerComposeFactory.new(Minke::Helpers::Shell.new, project_name, network_name),
         
     | 
| 
      
 112 
     | 
    
         
            +
                  :consul                 => consul,
         
     | 
| 
      
 113 
     | 
    
         
            +
                  :docker_network         => network,
         
     | 
| 
      
 114 
     | 
    
         
            +
                  :health_check           => Minke::Docker::HealthCheck.new,
         
     | 
| 
      
 115 
     | 
    
         
            +
                  :service_discovery      => Minke::Docker::ServiceDiscovery.new(project_name, Minke::Docker::DockerRunner.new, network_name)
         
     | 
| 
      
 116 
     | 
    
         
            +
                }
         
     | 
| 
       103 
117 
     | 
    
         
             
              end
         
     | 
| 
       104 
118 
     | 
    
         
             
            end
         
     | 
    
        data/lib/minke/rake/config.rake
    CHANGED
    
    
    
        data/lib/minke/scripts/minke.sh
    CHANGED
    
    | 
         @@ -4,6 +4,7 @@ RVM_COMMAND="source /usr/local/rvm/scripts/rvm" 
     | 
|
| 
       4 
4 
     | 
    
         
             
            ERROR="Please specify a command e.g. ./minke.sh rake app:test"
         
     | 
| 
       5 
5 
     | 
    
         
             
            COMMAND=""
         
     | 
| 
       6 
6 
     | 
    
         
             
            NEW_UUID=$(base64 /dev/urandom | tr -d '/+' | head -c 32 | tr '[:upper:]' '[:lower:]')
         
     | 
| 
      
 7 
     | 
    
         
            +
            NETWORK
         
     | 
| 
       7 
8 
     | 
    
         
             
            GEMSET='minkegems'
         
     | 
| 
       8 
9 
     | 
    
         
             
            GEMSETFOLDER="/usr/local/rvm/gems/ruby-2.3.1@${GEMSET}"
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
         @@ -29,5 +30,4 @@ if [[ $1 != \ -g* ]]; then 
     | 
|
| 
       29 
30 
     | 
    
         | 
| 
       30 
31 
     | 
    
         
             
              eval "docker network create minke_${NEW_UUID}"
         
     | 
| 
       31 
32 
     | 
    
         
             
              eval "${DOCKER_RUN}"
         
     | 
| 
       32 
     | 
    
         
            -
              eval "docker network rm minke_${NEW_UUID}"
         
     | 
| 
       33 
33 
     | 
    
         
             
            fi
         
     | 
    
        data/lib/minke/tasks/build.rb
    CHANGED
    
    | 
         @@ -4,14 +4,12 @@ module Minke 
     | 
|
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
                  def run args = nil
         
     | 
| 
       6 
6 
     | 
    
         
             
                    puts "## Build application"
         
     | 
| 
       7 
     | 
    
         
            -
                     
     | 
| 
       8 
     | 
    
         
            -
                       
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                        @generator_settings.build_settings.build_commands.build.each do |command|
         
     | 
| 
      
 7 
     | 
    
         
            +
                    if  @generator_config.build_settings.build_commands.build != nil
         
     | 
| 
      
 8 
     | 
    
         
            +
                      run_with_block do
         
     | 
| 
      
 9 
     | 
    
         
            +
                        @generator_config.build_settings.build_commands.build.each do |command|
         
     | 
| 
       11 
10 
     | 
    
         
             
                          puts command.to_s
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
      
 11 
     | 
    
         
            +
                          run_command_in_container command
         
     | 
| 
       13 
12 
     | 
    
         
             
                        end
         
     | 
| 
       14 
     | 
    
         
            -
                        
         
     | 
| 
       15 
13 
     | 
    
         
             
                      end
         
     | 
| 
       16 
14 
     | 
    
         
             
                    end
         
     | 
| 
       17 
15 
     | 
    
         
             
                  end
         
     | 
    
        data/lib/minke/tasks/cucumber.rb
    CHANGED
    
    | 
         @@ -5,18 +5,22 @@ module Minke 
     | 
|
| 
       5 
5 
     | 
    
         
             
                  def run args = nil
         
     | 
| 
       6 
6 
     | 
    
         
             
                  	puts "## Running cucumber with tags #{args}"
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
      
 8 
     | 
    
         
            +
                    compose_file = @config.compose_file_for(@task_name)
         
     | 
| 
      
 9 
     | 
    
         
            +
                    compose_file = File.expand_path(compose_file)
         
     | 
| 
      
 10 
     | 
    
         
            +
                    compose = @docker_compose_factory.create compose_file unless compose_file == nil
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
      
 12 
     | 
    
         
            +
                    run_with_block do
         
     | 
| 
      
 13 
     | 
    
         
            +
                      status = false
         
     | 
| 
      
 14 
     | 
    
         
            +
                      begin
         
     | 
| 
      
 15 
     | 
    
         
            +
                        compose.up
         
     | 
| 
      
 16 
     | 
    
         
            +
                        server_address = @service_discovery.build_address(@task_settings.health_check) 
         
     | 
| 
      
 17 
     | 
    
         
            +
                        @health_check.wait_for_HTTPOK(server_address) unless @task_settings.health_check == nil
         
     | 
| 
      
 18 
     | 
    
         
            +
                        
         
     | 
| 
      
 19 
     | 
    
         
            +
                        status = @shell_helper.execute "cucumber --color -f pretty #{get_features args}"
         
     | 
| 
      
 20 
     | 
    
         
            +
                      ensure
         
     | 
| 
      
 21 
     | 
    
         
            +
                        compose.down
         
     | 
| 
      
 22 
     | 
    
         
            +
                        @error_helper.fatal_error("Cucumber steps failed") unless status == true
         
     | 
| 
       14 
23 
     | 
    
         
             
                      end
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                  	ensure
         
     | 
| 
       17 
     | 
    
         
            -
                  		@compose.down
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                      @helper.fatal_error "Cucumber steps failed" unless status == 0
         
     | 
| 
       20 
24 
     | 
    
         
             
                  	end
         
     | 
| 
       21 
25 
     | 
    
         
             
                  end
         
     | 
| 
       22 
26 
     | 
    
         | 
    
        data/lib/minke/tasks/fetch.rb
    CHANGED
    
    | 
         @@ -6,12 +6,13 @@ module Minke 
     | 
|
| 
       6 
6 
     | 
    
         
             
                    puts "## Update dependencies"
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
                    puts '### Install gems'
         
     | 
| 
       9 
     | 
    
         
            -
                    @ 
     | 
| 
      
 9 
     | 
    
         
            +
                    @shell_helper.execute('bundle install -j3 && bundle update')
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
                    puts '### Install generator dependencies'
         
     | 
| 
       12 
     | 
    
         
            -
                     
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
      
 12 
     | 
    
         
            +
                    
         
     | 
| 
      
 13 
     | 
    
         
            +
                    if @generator_config.build_settings.build_commands.fetch != nil
         
     | 
| 
      
 14 
     | 
    
         
            +
                      run_with_block do
         
     | 
| 
      
 15 
     | 
    
         
            +
                        @generator_config.build_settings.build_commands.fetch.each do |command|
         
     | 
| 
       15 
16 
     | 
    
         
             
                          run_command_in_container command
         
     | 
| 
       16 
17 
     | 
    
         
             
                        end
         
     | 
| 
       17 
18 
     | 
    
         
             
                      end
         
     | 
    
        data/lib/minke/tasks/run.rb
    CHANGED
    
    | 
         @@ -5,16 +5,18 @@ module Minke 
     | 
|
| 
       5 
5 
     | 
    
         
             
                  def run args = nil
         
     | 
| 
       6 
6 
     | 
    
         
             
                    puts "## Run application with docker compose"
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
      
 8 
     | 
    
         
            +
                    compose_file = @config.compose_file_for(@task_name)
         
     | 
| 
      
 9 
     | 
    
         
            +
                    compose_file = File.expand_path(compose_file)
         
     | 
| 
      
 10 
     | 
    
         
            +
                    compose = @docker_compose_factory.create compose_file unless compose_file == nil
         
     | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
      
 12 
     | 
    
         
            +
                    run_with_block do
         
     | 
| 
      
 13 
     | 
    
         
            +
                      begin
         
     | 
| 
      
 14 
     | 
    
         
            +
                        compose.up
         
     | 
| 
      
 15 
     | 
    
         
            +
                        compose.logs
         
     | 
| 
      
 16 
     | 
    
         
            +
                      ensure
         
     | 
| 
      
 17 
     | 
    
         
            +
                        compose.down
         
     | 
| 
       13 
18 
     | 
    
         
             
                      end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                  	ensure
         
     | 
| 
       16 
     | 
    
         
            -
                  		@compose.down
         
     | 
| 
       17 
     | 
    
         
            -
                  	end
         
     | 
| 
      
 19 
     | 
    
         
            +
                    end
         
     | 
| 
       18 
20 
     | 
    
         
             
                  end
         
     | 
| 
       19 
21 
     | 
    
         | 
| 
       20 
22 
     | 
    
         
             
                end
         
     | 
    
        data/lib/minke/tasks/task.rb
    CHANGED
    
    | 
         @@ -4,109 +4,83 @@ module Minke 
     | 
|
| 
       4 
4 
     | 
    
         
             
                # Task is a base implementation of a rake task such as fetch, build, etc
         
     | 
| 
       5 
5 
     | 
    
         
             
                class Task
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
                  def initialize  
     | 
| 
       8 
     | 
    
         
            -
                    @config 
     | 
| 
       9 
     | 
    
         
            -
                    @ 
     | 
| 
       10 
     | 
    
         
            -
                    @ 
     | 
| 
       11 
     | 
    
         
            -
                    @ 
     | 
| 
       12 
     | 
    
         
            -
                    @ 
     | 
| 
       13 
     | 
    
         
            -
                    @ 
     | 
| 
       14 
     | 
    
         
            -
                    @ 
     | 
| 
       15 
     | 
    
         
            -
                    @ 
     | 
| 
       16 
     | 
    
         
            -
                    @ 
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
                    @ 
     | 
| 
       19 
     | 
    
         
            -
                    @ 
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                    @ 
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                    @compose_file = config.compose_file_for(task)
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                    @compose = docker_compose_factory.create @compose_file unless @compose_file == nil
         
     | 
| 
      
 7 
     | 
    
         
            +
                  def initialize args
         
     | 
| 
      
 8 
     | 
    
         
            +
                    @config                 = args[:config]
         
     | 
| 
      
 9 
     | 
    
         
            +
                    @task_name              = args[:task_name]
         
     | 
| 
      
 10 
     | 
    
         
            +
                    @docker_runner          = args[:docker_runner]
         
     | 
| 
      
 11 
     | 
    
         
            +
                    @task_runner            = args[:task_runner]
         
     | 
| 
      
 12 
     | 
    
         
            +
                    @error_helper           = args[:error_helper]
         
     | 
| 
      
 13 
     | 
    
         
            +
                    @shell_helper           = args[:shell_helper]
         
     | 
| 
      
 14 
     | 
    
         
            +
                    @logger_helper          = args[:logger_helper]
         
     | 
| 
      
 15 
     | 
    
         
            +
                    @generator_config       = args[:generator_config]
         
     | 
| 
      
 16 
     | 
    
         
            +
                    @docker_compose_factory = args[:docker_compose_factory]
         
     | 
| 
      
 17 
     | 
    
         
            +
                    @consul                 = args[:consul]
         
     | 
| 
      
 18 
     | 
    
         
            +
                    @docker_network         = args[:docker_network]
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @health_check           = args[:health_check]
         
     | 
| 
      
 20 
     | 
    
         
            +
                    @service_discovery      = args[:service_discovery]
         
     | 
| 
      
 21 
     | 
    
         
            +
                    @task_settings          = @config.send(@task_name)
         
     | 
| 
       26 
22 
     | 
    
         
             
                  end
         
     | 
| 
       27 
23 
     | 
    
         | 
| 
       28 
24 
     | 
    
         
             
                  ##
         
     | 
| 
       29 
25 
     | 
    
         
             
                  # run_with_config executes the task steps for the given
         
     | 
| 
       30 
26 
     | 
    
         
             
                  # - block containing custom actions
         
     | 
| 
       31 
27 
     | 
    
         
             
                  def run_with_block
         
     | 
| 
       32 
     | 
    
         
            -
                     
     | 
| 
       33 
     | 
    
         
            -
                     
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                    run_steps @task_settings.post unless @task_settings == nil || @task_settings.post == nil
         
     | 
| 
       38 
     | 
    
         
            -
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
                    puts "Starting Consul"
         
     | 
| 
      
 29 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 30 
     | 
    
         
            +
                      @docker_network.create
         
     | 
| 
      
 31 
     | 
    
         
            +
                      @consul.start_and_load_data @task_settings.consul_loader unless @task_settings.consul_loader == nil
         
     | 
| 
      
 32 
     | 
    
         
            +
                      @task_runner.run_steps(@task_settings.pre) unless @task_settings == nil || @task_settings.pre == nil
         
     | 
| 
       39 
33 
     | 
    
         | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                  # execute the defined steps in the given Minke::Config::TaskRunSettings
         
     | 
| 
       42 
     | 
    
         
            -
                  def run_steps steps
         
     | 
| 
       43 
     | 
    
         
            -
                    execute_rake_tasks steps.tasks unless steps.tasks == nil
         
     | 
| 
       44 
     | 
    
         
            -
                    load_consul_data steps.consul_loader unless steps.consul_loader == nil
         
     | 
| 
       45 
     | 
    
         
            -
                    wait_for_health_check steps.health_check unless steps.health_check == nil
         
     | 
| 
       46 
     | 
    
         
            -
                    copy_assets steps.copy unless steps.copy == nil
         
     | 
| 
       47 
     | 
    
         
            -
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
                      yield if block_given?
         
     | 
| 
       48 
35 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
      
 36 
     | 
    
         
            +
                      @task_runner.run_steps(@task_settings.post) unless @task_settings == nil || @task_settings.post == nil
         
     | 
| 
      
 37 
     | 
    
         
            +
                    ensure
         
     | 
| 
      
 38 
     | 
    
         
            +
                      puts "Stopping Consul"
         
     | 
| 
      
 39 
     | 
    
         
            +
                      @consul.stop unless @task_settings.consul_loader == nil
         
     | 
| 
      
 40 
     | 
    
         
            +
                      @docker_network.remove
         
     | 
| 
      
 41 
     | 
    
         
            +
                    end
         
     | 
| 
       53 
42 
     | 
    
         
             
                  end
         
     | 
| 
       54 
43 
     | 
    
         | 
| 
       55 
44 
     | 
    
         
             
                  ##
         
     | 
| 
       56 
     | 
    
         
            -
                  #  
     | 
| 
       57 
     | 
    
         
            -
                  def load_consul_data config
         
     | 
| 
       58 
     | 
    
         
            -
                    @helper.load_consul_data build_address(config.url), config.config_file
         
     | 
| 
       59 
     | 
    
         
            -
                  end
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
                  def wait_for_health_check url
         
     | 
| 
       62 
     | 
    
         
            -
                    @helper.wait_for_HTTPOK build_address(url), 0, 3
         
     | 
| 
       63 
     | 
    
         
            -
                  end
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
                  def copy_assets assets
         
     | 
| 
       66 
     | 
    
         
            -
                    assets.each { |a| @helper.copy_assets a.from, a.to }
         
     | 
| 
       67 
     | 
    
         
            -
                  end
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
      
 45 
     | 
    
         
            +
                  # runs the given command in a docker container
         
     | 
| 
       69 
46 
     | 
    
         
             
                  def run_command_in_container command
         
     | 
| 
       70 
47 
     | 
    
         
             
                    begin
         
     | 
| 
       71 
     | 
    
         
            -
                      settings = @ 
     | 
| 
       72 
     | 
    
         
            -
                       
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
                         
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
      
 48 
     | 
    
         
            +
                      settings = @generator_config.build_settings.docker_settings
         
     | 
| 
      
 49 
     | 
    
         
            +
                      build_image = create_container_image
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                      args = {
         
     | 
| 
      
 52 
     | 
    
         
            +
                        :image             => build_image,
         
     | 
| 
      
 53 
     | 
    
         
            +
                        :command           => command,
         
     | 
| 
      
 54 
     | 
    
         
            +
                        :volumes           => settings.binds,
         
     | 
| 
      
 55 
     | 
    
         
            +
                        :environment       => settings.env,
         
     | 
| 
      
 56 
     | 
    
         
            +
                        :working_directory => settings.working_directory
         
     | 
| 
      
 57 
     | 
    
         
            +
                      }
         
     | 
| 
      
 58 
     | 
    
         
            +
                      container, success = @docker_runner.create_and_run_container args
         
     | 
| 
       80 
59 
     | 
    
         | 
| 
       81 
60 
     | 
    
         
             
                      # throw exception if failed
         
     | 
| 
       82 
     | 
    
         
            -
                      @ 
     | 
| 
      
 61 
     | 
    
         
            +
                      @error_helper.fatal_error "Unable to run command #{command}" unless success
         
     | 
| 
       83 
62 
     | 
    
         
             
                    ensure
         
     | 
| 
       84 
63 
     | 
    
         
             
                      @docker_runner.delete_container container
         
     | 
| 
       85 
64 
     | 
    
         
             
                    end
         
     | 
| 
       86 
65 
     | 
    
         
             
                  end
         
     | 
| 
       87 
66 
     | 
    
         | 
| 
       88 
     | 
    
         
            -
                   
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
             
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
             
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
      
 67 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 68 
     | 
    
         
            +
                  # Pulls the build image for the container from the registry if one is supplied,
         
     | 
| 
      
 69 
     | 
    
         
            +
                  # if a build file is specified an image is built. 
         
     | 
| 
      
 70 
     | 
    
         
            +
                  def create_container_image
         
     | 
| 
      
 71 
     | 
    
         
            +
                    build_image = @generator_config.build_settings.docker_settings.image
         
     | 
| 
      
 72 
     | 
    
         
            +
                    build_image = @config.build_image_for(@task_name) unless @config.build_image_for(@task_name) == nil
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                    build_file = @config.build_docker_file_for(@task_name)
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                    if build_file != nil
         
     | 
| 
      
 77 
     | 
    
         
            +
                      build_image = "#{@config.application_name}-buildimage"
         
     | 
| 
      
 78 
     | 
    
         
            +
                      @docker_runner.build_image build_file, build_image
         
     | 
| 
      
 79 
     | 
    
         
            +
                    else
         
     | 
| 
      
 80 
     | 
    
         
            +
                      @docker_runner.pull_image build_image unless @docker_runner.find_image build_image
         
     | 
| 
       97 
81 
     | 
    
         
             
                    end
         
     | 
| 
       98 
     | 
    
         
            -
                  end
         
     | 
| 
       99 
82 
     | 
    
         | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
                    ## implement logger implementation
         
     | 
| 
       102 
     | 
    
         
            -
                    case level
         
     | 
| 
       103 
     | 
    
         
            -
                    when :error
         
     | 
| 
       104 
     | 
    
         
            -
                      @logger.error message
         
     | 
| 
       105 
     | 
    
         
            -
                    when :info
         
     | 
| 
       106 
     | 
    
         
            -
                      @logger.info message
         
     | 
| 
       107 
     | 
    
         
            -
                    when :debug
         
     | 
| 
       108 
     | 
    
         
            -
                      @logger.debug message
         
     | 
| 
       109 
     | 
    
         
            -
                    end
         
     | 
| 
      
 83 
     | 
    
         
            +
                    build_image
         
     | 
| 
       110 
84 
     | 
    
         
             
                  end
         
     | 
| 
       111 
85 
     | 
    
         | 
| 
       112 
86 
     | 
    
         
             
                end
         
     | 
| 
         @@ -0,0 +1,33 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Minke
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Tasks
         
     | 
| 
      
 3 
     | 
    
         
            +
                class TaskRunner
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                  def initialize args
         
     | 
| 
      
 6 
     | 
    
         
            +
                    @rake_helper       = args[:rake_helper]
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @copy_helper       = args[:copy_helper]
         
     | 
| 
      
 8 
     | 
    
         
            +
                    @service_discovery = args[:service_discovery]
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 12 
     | 
    
         
            +
                  # execute the defined steps in the given Minke::Config::TaskRunSettings
         
     | 
| 
      
 13 
     | 
    
         
            +
                  def run_steps steps
         
     | 
| 
      
 14 
     | 
    
         
            +
                    execute_rake_tasks steps.tasks unless steps.tasks == nil
         
     | 
| 
      
 15 
     | 
    
         
            +
                    copy_assets steps.copy unless steps.copy == nil
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  private
         
     | 
| 
      
 19 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 20 
     | 
    
         
            +
                  # execute an array of rake tasks
         
     | 
| 
      
 21 
     | 
    
         
            +
                  def execute_rake_tasks tasks
         
     | 
| 
      
 22 
     | 
    
         
            +
                    tasks.each { |t| @rake_helper.invoke_task t }
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 26 
     | 
    
         
            +
                  # copys the assets defined in the step
         
     | 
| 
      
 27 
     | 
    
         
            +
                  def copy_assets assets
         
     | 
| 
      
 28 
     | 
    
         
            +
                    assets.each { |a| @copy_helper.copy_assets a.from, a.to }
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/minke/tasks/test.rb
    CHANGED
    
    
    
        data/lib/minke/version.rb
    CHANGED
    
    
    
        data/lib/minke.rb
    CHANGED
    
    | 
         @@ -17,16 +17,23 @@ require 'sshkey' 
     | 
|
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
            require 'minke/version'
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
            require 'minke/helpers/ 
     | 
| 
      
 20 
     | 
    
         
            +
            require 'minke/helpers/copy'
         
     | 
| 
      
 21 
     | 
    
         
            +
            require 'minke/helpers/error'
         
     | 
| 
      
 22 
     | 
    
         
            +
            require 'minke/helpers/logger'
         
     | 
| 
      
 23 
     | 
    
         
            +
            require 'minke/helpers/rake'
         
     | 
| 
      
 24 
     | 
    
         
            +
            require 'minke/helpers/shell'
         
     | 
| 
       21 
25 
     | 
    
         | 
| 
       22 
26 
     | 
    
         
             
            require 'minke/docker/docker_compose'
         
     | 
| 
       23 
27 
     | 
    
         
             
            require 'minke/docker/docker_runner'
         
     | 
| 
       24 
     | 
    
         
            -
            require 'minke/docker/system_runner'
         
     | 
| 
       25 
28 
     | 
    
         
             
            require 'minke/docker/service_discovery'
         
     | 
| 
      
 29 
     | 
    
         
            +
            require 'minke/docker/health_check'
         
     | 
| 
      
 30 
     | 
    
         
            +
            require 'minke/docker/consul'
         
     | 
| 
      
 31 
     | 
    
         
            +
            require 'minke/docker/network'
         
     | 
| 
       26 
32 
     | 
    
         | 
| 
       27 
33 
     | 
    
         
             
            require 'minke/config/config'
         
     | 
| 
       28 
34 
     | 
    
         
             
            require 'minke/config/reader'
         
     | 
| 
       29 
35 
     | 
    
         | 
| 
      
 36 
     | 
    
         
            +
            require 'minke/tasks/task_runner'
         
     | 
| 
       30 
37 
     | 
    
         
             
            require 'minke/tasks/task'
         
     | 
| 
       31 
38 
     | 
    
         
             
            require 'minke/tasks/build'
         
     | 
| 
       32 
39 
     | 
    
         
             
            require 'minke/tasks/cucumber'
         
     | 
    
        data/minke.gemspec
    CHANGED
    
    | 
         @@ -23,6 +23,7 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       23 
23 
     | 
    
         
             
              spec.add_development_dependency 'rspec'
         
     | 
| 
       24 
24 
     | 
    
         
             
              spec.add_development_dependency 'guard'
         
     | 
| 
       25 
25 
     | 
    
         
             
              spec.add_development_dependency 'guard-rspec'
         
     | 
| 
      
 26 
     | 
    
         
            +
              spec.add_development_dependency 'webmock'
         
     | 
| 
       26 
27 
     | 
    
         | 
| 
       27 
28 
     | 
    
         
             
              spec.add_runtime_dependency 'sshkey'
         
     | 
| 
       28 
29 
     | 
    
         
             
              spec.add_runtime_dependency 'colorize'
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: minke
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.11.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Nic Jackson
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2016-07- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2016-07-18 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     | 
| 
         @@ -66,6 +66,20 @@ dependencies: 
     | 
|
| 
       66 
66 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
       67 
67 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       68 
68 
     | 
    
         
             
                    version: '0'
         
     | 
| 
      
 69 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 70 
     | 
    
         
            +
              name: webmock
         
     | 
| 
      
 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'
         
     | 
| 
       69 
83 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       70 
84 
     | 
    
         
             
              name: sshkey
         
     | 
| 
       71 
85 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -209,10 +223,12 @@ files: 
     | 
|
| 
       209 
223 
     | 
    
         
             
            - lib/minke.rb
         
     | 
| 
       210 
224 
     | 
    
         
             
            - lib/minke/config/config.rb
         
     | 
| 
       211 
225 
     | 
    
         
             
            - lib/minke/config/reader.rb
         
     | 
| 
      
 226 
     | 
    
         
            +
            - lib/minke/docker/consul.rb
         
     | 
| 
       212 
227 
     | 
    
         
             
            - lib/minke/docker/docker_compose.rb
         
     | 
| 
       213 
228 
     | 
    
         
             
            - lib/minke/docker/docker_runner.rb
         
     | 
| 
      
 229 
     | 
    
         
            +
            - lib/minke/docker/health_check.rb
         
     | 
| 
      
 230 
     | 
    
         
            +
            - lib/minke/docker/network.rb
         
     | 
| 
       214 
231 
     | 
    
         
             
            - lib/minke/docker/service_discovery.rb
         
     | 
| 
       215 
     | 
    
         
            -
            - lib/minke/docker/system_runner.rb
         
     | 
| 
       216 
232 
     | 
    
         
             
            - lib/minke/encryption/encryption.rb
         
     | 
| 
       217 
233 
     | 
    
         
             
            - lib/minke/encryption/key_locator.rb
         
     | 
| 
       218 
234 
     | 
    
         
             
            - lib/minke/generators/config.rb
         
     | 
| 
         @@ -221,7 +237,11 @@ files: 
     | 
|
| 
       221 
237 
     | 
    
         
             
            - lib/minke/generators/processor.rb
         
     | 
| 
       222 
238 
     | 
    
         
             
            - lib/minke/generators/register.rb
         
     | 
| 
       223 
239 
     | 
    
         
             
            - lib/minke/generators/shell_script.rb
         
     | 
| 
       224 
     | 
    
         
            -
            - lib/minke/helpers/ 
     | 
| 
      
 240 
     | 
    
         
            +
            - lib/minke/helpers/copy.rb
         
     | 
| 
      
 241 
     | 
    
         
            +
            - lib/minke/helpers/error.rb
         
     | 
| 
      
 242 
     | 
    
         
            +
            - lib/minke/helpers/logger.rb
         
     | 
| 
      
 243 
     | 
    
         
            +
            - lib/minke/helpers/rake.rb
         
     | 
| 
      
 244 
     | 
    
         
            +
            - lib/minke/helpers/shell.rb
         
     | 
| 
       225 
245 
     | 
    
         
             
            - lib/minke/rake/app.rake
         
     | 
| 
       226 
246 
     | 
    
         
             
            - lib/minke/rake/config.rake
         
     | 
| 
       227 
247 
     | 
    
         
             
            - lib/minke/rake/docker.rake
         
     | 
| 
         @@ -233,6 +253,7 @@ files: 
     | 
|
| 
       233 
253 
     | 
    
         
             
            - lib/minke/tasks/push.rb
         
     | 
| 
       234 
254 
     | 
    
         
             
            - lib/minke/tasks/run.rb
         
     | 
| 
       235 
255 
     | 
    
         
             
            - lib/minke/tasks/task.rb
         
     | 
| 
      
 256 
     | 
    
         
            +
            - lib/minke/tasks/task_runner.rb
         
     | 
| 
       236 
257 
     | 
    
         
             
            - lib/minke/tasks/test.rb
         
     | 
| 
       237 
258 
     | 
    
         
             
            - lib/minke/version.rb
         
     | 
| 
       238 
259 
     | 
    
         
             
            - minke.gemspec
         
     | 
    
        data/lib/minke/helpers/helper.rb
    DELETED
    
    | 
         @@ -1,68 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module Minke
         
     | 
| 
       2 
     | 
    
         
            -
              module Helpers
         
     | 
| 
       3 
     | 
    
         
            -
                class Helper
         
     | 
| 
       4 
     | 
    
         
            -
                  ##
         
     | 
| 
       5 
     | 
    
         
            -
                  # copy assets from one location to another
         
     | 
| 
       6 
     | 
    
         
            -
                  def copy_assets from, to
         
     | 
| 
       7 
     | 
    
         
            -
                    directory = to
         
     | 
| 
       8 
     | 
    
         
            -
                    if File.directory?(to)
         
     | 
| 
       9 
     | 
    
         
            -
                      directory = File.dirname(to)
         
     | 
| 
       10 
     | 
    
         
            -
                    end
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                    Dir.mkdir directory unless Dir.exist? to
         
     | 
| 
       13 
     | 
    
         
            -
                    FileUtils.cp_r from, to
         
     | 
| 
       14 
     | 
    
         
            -
                  end
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                  ##
         
     | 
| 
       17 
     | 
    
         
            -
                  # invoke a rake task
         
     | 
| 
       18 
     | 
    
         
            -
                  def invoke_task task
         
     | 
| 
       19 
     | 
    
         
            -
                    Rake::Task[task].invoke
         
     | 
| 
       20 
     | 
    
         
            -
                  end
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                  def load_consul_data server, config_file
         
     | 
| 
       23 
     | 
    
         
            -
                    wait_for_HTTPOK "#{server}/v1/status/leader", 0, 1
         
     | 
| 
       24 
     | 
    
         
            -
                    loader = ConsulLoader::Loader.new(ConsulLoader::ConfigParser.new)
         
     | 
| 
       25 
     | 
    
         
            -
                    puts config_file
         
     | 
| 
       26 
     | 
    
         
            -
                    loader.load_config config_file, server
         
     | 
| 
       27 
     | 
    
         
            -
                  end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                  def execute_shell_command command
         
     | 
| 
       30 
     | 
    
         
            -
                    puts `#{command}`
         
     | 
| 
       31 
     | 
    
         
            -
                    $?.exitstatus
         
     | 
| 
       32 
     | 
    
         
            -
                  end
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
                  def fatal_error message
         
     | 
| 
       35 
     | 
    
         
            -
                    abort message
         
     | 
| 
       36 
     | 
    
         
            -
                  end
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                  ##
         
     | 
| 
       39 
     | 
    
         
            -
                  # waits until a 200 response is received from the given url
         
     | 
| 
       40 
     | 
    
         
            -
                  def wait_for_HTTPOK url, count, successes = 3
         
     | 
| 
       41 
     | 
    
         
            -
                    begin
         
     | 
| 
       42 
     | 
    
         
            -
                      response = RestClient.send("get", url)
         
     | 
| 
       43 
     | 
    
         
            -
                    rescue
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                    end
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
                    if response == nil || !response.code.to_i == 200
         
     | 
| 
       48 
     | 
    
         
            -
                      puts "Waiting for server #{url} to start"
         
     | 
| 
       49 
     | 
    
         
            -
                      sleep 1
         
     | 
| 
       50 
     | 
    
         
            -
                      if count < 180
         
     | 
| 
       51 
     | 
    
         
            -
                        wait_for_HTTPOK url, count + 1
         
     | 
| 
       52 
     | 
    
         
            -
                      else
         
     | 
| 
       53 
     | 
    
         
            -
                        raise 'Server failed to start'
         
     | 
| 
       54 
     | 
    
         
            -
                      end
         
     | 
| 
       55 
     | 
    
         
            -
                    else
         
     | 
| 
       56 
     | 
    
         
            -
                      if successes > 0
         
     | 
| 
       57 
     | 
    
         
            -
                        puts "Server: #{url} passed health check, #{successes} checks to go..."
         
     | 
| 
       58 
     | 
    
         
            -
                        sleep 1
         
     | 
| 
       59 
     | 
    
         
            -
                        wait_for_HTTPOK url, count + 1, successes - 1
         
     | 
| 
       60 
     | 
    
         
            -
                      else
         
     | 
| 
       61 
     | 
    
         
            -
                        puts "Server: #{url} healthy"
         
     | 
| 
       62 
     | 
    
         
            -
                      end
         
     | 
| 
       63 
     | 
    
         
            -
                    end
         
     | 
| 
       64 
     | 
    
         
            -
                  end
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
                end
         
     | 
| 
       67 
     | 
    
         
            -
              end
         
     | 
| 
       68 
     | 
    
         
            -
            end
         
     |