Module: Kuby

Defined in:
lib/kuby/plugin.rb,
lib/kuby.rb,
lib/kuby/tasks.rb,
lib/kuby/docker.rb,
lib/kuby/plugins.rb,
lib/kuby/railtie.rb,
lib/kuby/version.rb,
lib/kuby/cli_base.rb,
lib/kuby/commands.rb,
lib/kuby/dev_setup.rb,
lib/kuby/definition.rb,
lib/kuby/docker/cli.rb,
lib/kuby/kubernetes.rb,
lib/kuby/middleware.rb,
lib/kuby/docker/spec.rb,
lib/kuby/docker/tags.rb,
lib/kuby/environment.rb,
lib/kuby/basic_logger.rb,
lib/kuby/docker/layer.rb,
lib/kuby/docker/alpine.rb,
lib/kuby/docker/debian.rb,
lib/kuby/docker/distro.rb,
lib/kuby/docker/errors.rb,
lib/kuby/trailing_hash.rb,
lib/kuby/rails_commands.rb,
lib/kuby/docker/dev_spec.rb,
lib/kuby/docker/metadata.rb,
lib/kuby/docker/packages.rb,
lib/kuby/kubernetes/spec.rb,
lib/kuby/plugin_registry.rb,
lib/kuby/docker/copy_phase.rb,
lib/kuby/docker/dockerfile.rb,
lib/kuby/docker/local_tags.rb,
lib/kuby/docker/yarn_phase.rb,
lib/kuby/kubernetes/errors.rb,
lib/kuby/plugins/rails_app.rb,
lib/kuby/docker/credentials.rb,
lib/kuby/docker/layer_stack.rb,
lib/kuby/docker/remote_tags.rb,
lib/kuby/docker/setup_phase.rb,
lib/kuby/docker/assets_phase.rb,
lib/kuby/docker/inline_layer.rb,
lib/kuby/docker/package_list.rb,
lib/kuby/kubernetes/deployer.rb,
lib/kuby/kubernetes/manifest.rb,
lib/kuby/kubernetes/provider.rb,
lib/kuby/docker/bundler_phase.rb,
lib/kuby/docker/package_phase.rb,
lib/kuby/docker/packages/yarn.rb,
lib/kuby/docker/timestamp_tag.rb,
lib/kuby/plugins/nginx_ingress.rb,
lib/kuby/docker/packages/nodejs.rb,
lib/kuby/docker/webserver_phase.rb,
lib/kuby/kubernetes/deploy_task.rb,
lib/kuby/docker/packages/package.rb,
lib/kuby/middleware/health_check.rb,
lib/kuby/plugins/rails_app/mysql.rb,
lib/kuby/kubernetes/docker_config.rb,
lib/kuby/plugins/rails_app/assets.rb,
lib/kuby/plugins/rails_app/plugin.rb,
lib/kuby/plugins/rails_app/sqlite.rb,
lib/kuby/kubernetes/registry_secret.rb,
lib/kuby/plugins/rails_app/database.rb,
lib/kuby/plugins/rails_app/postgres.rb,
lib/kuby/docker/packages/managed_package.rb,
lib/kuby/plugins/rails_app/asset_copy_task.rb,
lib/kuby/kubernetes/docker_desktop_provider.rb,
lib/kuby/plugins/rails_app/rewrite_db_config.rb,
lib/kuby/docker/packages/simple_managed_package.rb

Overview

typed: strict

Defined Under Namespace

Modules: Docker, Kubernetes, Middleware, Plugins Classes: Args, BasicLogger, CLIBase, Commands, Definition, DevSetup, Environment, MissingConfigError, Pipe, Pipes, Plugin, PluginRegistry, RailsCommands, Railtie, SetupTask, SetupTaskList, Spinner, Tasks, TrailingHash, UndefinedEnvironmentError

Constant Summary collapse

