swarm_cluster_cli_ope 0.4 → 0.5.0.pre.3
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 +4 -4
 - data/Gemfile.lock +4 -4
 - data/README.md +7 -2
 - data/lib/swarm_cluster_cli_ope/base_configuration.rb +211 -0
 - data/lib/swarm_cluster_cli_ope/cli.rb +6 -129
 - data/lib/swarm_cluster_cli_ope/configuration.rb +3 -182
 - data/lib/swarm_cluster_cli_ope/configuration_concern.rb +10 -9
 - data/lib/swarm_cluster_cli_ope/k8s.rb +90 -0
 - data/lib/swarm_cluster_cli_ope/kubernetes/configuration.rb +49 -0
 - data/lib/swarm_cluster_cli_ope/kubernetes/pod.rb +143 -0
 - data/lib/swarm_cluster_cli_ope/kubernetes/rsync_cfgs/password +1 -0
 - data/lib/swarm_cluster_cli_ope/kubernetes/rsync_cfgs/rsyncd.conf +14 -0
 - data/lib/swarm_cluster_cli_ope/kubernetes/rsync_cfgs/rsyncd.secrets +1 -0
 - data/lib/swarm_cluster_cli_ope/kubernetes/sync_configs/base_decorator.rb +28 -0
 - data/lib/swarm_cluster_cli_ope/kubernetes/sync_configs/rsync.rb +119 -0
 - data/lib/swarm_cluster_cli_ope/kubernetes/sync_configs/sqlite3.rb +9 -0
 - data/lib/swarm_cluster_cli_ope/shell_command_execution.rb +1 -1
 - data/lib/swarm_cluster_cli_ope/shell_command_response.rb +8 -1
 - data/lib/swarm_cluster_cli_ope/stack_sync_concern.rb +128 -0
 - data/lib/swarm_cluster_cli_ope/sync_configs/base.rb +1 -1
 - data/lib/swarm_cluster_cli_ope/sync_configs/base_database.rb +5 -3
 - data/lib/swarm_cluster_cli_ope/sync_configs/mysql.rb +2 -0
 - data/lib/swarm_cluster_cli_ope/sync_configs/post_gres.rb +92 -48
 - data/lib/swarm_cluster_cli_ope/thor_configuration_concern.rb +29 -0
 - data/lib/swarm_cluster_cli_ope/version.rb +1 -1
 - metadata +16 -4
 
| 
         @@ -8,17 +8,8 @@ module SwarmClusterCliOpe 
     | 
|
| 
       8 
8 
     | 
    
         
             
              # Classe per la gestione delle configurazioni, unisce le configurazioni di base alle configurazioni di progetto;
         
     | 
| 
       9 
9 
     | 
    
         
             
              # le quali sono salvate nel file di configurazione del progetto .swarm_cluster_project sottoforma di json
         
     | 
| 
       10 
10 
     | 
    
         
             
              # che vengono mergiate sulle configurazioni base
         
     | 
| 
       11 
     | 
    
         
            -
              class Configuration
         
     | 
| 
       12 
     | 
    
         
            -
                include Singleton
         
     | 
| 
       13 
     | 
    
         
            -
                include LoggerConcern
         
     | 
| 
      
 11 
     | 
    
         
            +
              class Configuration < BaseConfiguration
         
     | 
| 
       14 
12 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
                #@return [String] nome dello stack con cui lavoriamo
         
     | 
| 
       16 
     | 
    
         
            -
                attr_accessor :stack_name
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
                #@return [String] in che enviroment siamo, altrimenti siamo nel default
         
     | 
| 
       19 
     | 
    
         
            -
                attr_accessor :environment
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                NoBaseConfigurations = Class.new(Error)
         
     | 
| 
       22 
13 
     | 
    
         | 
| 
       23 
14 
     | 
    
         
             
                ##
         
     | 
| 
       24 
15 
     | 
    
         
             
                # Lista di nodi su cui lavorare
         
     | 
| 
         @@ -28,19 +19,6 @@ module SwarmClusterCliOpe 
     | 
|
| 
       28 
19 
     | 
    
         
             
                  @_managers = self.nodes.select { |n| read_managers_cache_list.include?(n.name) }.collect { |c| Manager.new(name: c.name.to_s, connection_uri: c.connection_uri) }
         
     | 
| 
       29 
20 
     | 
    
         
             
                end
         
     | 
| 
       30 
21 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
                ##
         
     | 
| 
       32 
     | 
    
         
            -
                # Serve per entrare nell'env corretto.
         
     | 
| 
       33 
     | 
    
         
            -
                # passando l'env, tutto quello eseguito nello yield sarà gestito in quell'env.
         
     | 
| 
       34 
     | 
    
         
            -
                # Verrà controllato quindi che esista il relativo file di configurazion
         
     | 
| 
       35 
     | 
    
         
            -
                def env(enviroment = nil)
         
     | 
| 
       36 
     | 
    
         
            -
                  unless enviroment.nil?
         
     | 
| 
       37 
     | 
    
         
            -
                    @environment = enviroment.to_s.to_sym
         
     | 
| 
       38 
     | 
    
         
            -
                  end
         
     | 
| 
       39 
     | 
    
         
            -
                  logger.info { "ENV: #{@environment ? @environment : "BASE"}" }
         
     | 
| 
       40 
     | 
    
         
            -
                  yield self
         
     | 
| 
       41 
     | 
    
         
            -
                  @environment = nil
         
     | 
