Class: Mrsk::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/mrsk/configuration.rb

Defined Under Namespace

Classes: Accessory, Role

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(raw_config, version: "missing", validate: true) ⇒ Configuration

Returns a new instance of Configuration.



40
41
42
43
44
# File 'lib/mrsk/configuration.rb', line 40

def initialize(raw_config, version: "missing", validate: true)
  @raw_config = ActiveSupport::InheritableOptions.new(raw_config)
  @version = version
  valid? if validate
end

Instance Attribute Details

#raw_configObject

Returns the value of attribute raw_config.



13
14
15
# File 'lib/mrsk/configuration.rb', line 13

def raw_config
  @raw_config
end

#versionObject

Returns the value of attribute version.



12
13
14
# File 'lib/mrsk/configuration.rb', line 12

def version
  @version
end

Class Method Details

.create_from(base_config_file, destination: nil, version: "missing") ⇒ Object



16
17
18
19
20
21
22
23
# File 'lib/mrsk/configuration.rb', line 16

def create_from(base_config_file, destination: nil, version: "missing")
  new(load_config_file(base_config_file).tap do |config|
    if destination
      config.deep_merge! \
        load_config_file destination_config_file(base_config_file, destination)
    end
  end, version: version)
end

Instance Method Details

#absolute_imageObject



81
82
83
# File 'lib/mrsk/configuration.rb', line 81

def absolute_image
  "#{repository}:#{version}"
end

#accessoriesObject



55
56
57
# File 'lib/mrsk/configuration.rb', line 55

def accessories
  @accessories ||= raw_config.accessories&.keys&.collect { |name| Mrsk::Configuration::Accessory.new(name, config: self) } || []
end

#accessory(name) ⇒ Object



59
60
61
# File 'lib/mrsk/configuration.rb', line 59

def accessory(name)
  accessories.detect { |a| a.name == name.to_s }
end

#all_hostsObject



64
65
66
# File 'lib/mrsk/configuration.rb', line 64

def all_hosts
  roles.flat_map(&:hosts)
end

#env_argsObject



90
91
92
93
94
95
96
# File 'lib/mrsk/configuration.rb', line 90

def env_args
  if raw_config.env.present?
    argumentize_env_with_secrets(raw_config.env)
  else
    []
  end
end

#master_keyObject



114
115
116
117
118
# File 'lib/mrsk/configuration.rb', line 114

def master_key
  unless raw_config.skip_master_key
    ENV["RAILS_MASTER_KEY"] || File.read(Pathname.new(File.expand_path("config/master.key")))
  end
end

#primary_web_hostObject



68
69
70
# File 'lib/mrsk/configuration.rb', line 68

def primary_web_host
  role(:web).hosts.first
end

#repositoryObject



77
78
79
# File 'lib/mrsk/configuration.rb', line 77

def repository
  [ raw_config.registry["server"], image ].compact.join("/")
end

#role(name) ⇒ Object



51
52
53
# File 'lib/mrsk/configuration.rb', line 51

def role(name)
  roles.detect { |r| r.name == name.to_s }
end

#rolesObject



47
48
49
# File 'lib/mrsk/configuration.rb', line 47

def roles
  @roles ||= role_names.collect { |role_name| Role.new(role_name, config: self) }
end

#service_with_versionObject



85
86
87
# File 'lib/mrsk/configuration.rb', line 85

def service_with_version
  "#{service}-#{version}"
end

#ssh_optionsObject



110
111
112
# File 'lib/mrsk/configuration.rb', line 110

def ssh_options
  { user: ssh_user, auth_methods: [ "publickey" ] }
end

#ssh_userObject



106
107
108
# File 'lib/mrsk/configuration.rb', line 106

def ssh_user
  raw_config.ssh_user || "root"
end

#to_hObject



126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/mrsk/configuration.rb', line 126

def to_h
  {
    roles: role_names,
    hosts: all_hosts,
    primary_host: primary_web_host,
    version: version,
    repository: repository,
    absolute_image: absolute_image,
    service_with_version: service_with_version,
    env_args: env_args,
    volume_args: volume_args,
    ssh_options: ssh_options,
    builder: raw_config.builder,
    accessories: raw_config.accessories
  }.compact
end

#traefik_hostsObject



72
73
74
# File 'lib/mrsk/configuration.rb', line 72

def traefik_hosts
  roles.select(&:running_traefik?).flat_map(&:hosts)
end

#valid?Boolean

Returns:

  • (Boolean)


121
122
123
# File 'lib/mrsk/configuration.rb', line 121

def valid?
  ensure_required_keys_present && ensure_env_available
end

#volume_argsObject



98
99
100
101
102
103
104
# File 'lib/mrsk/configuration.rb', line 98

def volume_args
  if raw_config.volumes.present?
    argumentize "--volume", raw_config.volumes
  else
    []
  end
end