diff options
Diffstat (limited to 'app/services/pod_logs/kubernetes_service.rb')
-rw-r--r-- | app/services/pod_logs/kubernetes_service.rb | 48 |
1 files changed, 46 insertions, 2 deletions
diff --git a/app/services/pod_logs/kubernetes_service.rb b/app/services/pod_logs/kubernetes_service.rb index 6c8ed74f8e1..92ebb84b877 100644 --- a/app/services/pod_logs/kubernetes_service.rb +++ b/app/services/pod_logs/kubernetes_service.rb @@ -8,7 +8,6 @@ module PodLogs EncodingHelperError = Class.new(StandardError) steps :check_arguments, - :check_param_lengths, :get_raw_pods, :get_pod_names, :check_pod_name, @@ -22,6 +21,50 @@ module PodLogs private + def check_pod_name(result) + # If pod_name is not received as parameter, get the pod logs of the first + # pod of this namespace. + result[:pod_name] ||= result[:pods].first + + unless result[:pod_name] + return error(_('No pods available')) + end + + unless result[:pod_name].length.to_i <= K8S_NAME_MAX_LENGTH + return error(_('pod_name cannot be larger than %{max_length}'\ + ' chars' % { max_length: K8S_NAME_MAX_LENGTH })) + end + + unless result[:pods].include?(result[:pod_name]) + return error(_('Pod does not exist')) + end + + success(result) + end + + def check_container_name(result) + pod_details = result[:raw_pods].first { |p| p.metadata.name == result[:pod_name] } + containers = pod_details.spec.containers.map(&:name) + + # select first container if not specified + result[:container_name] ||= containers.first + + unless result[:container_name] + return error(_('No containers available')) + end + + unless result[:container_name].length.to_i <= K8S_NAME_MAX_LENGTH + return error(_('container_name cannot be larger than'\ + ' %{max_length} chars' % { max_length: K8S_NAME_MAX_LENGTH })) + end + + unless containers.include?(result[:container_name]) + return error(_('Container does not exist')) + end + + success(result) + end + def pod_logs(result) result[:logs] = cluster.kubeclient.get_pod_log( result[:pod_name], @@ -62,7 +105,8 @@ module PodLogs values = line.split(' ', 2) { timestamp: values[0], - message: values[1] + message: values[1], + pod: result[:pod_name] } end |