| 
       42 
     | 
    
         
            -
                end
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
22 
     | 
    
         
             
                ##
         
     | 
| 
       45 
23 
     | 
    
         
             
                # Esegue un refresh della lista dei manager, ciclando su tutti i nodi, e scrivendo in /tmp un file temporaneo con
         
     | 
| 
       46 
24 
     | 
    
         
             
                # con la lista dei nomi dei managers
         
     | 
| 
         @@ -80,77 +58,14 @@ module SwarmClusterCliOpe 
     | 
|
| 
       80 
58 
     | 
    
         
             
                  self
         
     | 
| 
       81 
59 
     | 
    
         
             
                end
         
     | 
| 
       82 
60 
     | 
    
         | 
| 
       83 
     | 
    
         
            -
                # @return [String,NilClass] nome dello stack del progetto se configurato
         
     | 
| 
       84 
     | 
    
         
            -
                def stack_name
         
     | 
| 
       85 
     | 
    
         
            -
                  return nil unless self.class.exist_base?
         
     | 
| 
       86 
     | 
    
         
            -
                  @stack_name ||= Hash.new do |hash, key|
         
     | 
| 
       87 
     | 
    
         
            -
                    hash[key] = merged_configurations[:stack_name] if merged_configurations.key?(:stack_name)
         
     | 
| 
       88 
     | 
    
         
            -
                  end
         
     | 
| 
       89 
     | 
    
         
            -
                  @stack_name[environment]
         
     | 
| 
       90 
     | 
    
         
            -
                end
         
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
     | 
    
         
            -
                ##
         
     | 
| 
       93 
     | 
    
         
            -
                # Imposta il nome dello stack
         
     | 
| 
       94 
     | 
    
         
            -
                def stack_name=(objs)
         
     | 
| 
       95 
     | 
    
         
            -
                  stack_name #lo richiamo per fargli generare la variabile di classe
         
     | 
| 
       96 
     | 
    
         
            -
                  @stack_name[environment] = objs
         
     | 
| 
       97 
     | 
    
         
            -
                end
         
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
                ##
         
     | 
| 
       100 
     | 
    
         
            -
                # Livello di logging
         
     | 
| 
       101 
     | 
    
         
            -
                # @return [Integer]
         
     | 
| 
       102 
     | 
    
         
            -
                def logger_level
         
     | 
| 
       103 
     | 
    
         
            -
                  merged_configurations[:log_level].to_s || "0"
         
     | 
| 
       104 
     | 
    
         
            -
                rescue SwarmClusterCliOpe::Configuration::NoBaseConfigurations
         
     | 
| 
       105 
     | 
    
         
            -
                  # quando andiamo in errore durante l'installazione per avere le informazioni per il logger.
         
     | 
| 
       106 
     | 
    
         
            -
                  # Usiamo lo standard
         
     | 
| 
       107 
     | 
    
         
            -
                  "0"
         
     | 
| 
       108 
     | 
    
         
            -
                end
         
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
       110 
     | 
    
         
            -
                ##
         
     | 
| 
       111 
     | 
    
         
            -
                # Siamo in sviluppo?
         
     | 
| 
       112 
     | 
    
         
            -
                # @return [TrueClass, FalseClass]
         
     | 
| 
       113 
     | 
    
         
            -
                def development_mode?
         
     | 
| 
       114 
     | 
    
         
            -
                  return false unless self.class.exist_base?
         
     | 
| 
       115 
     | 
    
         
            -
                  merged_configurations.key?(:dev_mode)
         
     | 
| 
       116 
     | 
    
         
            -
                end
         
     | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
       118 
     | 
    
         
            -
                ##
         
     | 
| 
       119 
     | 
    
         
            -
                # Controlla se esiste il file di configurazione base, nella home dell'utente
         
     | 
| 
       120 
     | 
    
         
            -
                def self.exist_base?
         
     | 
| 
       121 
     | 
    
         
            -
                  File.exist?(base_cfg_path)
         
     | 
| 
       122 
     | 
    
         
            -
                end
         
     | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
61 
     | 
    
         
             
                ##
         
     | 
| 
       126 
62 
     | 
    
         
             
                # Salva le configurazioni base in HOME
         
     | 
| 
       127 
63 
     | 
    
         
             
                def save_base_cfgs
         
     | 
| 
       128 
     | 
    
         
            -
                   
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
       130 
     | 
    
         
            -
                    f.write({
         
     | 
| 
       131 
     | 
    
         
            -
                              version: SwarmClusterCliOpe::VERSION,
         
     | 
| 
       132 
     | 
    
         
            -
                              connections_maps: nodes.collect { |k| [k.name, k.connection_uri] }.to_h
         
     | 
| 
       133 
     | 
    
         
            -
                            }.to_json)
         
     | 
| 
       134 
     | 
    
         
            -
                  end
         
     | 
| 
       135 
     | 
    
         
            -
                end
         
     | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
                ##
         
     | 
| 
       138 
     | 
    
         
            -
                # Si occupa del salvataggio delle configurazioni di progetto, se abbiamo lo stack_name
         
     | 
| 
       139 
     | 
    
         
            -
                def save_project_cfgs
         
     | 
| 
       140 
     | 
    
         
            -
                  if stack_name
         
     | 
| 
       141 
     | 
    
         
            -
                    File.open(File.join(FileUtils.pwd, self.class.cfgs_project_file_name(with_env: @environment)), "wb") do |f|
         
     | 
