Sha256: 703d88d1ab4ac5029e6673dd7d02ddb35c508e54ff6c85f39a5cfd6871c99776

Contents?: true

Size: 1.94 KB

Versions: 3

Compression:

Stored size: 1.94 KB

Contents

require_relative 'tasks/container.rb'

module Capistrano
  module Container
    require_relative 'container/instance.rb'
    require_relative 'container/manager.rb'
    require_relative 'container/mixins.rb'
  end
end

$container_manager = Manager.new

module Capistrano
  module DSL
    def container(name, config = {})
      # self gives access to capistrano dsl inside a container instance
      $container_manager.add(name, config)
    end

    def on_container_roles(container_roles, &block)
      container_by_roles(container_roles).each do |container|
        on roles(container.container_role) do |host|
          container.dsl = self
          block.call container, host
        end
      end
    end

    def on_container(container, &block)
      on roles(container.container_role) do |host|
        container.dsl = self
        block.call container, host
      end
    end

    def container_by_roles(roles)
      $container_manager.by_roles(roles).map do |container|
        container.dsl = self
        container
      end
    end

    def container_by_name(name)
      tmp = $container_manager.by_name(name)
      tmp.dsl = self
      tmp
    end

    def container_by_id(id)
      tmp = $container_manager.by_id(id)
      tmp.dsl = self
      tmp
    end

    def run_container_command(command, container = nil)
      if command.include?('{container_id}')
        if container.nil?
          container_id = ask_for_container_id
          container    = container_by_id container_id
        end

        command.gsub!('{container_id}', container.container_id)

        on roles(container.container_role) do |host|
          container.dsl = self

          puts capture("docker #{command}")
        end

      else
        on roles(:container_host) do
            puts capture("docker #{command}")
        end
      end
    end

    def ask_for_container_id()
      invoke 'container:all'

      ask(:container_id, "container id?")

      fetch(:container_id)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
capistrano-container-0.0.4 lib/capistrano/container.rb
capistrano-container-0.0.3 lib/capistrano/container.rb
capistrano-container-0.0.2 lib/capistrano/container.rb