Class: SwarmClusterCliOpe::BaseConfiguration

Inherits:
Object
  • Object
show all
Includes:
Singleton, LoggerConcern
Defined in:
lib/swarm_cluster_cli_ope/base_configuration.rb

Overview

Classe Base delle configurazioni, utilizzabile per swarm e kubernetes

Direct Known Subclasses

Configuration, Kubernetes::Configuration

Constant Summary collapse

NoBaseConfigurations =
Class.new(Error)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from LoggerConcern

#logger

Instance Attribute Details

#environmentString

Returns in che enviroment siamo, altrimenti siamo nel default.

Returns:

  • (String)

    in che enviroment siamo, altrimenti siamo nel default



12
13
14
# File 'lib/swarm_cluster_cli_ope/base_configuration.rb', line 12

def environment
  @environment
end

#stack_nameString, NilClass

Returns nome dello stack del progetto se configurato.

Returns:

  • (String, NilClass)

    nome dello stack del progetto se configurato



9
10
11
# File 'lib/swarm_cluster_cli_ope/base_configuration.rb', line 9

def stack_name
  @stack_name
end

Class Method Details

.base_cfg_pathString

Returns path to base home configurations.

Returns:

  • (String)

    path to base home configurations



72
73
74
# File 'lib/swarm_cluster_cli_ope/base_configuration.rb', line 72

def self.base_cfg_path
  File.join(ENV['HOME'], '.swarm_cluster', 'config.json')
end

.exist_base?Boolean

Controlla se esiste il file di configurazione base, nella home dell’utente

Returns:

  • (Boolean)


66
67
68
# File 'lib/swarm_cluster_cli_ope/base_configuration.rb', line 66

def self.exist_base?
  File.exist?(base_cfg_path)
end

Instance Method Details

#development_mode?TrueClass, FalseClass

Siamo in sviluppo?

Returns:

  • (TrueClass, FalseClass)


59
60
61
62
# File 'lib/swarm_cluster_cli_ope/base_configuration.rb', line 59

def development_mode?
  return false unless self.class.exist_base?
  merged_configurations.key?(:dev_mode)
end

#env(enviroment = nil) {|_self| ... } ⇒ Object

Serve per entrare nell’env corretto. passando l’env, tutto quello eseguito nello yield sarà gestito in quell’env. Verrà controllato quindi che esista il relativo file di configurazion

Yields:

  • (_self)

Yield Parameters:



20
21
22
23
24
25
26
27
# File 'lib/swarm_cluster_cli_ope/base_configuration.rb', line 20

def env(enviroment = nil)
  unless enviroment.nil?
    @environment = enviroment.to_s.to_sym
  end
  logger.info { "ENV: #{@environment ? @environment : "BASE"}" }
  yield self
  @environment = nil
end

#get_syncro(name) ⇒ Class<SwarmClusterCliOpe::SyncConfigs::PostGres>, ...

Funzione per la restituzione della classe di sincro corretta



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/swarm_cluster_cli_ope/base_configuration.rb', line 95

def get_syncro(name)
  case name
  when 'sqlite3'
    SyncConfigs::Sqlite3
  when 'rsync'
    SyncConfigs::Rsync
  when 'mysql'
    SyncConfigs::Mysql
  when 'pg'
    SyncConfigs::PostGres
  when 'mongodb'
    SyncConfigs::MongoDb
  else
    logger.error { "CONFIGURAIONE NON PREVISTA: #{name}" }
    nil
  end
end

#local_compose_project_nameString

Indica il nome del progetto locale compose, quella parte di nome che viene attaccata in fronte ad ogni nome di servizio locale, e che come default è il nome della cartella in cui risiede il docker-compose.yml file

Returns:

  • (String)


182
183
184
# File 'lib/swarm_cluster_cli_ope/base_configuration.rb', line 182

def local_compose_project_name
  File.basename(FileUtils.pwd).downcase
end

#logger_levelInteger

Livello di logging

Returns:

  • (Integer)


48
49
50
51
52
53
54
# File 'lib/swarm_cluster_cli_ope/base_configuration.rb', line 48

def logger_level
  merged_configurations[:log_level].to_s || "0"
rescue SwarmClusterCliOpe::Configuration::NoBaseConfigurations
  # quando andiamo in errore durante l'installazione per avere le informazioni per il logger.
  # Usiamo lo standard
  "0"
end

#merged_configurationsHash

Cerca le configurazioni di progetto e le mergia se sono presenti

Returns:

  • (Hash)


115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/swarm_cluster_cli_ope/base_configuration.rb', line 115

def merged_configurations
  return @_merged_configurations[@environment] if @_merged_configurations

  @_merged_configurations = Hash.new do |hash, key|
    folder = FileUtils.pwd
    default_file = looped_file(folder, self.class.cfgs_project_file_name)
    enviroment_file = looped_file(folder, self.class.cfgs_project_file_name(with_env: key))

    project_cfgs = {}
    unless default_file.nil?
      project_cfgs = JSON.parse(File.read(default_file)).deep_symbolize_keys
    end

    unless enviroment_file.nil?
      project_cfgs.merge!(JSON.parse(File.read(enviroment_file)).deep_symbolize_keys)
    end

    hash[key] = self.class.read_base.merge(project_cfgs)
  end

  configuration_version = @_merged_configurations[@environment][:version]
  if Gem::Version.new(configuration_version) > Gem::Version.new(VERSION)
    puts "WARNING: Versione del file di configurazione [#{configuration_version}] più aggiornata della gemma [#{VERSION}], eseguire upgrade
          gem update swarm_cluster_cli_ope"
    exit
  end

  evaluate_correct_command_usage(@_merged_configurations[@environment])

  @_merged_configurations[@environment]

end

#save_base_cfgsObject

Salva le configurazioni base in HOME



165
166
167
168
169
170
171
172
173
174
175
# File 'lib/swarm_cluster_cli_ope/base_configuration.rb', line 165

def save_base_cfgs
  FileUtils.mkdir_p(File.dirname(self.class.base_cfg_path))
  File.open(self.class.base_cfg_path, "wb") do |f|
    obj= {
      version: SwarmClusterCliOpe::VERSION,
    }
    obj = yield(obj) if block_given?

    f.write(obj.to_json)
  end
end

#save_project_cfgsObject

Si occupa del salvataggio delle configurazioni di progetto, se abbiamo lo stack_name



151
152
153
154
155
156
157
158
159
160
# File 'lib/swarm_cluster_cli_ope/base_configuration.rb', line 151

def save_project_cfgs
  if stack_name
    File.open(File.join(FileUtils.pwd, self.class.cfgs_project_file_name(with_env: @environment)), "wb") do |f|
      f.write({
                stack_name: stack_name,
                version: VERSION
              }.to_json)
    end
  end
end

#sync_configurationsArray

Elenco di tutte le configurazioni di sincronizzazione

Returns:

  • (Array)


80
81
82
83
84
85
86
87
88
89
90
# File 'lib/swarm_cluster_cli_ope/base_configuration.rb', line 80

def sync_configurations
  cfgs = merged_configurations[:sync_configs]
  return [] if cfgs.nil? or !cfgs.is_a?(Array)
  cfgs.collect do |c|

    if self.get_syncro(c[:how])
      self.get_syncro(c[:how]).new(self, c)
    end

  end.compact
end