| 
       142 
     | 
    
         
            -
                      f.write({
         
     | 
| 
       143 
     | 
    
         
            -
                                stack_name: stack_name,
         
     | 
| 
       144 
     | 
    
         
            -
                                version: VERSION
         
     | 
| 
       145 
     | 
    
         
            -
                              }.to_json)
         
     | 
| 
       146 
     | 
    
         
            -
                    end
         
     | 
| 
      
 64 
     | 
    
         
            +
                  super do |obj|
         
     | 
| 
      
 65 
     | 
    
         
            +
                    obj.merge({connections_maps: nodes.collect { |k| [k.name, k.connection_uri] }.to_h})
         
     | 
| 
       147 
66 
     | 
    
         
             
                  end
         
     | 
| 
       148 
67 
     | 
    
         
             
                end
         
     | 
| 
       149 
68 
     | 
    
         | 
| 
       150 
     | 
    
         
            -
                # @return [String] path to base home configurations
         
     | 
| 
       151 
     | 
    
         
            -
                def self.base_cfg_path
         
     | 
| 
       152 
     | 
    
         
            -
                  File.join(ENV['HOME'], '.swarm_cluster', 'config.json')
         
     | 
| 
       153 
     | 
    
         
            -
                end
         
     | 
| 
       154 
69 
     | 
    
         | 
| 
       155 
70 
     | 
    
         
             
                # @return [SwarmClusterCliOpe::Node]
         
     | 
| 
       156 
71 
     | 
    
         
             
                # @param [String] node nome del nodo
         
     | 
| 
         @@ -173,41 +88,8 @@ module SwarmClusterCliOpe 
     | 
|
| 
       173 
88 
     | 
    
         
             
                  File.basename(FileUtils.pwd).downcase
         
     | 
| 
       174 
89 
     | 
    
         
             
                end
         
     | 
| 
       175 
90 
     | 
    
         | 
| 
       176 
     | 
    
         
            -
                ##
         
     | 
| 
       177 
     | 
    
         
            -
                # Elenco di tutte le configurazioni di sincronizzazione
         
     | 
| 
       178 
     | 
    
         
            -
                # @return [Array]
         
     | 
| 
       179 
     | 
    
         
            -
                def sync_configurations
         
     | 
| 
       180 
     | 
    
         
            -
                  cfgs = merged_configurations[:sync_configs]
         
     | 
| 
       181 
     | 
    
         
            -
                  return [] if cfgs.nil? or !cfgs.is_a?(Array)
         
     | 
| 
       182 
     | 
    
         
            -
                  cfgs.collect do |c|
         
     | 
| 
       183 
     | 
    
         
            -
             
     | 
| 
       184 
     | 
    
         
            -
                    case c[:how]
         
     | 
| 
       185 
     | 
    
         
            -
                    when 'sqlite3'
         
     | 
| 
       186 
     | 
    
         
            -
                      SyncConfigs::Sqlite3.new(self, c)
         
     | 
| 
       187 
     | 
    
         
            -
                    when 'rsync'
         
     | 
| 
       188 
     | 
    
         
            -
                      SyncConfigs::Rsync.new(self, c)
         
     | 
| 
       189 
     | 
    
         
            -
                    when 'mysql'
         
     | 
| 
       190 
     | 
    
         
            -
                      SyncConfigs::Mysql.new(self, c)
         
     | 
| 
       191 
     | 
    
         
            -
                    when 'pg'
         
     | 
| 
       192 
     | 
    
         
            -
                      SyncConfigs::PostGres.new(self, c)
         
     | 
| 
       193 
     | 
    
         
            -
                    else
         
     | 
| 
       194 
     | 
    
         
            -
                      logger.error { "CONFIGURAIONE NON PREVISTA: #{c[:how]}" }
         
     | 
| 
       195 
     | 
    
         
            -
                      nil
         
     | 
| 
       196 
     | 
    
         
            -
                    end
         
     | 
| 
       197 
     | 
    
         
            -
             
     | 
| 
       198 
     | 
    
         
            -
                  end.compact
         
     | 
| 
       199 
     | 
    
         
            -
                end
         
     | 
| 
       200 
     | 
    
         
            -
             
     | 
| 
       201 
91 
     | 
    
         
             
                private
         
     | 
| 
       202 
92 
     | 
    
         | 
| 
       203 
     | 
    
         
            -
                ##
         
     | 
| 
       204 
     | 
    
         
            -
                # nome del file in cui salvare le configurazioni di progetto
         
     | 
| 
       205 
     | 
    
         
            -
                # @return [String]
         
     | 
| 
       206 
     | 
    
         
            -
                # @param [nil|String] with_env nome dell'env da cercare
         
     | 
| 
       207 
     | 
    
         
            -
                def self.cfgs_project_file_name(with_env: nil)
         
     | 
| 
       208 
     | 
    
         
            -
                  ".swarm_cluster_project#{with_env ? ".#{with_env}" : ""}"
         
     | 
| 
       209 
     | 
    
         
            -
                end
         
     | 
| 
       210 
     | 
    
         
            -
             
     | 
| 
       211 
93 
     | 
    
         
             
                ##
         
     | 
| 
       212 
94 
     | 
    
         
             
                # Path al file dove salviamo la cache dei managers, ha un TTL legato all'orario (anno-mese-giorno-ora)
         
     | 
