Module: LanguageOperator::CLI::Helpers::ClusterValidator

Included in:
Commands::Agent::Base, Commands::Model::Base, Commands::Persona, Commands::Tool::Base
Defined in:
lib/language_operator/cli/helpers/cluster_validator.rb

Overview

Validates that a cluster is selected before executing commands

Class Method Summary collapse

Class Method Details

.current_clusterObject

Get current cluster name



48
49
50
# File 'lib/language_operator/cli/helpers/cluster_validator.rb', line 48

def current_cluster
  Config::ClusterConfig.current_cluster
end

.current_cluster_configObject

Get current cluster config



53
54
55
56
# File 'lib/language_operator/cli/helpers/cluster_validator.rb', line 53

def current_cluster_config
  cluster_name = ensure_cluster_selected!
  Config::ClusterConfig.get_cluster(cluster_name)
end

.ensure_cluster_selected!Object

Ensure a cluster is selected, exit with helpful message if not



15
16
17
18
19
# File 'lib/language_operator/cli/helpers/cluster_validator.rb', line 15

def ensure_cluster_selected!
  return current_cluster if current_cluster

  Errors::Handler.handle_no_cluster_selected
end

.get_cluster(cluster_override = nil) ⇒ Object

Get current cluster, or allow override via --cluster flag



22
23
24
25
26
27
28
29
# File 'lib/language_operator/cli/helpers/cluster_validator.rb', line 22

def get_cluster(cluster_override = nil)
  if cluster_override
    validate_cluster_exists!(cluster_override)
    cluster_override
  else
    ensure_cluster_selected!
  end
end

.get_cluster_config(name) ⇒ Object

Get cluster config by name (with validation)



59
60
61
62
63
64
65
66
67
# File 'lib/language_operator/cli/helpers/cluster_validator.rb', line 59

def get_cluster_config(name)
  validate_cluster_exists!(name)
  config = Config::ClusterConfig.get_cluster(name)

  # Validate kubeconfig exists and is accessible
  validate_kubeconfig!(config)

  config
end

.kubernetes_client(cluster_override = nil) ⇒ Object

Create a Kubernetes client for the given cluster



87
88
89
90
91
92
93
94
95
96
# File 'lib/language_operator/cli/helpers/cluster_validator.rb', line 87

def kubernetes_client(cluster_override = nil)
  cluster = get_cluster(cluster_override)
  cluster_config = get_cluster_config(cluster)

  require_relative '../../kubernetes/client'
  Kubernetes::Client.new(
    kubeconfig: cluster_config[:kubeconfig],
    context: cluster_config[:context]
  )
end

.validate_cluster_exists!(name) ⇒ Object

Validate that a specific cluster exists



32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/language_operator/cli/helpers/cluster_validator.rb', line 32

def validate_cluster_exists!(name)
  return if Config::ClusterConfig.cluster_exists?(name)

  # Build context with available clusters for fuzzy matching
  clusters = Config::ClusterConfig.list_clusters
  available_names = clusters.map { |c| c[:name] }

  # Use error handler with fuzzy matching
  error = K8s::Error::NotFound.new(404, 'Not Found', 'cluster')
  Errors::Handler.handle_not_found(error,
                                   resource_type: 'cluster',
                                   resource_name: name,
                                   available_resources: available_names)
end

.validate_kubeconfig!(cluster_config) ⇒ Object

Validate kubeconfig for the given cluster config



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/language_operator/cli/helpers/cluster_validator.rb', line 70

def validate_kubeconfig!(cluster_config)
  # Check if kubeconfig file exists
  kubeconfig_path = cluster_config[:kubeconfig]
  return if kubeconfig_path && File.exist?(kubeconfig_path)

  Formatters::ProgressFormatter.error("Kubeconfig not found: #{kubeconfig_path}")
  puts
  puts 'The kubeconfig file for this cluster does not exist.'
  puts
  puts 'To fix this issue:'
  puts '  1. Verify the kubeconfig path in ~/.langop/config.yaml'
  puts '  2. Re-create the cluster configuration:'
  puts "     langop cluster create #{cluster_config[:name]}"
  exit 1
end