DEFAULT_ENV =
'development'.freeze
DEFAULT_DB_USER =
'root'.freeze
DEFAULT_DB_PASSWORD =
'password'.freeze
VERSION =
'0.11.6'.freeze

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.definitionObject (readonly)

Returns the value of attribute definition.



36
37
38
# File 'lib/kuby.rb', line 36

def definition
  @definition
end

.loggerObject



115
116
117
# File 'lib/kuby.rb', line 115

def logger
  @logger ||= BasicLogger.new(STDERR)
end

Class Method Details

.define(name, &block) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/kuby.rb', line 49

def define(name, &block)
  raise 'Kuby is already configured' if @definition

  @definition = Definition.new(name.to_s)
  @definition.instance_eval(&block)

  # default development environment
  @definition.environment(:development) do
    kubernetes do
      add_plugin(:rails_app) do
        tls_enabled false

        database do
          if requires_credentials?
            user(DEFAULT_DB_USER)
            password(DEFAULT_DB_PASSWORD)
          end
        end
      end

      provider :docker_desktop
    end
  end

  @definition.environments.each do |_, env|
    env.kubernetes.after_configuration
  end

  @definition.environments.each do |_, env|
    env.configured = true
  end

  @definition
end

.distrosObject



107
108
109
# File 'lib/kuby.rb', line 107

def distros
  @distros ||= {}
end

.envObject



146
147
148
149
150
# File 'lib/kuby.rb', line 146

def env
  ENV.fetch('KUBY_ENV') do
    (@env || Rails.env rescue nil || DEFAULT_ENV).to_s
  end
end

.env=(env_name) ⇒ Object



142
143
144
# File 'lib/kuby.rb', line 142

def env=(env_name)
  @env = env_name.to_s
end

.environment(name = env) ⇒ Object



84
85
86
87
88
89
# File 'lib/kuby.rb', line 84

def environment(name = env)
  definition.environment(name.to_s) || raise(
    UndefinedEnvironmentError, "couldn't find a Kuby environment named "\
    "'#{name}'"
  )
end

.load!(config_file = nil) ⇒ Object



39
40
41
42
43
44
45
46
47
# File 'lib/kuby.rb', line 39

def load!(config_file = nil)
  config_file ||= ENV['KUBY_CONFIG'] || File.join('.', 'kuby.rb')

  unless File.exist?(config_file)
    raise MissingConfigError, "couldn't find Kuby config file at #{config_file}"
  end

  require config_file
end

.packagesObject



138
139
140
# File 'lib/kuby.rb', line 138

def packages
  @packages ||= {}
end

.pluginsObject



111
112
113
# File 'lib/kuby.rb', line 111

def plugins
  @plugins ||= PluginRegistry.new
end

.providersObject



95
96
97
# File 'lib/kuby.rb', line 95

def providers
  @providers ||= {}
end

.register_distro(distro_name, distro_klass) ⇒ Object



103
104
105
# File 'lib/kuby.rb', line 103

def register_distro(distro_name, distro_klass)
  distros[distro_name] = distro_klass
end

.register_package(package_name, package_def = nil) ⇒ Object



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/kuby.rb', line 119

def register_package(package_name, package_def = nil)
  packages[package_name] = case package_def
    when NilClass
      Kuby::Docker::Packages::SimpleManagedPackage.new(
        package_name
      )
    when String
      Kuby::Docker::Packages::SimpleManagedPackage.new(
        package_def
      )
    when Hash
      Kuby::Docker::Packages::ManagedPackage.new(
        package_name, package_def
      )
    else
      package_def.new(package_name)
  end
end

.register_plugin(*args, **kwargs) ⇒ Object



99
100
101
# File 'lib/kuby.rb', line 99

def register_plugin(*args, **kwargs)
  plugins.register(*args, **kwargs)
end

.register_provider(provider_name, provider_klass) ⇒ Object



91
92
93
# File 'lib/kuby.rb', line 91

def register_provider(provider_name, provider_klass)
  providers[provider_name] = provider_klass
end