| 
       213 
95 
     | 
    
         
             
                # quindi ogni ora si autoripulisce e con un md5 delle configurazioni di base
         
     | 
| 
         @@ -218,67 +100,6 @@ module SwarmClusterCliOpe 
     | 
|
| 
       218 
100 
     | 
    
         
             
                  File.join("/tmp", file_name)
         
     | 
| 
       219 
101 
     | 
    
         
             
                end
         
     | 
| 
       220 
102 
     | 
    
         | 
| 
       221 
     | 
    
         
            -
                ##
         
     | 
| 
       222 
     | 
    
         
            -
                # Legge le configurazioni base
         
     | 
| 
       223 
     | 
    
         
            -
                #
         
     | 
| 
       224 
     | 
    
         
            -
                # @return [Hash]
         
     | 
| 
       225 
     | 
    
         
            -
                def self.read_base
         
     | 
| 
       226 
     | 
    
         
            -
                  raise NoBaseConfigurations unless exist_base?
         
     | 
| 
       227 
     | 
    
         
            -
                  JSON.parse(File.read(self.base_cfg_path)).deep_symbolize_keys
         
     | 
| 
       228 
     | 
    
         
            -
                end
         
     | 
| 
       229 
     | 
    
         
            -
             
     | 
| 
       230 
     | 
    
         
            -
                public
         
     | 
| 
       231 
     | 
    
         
            -
             
     | 
| 
       232 
     | 
    
         
            -
                ## Cerca le configurazioni di progetto e le mergia se sono presenti
         
     | 
| 
       233 
     | 
    
         
            -
                # @return [Hash]
         
     | 
| 
       234 
     | 
    
         
            -
                def merged_configurations
         
     | 
| 
       235 
     | 
    
         
            -
                  return @_merged_configurations[@environment] if @_merged_configurations
         
     | 
| 
       236 
     | 
    
         
            -
             
     | 
| 
       237 
     | 
    
         
            -
                  @_merged_configurations = Hash.new do |hash, key|
         
     | 
| 
       238 
     | 
    
         
            -
                    folder = FileUtils.pwd
         
     | 
| 
       239 
     | 
    
         
            -
                    default_file = looped_file(folder, self.class.cfgs_project_file_name)
         
     | 
| 
       240 
     | 
    
         
            -
                    enviroment_file = looped_file(folder, self.class.cfgs_project_file_name(with_env: key))
         
     | 
| 
       241 
     | 
    
         
            -
             
     | 
| 
       242 
     | 
    
         
            -
                    project_cfgs = {}
         
     | 
| 
       243 
     | 
    
         
            -
                    unless default_file.nil?
         
     | 
| 
       244 
     | 
    
         
            -
                      project_cfgs = JSON.parse(File.read(default_file)).deep_symbolize_keys
         
     | 
| 
       245 
     | 
    
         
            -
                    end
         
     | 
| 
       246 
     | 
    
         
            -
             
     | 
| 
       247 
     | 
    
         
            -
                    unless enviroment_file.nil?
         
     | 
| 
       248 
     | 
    
         
            -
                      project_cfgs.merge!(JSON.parse(File.read(enviroment_file)).deep_symbolize_keys)
         
     | 
| 
       249 
     | 
    
         
            -
                    end
         
     | 
| 
       250 
     | 
    
         
            -
             
     | 
| 
       251 
     | 
    
         
            -
                    hash[key] = self.class.read_base.merge(project_cfgs)
         
     | 
| 
       252 
     | 
    
         
            -
                  end
         
     | 
| 
       253 
     | 
    
         
            -
             
     | 
| 
       254 
     | 
    
         
            -
                  configuration_version = @_merged_configurations[@environment][:version]
         
     | 
| 
       255 
     | 
    
         
            -
                  if Gem::Version.new(configuration_version) > Gem::Version.new(VERSION)
         
     | 
| 
       256 
     | 
    
         
            -
                    puts "WARNING: Versione del file di configurazione [#{configuration_version}] più aggiornata della gemma [#{VERSION}], eseguire upgrade
         
     | 
| 
       257 
     | 
    
         
            -
                          gem update swarm_cluster_cli_ope"
         
     | 
| 
       258 
     | 
    
         
            -
                    exit
         
     | 
| 
       259 
     | 
    
         
            -
                  end
         
     | 
| 
       260 
     | 
    
         
            -
             
     | 
| 
       261 
     | 
    
         
            -
                  @_merged_configurations[@environment]
         
     | 
| 
       262 
     | 
    
         
            -
             
     | 
| 
       263 
     | 
    
         
            -
                end
         
     | 
| 
       264 
     | 
    
         
            -
             
     | 
| 
       265 
     | 
    
         
            -
                private
         
     | 
| 
       266 
     | 
    
         
            -
             
     | 
| 
       267 
     | 
    
         
            -
                def looped_file(start_folder, file)
         
     | 
| 
       268 
     | 
    
         
            -
                  project_file = nil
         
     | 
| 
       269 
     | 
    
         
            -
                  loop do
         
     | 
| 
       270 
     | 
    
         
            -
             
     | 
| 
       271 
     | 
    
         
            -
                    if File.exist?(File.join(start_folder, file))
         
     | 
| 
       272 
     | 
    
         
            -
                      project_file = File.join(start_folder, file)
         
     | 
| 
       273 
     | 
    
         
            -
                    end
         
     | 
| 
       274 
     | 
    
         
            -
             
     | 
| 
       275 
     | 
    
         
            -
                    break unless project_file.nil?
         
     | 
| 
       276 
     | 
    
         
            -
                    break if start_folder == '/'
         
     | 
| 
       277 
     | 
    
         
            -
                    start_folder = File.expand_path("..", start_folder)
         
     | 
| 
       278 
     | 
    
         
            -
                  end
         
     | 
| 
       279 
     | 
    
         
            -
             
     | 
| 
       280 
     | 
    
         
            -
                  project_file
         
     | 
| 
       281 
     | 
    
         
            -
                end
         
     | 
| 
       282 
103 
     | 
    
         | 
| 
       283 
104 
     | 
    
         
             
              end
         
     | 
| 
       284 
105 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,8 +1,16 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'active_support/concern'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       1 
3 
     | 
    
         
             
            module SwarmClusterCliOpe
         
     | 
| 
       2 
4 
     | 
    
         
             
              module ConfigurationConcern
         
     | 
| 
      
 5 
     | 
    
         
            +
                extend ActiveSupport::Concern
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                included do
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  # @return [SwarmClusterCliOpe::Configuration]
         
     | 
| 
      
 10 
     | 
    
         
            +
                  def cfgs
         
     | 
| 
      
 11 
     | 
    
         
            +
                    self.class.cfgs
         
     | 
| 
      
 12 
     | 
    
         
            +
                  end
         
     | 
| 
       3 
13 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
                def self.included(klass)
         
     | 
| 
       5 
     | 
    
         
            -
                  klass.extend(ClassMethods)
         
     | 
| 
       6 
14 
     | 
    
         
             
                end
         
     | 
| 
       7 
15 
     | 
    
         | 
| 
       8 
16 
     | 
    
         
             
                module ClassMethods
         
     | 
| 
         @@ -13,12 +21,5 @@ module SwarmClusterCliOpe 
     | 
|
| 
       13 
21 
     | 
    
         
             
                    Configuration.instance
         
     | 
| 
       14 
22 
     | 
    
         
             
                  end
         
     | 
| 
       15 
23 
     | 
    
         
             
                end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
                # @return [SwarmClusterCliOpe::Configuration]
         
     | 
| 
       19 
     | 
    
         
            -
                def cfgs
         
     | 
| 
       20 
     | 
    
         
            -
                  self.class.cfgs
         
     | 
| 
       21 
     | 
    
         
            -
                end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
24 
     | 
    
         
             
              end
         
     | 
| 
       24 
25 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,90 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module SwarmClusterCliOpe
         
     | 
| 
      
 2 
     | 
    
         
            +
              class K8s < Thor
         
     | 
| 
      
 3 
     | 
    
         
            +
                include LoggerConcern
         
     | 
| 
      
 4 
     | 
    
         
            +
                include ConfigurationConcern
         
     | 
| 
      
 5 
     | 
    
         
            +
                include ThorConfigurationConcern
         
     | 
| 
      
 6 
     | 
    
         
            +
                include Thor::Actions
         
     | 
| 
      
 7 
     | 
    
         
            +
                include StackSyncConcern
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                def self.exit_on_failure?
         
     | 
| 
      
 10 
     | 
    
         
            +
                  true
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def self.cfgs
         
     | 
| 
      
 14 
     | 
    
         
            +
                  SwarmClusterCliOpe::Kubernetes::Configuration.instance
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                desc "install", "Creazione della configurazione base della gemma"
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                def install
         
     | 
| 
      
 20 
     | 
    
         
            +
                  #contolliamo se presente la configurazione base nella home
         
     | 
| 
      
 21 
     | 
    
         
            +
                  if Configuration.exist_base?
         
     | 
| 
      
 22 
     | 
    
         
            +
                    say "Configurazione già presente"
         
     | 
| 
      
 23 
     | 
    
         
            +
                  else
         
     | 
| 
      
 24 
     | 
    
         
            +
                    #se non presente allora chiediamo le varie configurazioni
         
     | 
| 
      
 25 
     | 
    
         
            +
                    if yes? "Sei nel contesto corretto di kubectl?"
         
     | 
| 
      
 26 
     | 
    
         
            +
                      #scriviamo le varie configurazioni
         
     | 
| 
      
 27 
     | 
    
         
            +
                      cfg = cfgs
         
     | 
| 
      
 28 
     | 
    
         
            +
                      cfg.save_base_cfgs
         
     | 
| 
      
 29 
     | 
    
         
            +
                    else
         
     | 
| 
      
 30 
     | 
    
         
            +
                      say "Cambia prima contesto, sarà quello usato per l'installazione"
         
     | 
| 
      
 31 
     | 
    
         
            +
                    end
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                desc "rsync <src> <dst>", "esegue un rsync dalla cartella (viene sincronizzato il contenuto)"
         
     | 
| 
      
 38 
     | 
    
         
            +
                long_desc "Viene utilizzato rsync standard. La root del pod diviene il context di rsync, quindi
         
     | 
| 
      
 39 
     | 
    
         
            +
                            possiamo fare rsync con qualsiasi path del filesystem del pod.
         
     | 
| 
      
 40 
     | 
    
         
            +
                            Il modo con cui scrivere la path sorgente e quello di destinazione è tale a quello di rsync, quindi:
         
     | 
| 
      
 41 
     | 
    
         
            +
                            - voglio copiare il contenuto della cartella /ciao con il contenuto onlin del pod nella cartella
         
     | 
| 
      
 42 
     | 
    
         
            +
                              /home/pippo, dovrò scrivere   /ciao/. podname:/home/pippo "
         
     | 
| 
      
 43 
     | 
    
         
            +
                option :stack_name, required: false, type: :string, aliases: ["--namespace", "-n"]
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                def rsync(src, dst)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  reg_exp = /(?<pod_name>.*)\:(?<path>.*)/
         
     | 
| 
      
 47 
     | 
    
         
            +
                  if File.exist?(src)
         
     | 
| 
      
 48 
     | 
    
         
            +
                    # il src é la cartella, quindi la destizione è il pod
         
     | 
| 
      
 49 
     | 
    
         
            +
                    direction = :up
         
     | 
| 
      
 50 
     | 
    
         
            +
                    local_path = src
         
     | 
| 
      
 51 
     | 
    
         
            +
                    podname = dst.match(reg_exp)[:pod_name]
         
     | 
| 
      
 52 
     | 
    
         
            +
                    podpath = dst.match(reg_exp)[:path]
         
     | 
| 
      
 53 
     | 
    
         
            +
                  else
         
     | 
| 
      
 54 
     | 
    
         
            +
                    direction = :down
         
     | 
| 
      
 55 
     | 
    
         
            +
                    podname = src.match(reg_exp)[:pod_name]
         
     | 
| 
      
 56 
     | 
    
         
            +
                    podpath = src.match(reg_exp)[:path]
         
     | 
| 
      
 57 
     | 
    
         
            +
                    local_path = dst
         
     | 
| 
      
 58 
     | 
    
         
            +
                  end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                  puts "#{src} #{direction} #{dst}"
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                  cfgs.env(options[:environment]) do |cfgs|
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                    cfgs.stack_name = options[:stack_name] || cfgs.stack_name
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                    sync = Kubernetes::SyncConfigs::Rsync.new(cfgs, {
         
     | 
| 
      
 67 
     | 
    
         
            +
                      service: Kubernetes::Pod.find_by_name(podname),
         
     | 
| 
      
 68 
     | 
    
         
            +
                      how: 'rsync',
         
     | 
| 
      
 69 
     | 
    
         
            +
                      configs: {
         
     | 
| 
      
 70 
     | 
    
         
            +
                        local: local_path,
         
     | 
| 
      
 71 
     | 
    
         
            +
                        remote: podpath
         
     | 
| 
      
 72 
     | 
    
         
            +
                      }
         
     | 
| 
      
 73 
     | 
    
         
            +
                    })
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                    if direction == :down
         
     | 
| 
      
 76 
     | 
    
         
            +
                      sync.pull
         
     | 
| 
      
 77 
     | 
    
         
            +
                    end
         
     | 
| 
      
 78 
     | 
    
         
            +
                    if direction == :up
         
     | 
| 
      
 79 
     | 
    
         
            +
                      sync.push
         
     | 
| 
      
 80 
     | 
    
         
            +
                    end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                  
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                  end
         
     | 
| 
      
 86 
     | 
    
         
            +
                end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
              end
         
     | 
| 
      
 90 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,49 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module SwarmClusterCliOpe
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Kubernetes
         
     | 
| 
      
 3 
     | 
    
         
            +
                class Configuration < BaseConfiguration
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 7 
     | 
    
         
            +
                  # In kubernetes abbiamo il context, il context può essere ricevuto o dalla configurazione oppure dal current_context
         
     | 
| 
      
 8 
     | 
    
         
            +
                  # di kubelet
         
     | 
| 
      
 9 
     | 
    
         
            +
                  # @return [String]
         
     | 
| 
      
 10 
     | 
    
         
            +
                  def context
         
     | 
| 
      
 11 
     | 
    
         
            +
                    cmd = ShellCommandExecution.new(['kubectl config current-context'])
         
     | 
| 
      
 12 
     | 
    
         
            +
                    cmd.execute.raw_result[:stdout]
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 16 
     | 
    
         
            +
                  # Salva le configurazioni base in HOME
         
     | 
| 
      
 17 
     | 
    
         
            +
                  def save_base_cfgs
         
     | 
| 
      
 18 
     | 
    
         
            +
                    super do |obj|
         
     | 
| 
      
 19 
     | 
    
         
            +
                      obj.merge({connections_maps: {context: context}})
         
     | 
| 
      
 20 
     | 
    
         
            +
                    end
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 24 
     | 
    
         
            +
                  # In k8s utilizziamo namespace come identificativo per avere le idee più chiare a cosi ci riferiamo
         
     | 
| 
      
 25 
     | 
    
         
            +
                  alias_method :namespace, :stack_name
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 29 
     | 
    
         
            +
                  # Funzione per la restituzione della classe di sincro corretta
         
     | 
| 
      
 30 
     | 
    
         
            +
                  def get_syncro(name)
         
     | 
| 
      
 31 
     | 
    
         
            +
                    case name
         
     | 
| 
      
 32 
     | 
    
         
            +
                    when 'sqlite3'
         
     | 
| 
      
 33 
     | 
    
         
            +
                      SyncConfigs::Sqlite3
         
     | 
| 
      
 34 
     | 
    
         
            +
                    when 'rsync'
         
     | 
| 
      
 35 
     | 
    
         
            +
                      SyncConfigs::Rsync
         
     | 
| 
      
 36 
     | 
    
         
            +
                    # when 'mysql'
         
     | 
| 
      
 37 
     | 
    
         
            +
                    #   SyncConfigs::Mysql
         
     | 
| 
      
 38 
     | 
    
         
            +
                    # when 'pg'
         
     | 
| 
      
 39 
     | 
    
         
            +
                    #   SyncConfigs::PostGres
         
     | 
| 
      
 40 
     | 
    
         
            +
                    else
         
     | 
| 
      
 41 
     | 
    
         
            +
                      logger.error { "CONFIGURAIONE NON PREVISTA: #{name}" }
         
     | 
| 
      
 42 
     | 
    
         
            +
                      nil
         
     | 
| 
      
 43 
     | 
    
         
            +
                    end
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,143 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module SwarmClusterCliOpe
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Kubernetes
         
     | 
| 
      
 3 
     | 
    
         
            +
                ##
         
     | 
| 
      
 4 
     | 
    
         
            +
                # Interfaccia per la comunicazione con il POD
         
     | 
| 
      
 5 
     | 
    
         
            +
                class Pod
         
     | 
| 
      
 6 
     | 
    
         
            +
                  include LoggerConcern
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  #@return [Hash]
         
     | 
| 
      
 10 
     | 
    
         
            +
                  attr_accessor :pod_description
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  #@return [String]
         
     | 
| 
      
 13 
     | 
    
         
            +
                  attr_accessor :context
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  # @param [Hash] pod_description -> hash con le configurazioni ritornate da kubectl
         
     | 
| 
      
 16 
     | 
    
         
            +
                  # @param [String] context -> se non presente utiliziamo l'attuale
         
     | 
| 
      
 17 
     | 
    
         
            +
                  def initialize(pod_description, context:)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    @pod_description = pod_description.to_h.deep_symbolize_keys
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @context = context
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  # @return [String]
         
     | 
| 
      
 24 
     | 
    
         
            +
                  def name
         
     | 
| 
      
 25 
     | 
    
         
            +
                    @pod_description[:metadata][:name]
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  def namespace
         
     | 
| 
      
 29 
     | 
    
         
            +
                    @pod_description[:metadata][:namespace]
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  # @param [String,Array<String>] cmd -> comando da passare a kubectl exec -- CMD
         
     | 
| 
      
 33 
     | 
    
         
            +
                  # @return [SwarmClusterCliOpe::ShellCommandExecution]
         
     | 
| 
      
 34 
     | 
    
         
            +
                  def exec(cmd)
         
     | 
| 
      
 35 
     | 
    
         
            +
                    base_cmd(["exec", name, "--", cmd].flatten)
         
     | 
| 
      
 36 
     | 
    
         
            +
                  end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 39 
     | 
    
         
            +
                  # Appende solamente la parte base dei comandi
         
     | 
| 
      
 40 
     | 
    
         
            +
                  # @return [SwarmClusterCliOpe::ShellCommandExecution]
         
     | 
| 
      
 41 
     | 
    
         
            +
                  # @param [String,Array<String>] cmd
         
     | 
| 
      
 42 
     | 
    
         
            +
                  def base_cmd(cmd)
         
     | 
| 
      
 43 
     | 
    
         
            +
                    ShellCommandExecution.new([base_kubectl_cmd_env, cmd].flatten)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 48 
     | 
    
         
            +
                  # Comando per la copia del file
         
     | 
| 
      
 49 
     | 
    
         
            +
                  # @param [String] src
         
     | 
| 
      
 50 
     | 
    
         
            +
                  # @param [String] dst
         
     | 
| 
      
 51 
     | 
    
         
            +
                  # @return [SwarmClusterCliOpe::ShellCommandExecution]
         
     | 
| 
      
 52 
     | 
    
         
            +
                  def cp_in(src, dst)
         
     | 
| 
      
 53 
     | 
    
         
            +
                    base_cmd(["cp", src, "#{name}:#{dst}"])
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 57 
     | 
    
         
            +
                  # Comando per la copia del file dal container
         
     | 
| 
      
 58 
     | 
    
         
            +
                  # @param [String] src
         
     | 
| 
      
 59 
     | 
    
         
            +
                  # @param [String] dst
         
     | 
| 
      
 60 
     | 
    
         
            +
                  # @return [SwarmClusterCliOpe::ShellCommandExecution]
         
     | 
| 
      
 61 
     | 
    
         
            +
                  def cp_out(src, dst)
         
     | 
| 
      
 62 
     | 
    
         
            +
                    base_cmd(["cp", "#{name}:#{src}", dst])
         
     | 
| 
      
 63 
     | 
    
         
            +
                  end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 66 
     | 
    
         
            +
                  # Proxy class per essere simili al container per swarm
         
     | 
| 
      
 67 
     | 
    
         
            +
                  # @return [TrueClass, FalseClass]
         
     | 
| 
      
 68 
     | 
    
         
            +
                  # @param [String] src
         
     | 
| 
      
 69 
     | 
    
         
            +
                  # @param [String] dst
         
     | 
| 
      
 70 
     | 
    
         
            +
                  def copy_in(src, dst)
         
     | 
| 
      
 71 
     | 
    
         
            +
                    cp_in(src, dst).execute.success?
         
     | 
| 
      
 72 
     | 
    
         
            +
                  end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                  # @param [String] src
         
     | 
| 
      
 75 
     | 
    
         
            +
                  # @param [String] dst
         
     | 
| 
      
 76 
     | 
    
         
            +
                  # @return [TrueClass, FalseClass]
         
     | 
| 
      
 77 
     | 
    
         
            +
                  def copy_out(src, dst)
         
     | 
| 
      
 78 
     | 
    
         
            +
                    cp_out(src, dst).execute.success?
         
     | 
| 
      
 79 
     | 
    
         
            +
                  end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                  # @param [String] selector
         
     | 
| 
      
 83 
     | 
    
         
            +
                  # @return [Pod]
         
     | 
| 
      
 84 
     | 
    
         
            +
                  # @param [nil,String] namespace ->  se la sciato vuoto utiliziamo il namespace corrente
         
     | 
| 
      
 85 
     | 
    
         
            +
                  # @param [String, nil] context -> contesto di kubectl, nel caso utilizziamo il corrente
         
     | 
| 
      
 86 
     | 
    
         
            +
                  def self.find_by_selector(selector, namespace: nil, context: nil)
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                    base_cmd = ["kubectl"]
         
     | 
| 
      
 89 
     | 
    
         
            +
                    base_cmd << "--namespace=#{namespace}" unless namespace.blank?
         
     | 
| 
      
 90 
     | 
    
         
            +
                    base_cmd << "--context=#{context}" unless context.blank?
         
     | 
| 
      
 91 
     | 
    
         
            +
                    base_cmd << "get pod"
         
     | 
| 
      
 92 
     | 
    
         
            +
                    base_cmd << "--selector=#{selector}"
         
     | 
| 
      
 93 
     | 
    
         
            +
                    base_cmd << "--output=json"
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                    cmd = ShellCommandExecution.new(base_cmd)
         
     | 
| 
      
 96 
     | 
    
         
            +
                    ris = cmd.execute(allow_failure: true)
         
     | 
| 
      
 97 
     | 
    
         
            +
                    if ris.failed?
         
     | 
| 
      
 98 
     | 
    
         
            +
                      puts "Problemi nella ricerca del pod"
         
     | 
| 
      
 99 
     | 
    
         
            +
                      exit
         
     | 
| 
      
 100 
     | 
    
         
            +
                    else
         
     | 
| 
      
 101 
     | 
    
         
            +
                      if ris.result[:items].empty?
         
     | 
| 
      
 102 
     | 
    
         
            +
                        logger.warn { "non abbiamo trovato il pod" }
         
     | 
| 
      
 103 
     | 
    
         
            +
                      else
         
     | 
| 
      
 104 
     | 
    
         
            +
                        self.new(ris.result[:items].first, context: context)
         
     | 
| 
      
 105 
     | 
    
         
            +
                      end
         
     | 
| 
      
 106 
     | 
    
         
            +
                    end
         
     | 
| 
      
 107 
     | 
    
         
            +
                  end
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
                  def self.find_by_name(name, namespace: nil, context: nil)
         
     | 
| 
      
 110 
     | 
    
         
            +
                    base_cmd = ["kubectl"]
         
     | 
| 
      
 111 
     | 
    
         
            +
                    base_cmd << "--namespace=#{namespace}" unless namespace.blank?
         
     | 
| 
      
 112 
     | 
    
         
            +
                    base_cmd << "--context=#{context}" unless context.blank?
         
     | 
| 
      
 113 
     | 
    
         
            +
                    base_cmd << "get pod #{name}"
         
     | 
| 
      
 114 
     | 
    
         
            +
                    base_cmd << "--output=json"
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
                    cmd = ShellCommandExecution.new(base_cmd)
         
     | 
| 
      
 117 
     | 
    
         
            +
                    ris = cmd.execute(allow_failure: true)
         
     | 
| 
      
 118 
     | 
    
         
            +
                    if ris.failed?
         
     | 
| 
      
 119 
     | 
    
         
            +
                      puts "Problemi nella ricerca del pod"
         
     | 
| 
      
 120 
     | 
    
         
            +
                      exit
         
     | 
| 
      
 121 
     | 
    
         
            +
                    else
         
     | 
| 
      
 122 
     | 
    
         
            +
                      self.new(ris.result, context: context)
         
     | 
| 
      
 123 
     | 
    
         
            +
                    end
         
     | 
| 
      
 124 
     | 
    
         
            +
                  end
         
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                  private
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 130 
     | 
    
         
            +
                  # Array con i comandi base di kubectl
         
     | 
| 
      
 131 
     | 
    
         
            +
                  # @return [Array<String>]
         
     | 
| 
      
 132 
     | 
    
         
            +
                  def base_kubectl_cmd_env(json: false)
         
     | 
| 
      
 133 
     | 
    
         
            +
                    base_cmd = ["kubectl"]
         
     | 
| 
      
 134 
     | 
    
         
            +
                    base_cmd << "--namespace=#{namespace}" unless namespace.blank?
         
     | 
| 
      
 135 
     | 
    
         
            +
                    base_cmd << "--context=#{context}" unless context.blank?
         
     | 
| 
      
 136 
     | 
    
         
            +
                    base_cmd << "--output=json" if json
         
     | 
| 
      
 137 
     | 
    
         
            +
                    base_cmd
         
     | 
| 
      
 138 
     | 
    
         
            +
                  end
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
                end
         
     | 
| 
      
 142 
     | 
    
         
            +
              end
         
     | 
| 
      
 143 
     | 
    
         
            +
            end
         
     |