Class: EventHelper

Inherits:
Object
  • Object
show all
Defined in:
lib/kubernetes-operator.rb

Instance Method Summary collapse

Constructor Details

#initialize(logger) ⇒ EventHelper

EventHelper initialize provides an helper class to add and delete events from ressources

Parameters:

  • logger (Log4r::Logger)

    Logger for this class

See Also:



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/kubernetes-operator.rb', line 21

def initialize(logger)
    # logging
    @logger = logger

    # kubeconfig
    # we need our own client because its an different api path
    # (for local development it's nice to use .kube/config)
    if File.exist?("#{Dir.home}/.kube/config")
        config = Kubeclient::Config.read(ENV['KUBECONFIG'] || "#{ENV['HOME']}/.kube/config")
        context = config.context
        @k8sclient = Kubeclient::Client.new(
            context.api_endpoint,
            'v1',
            ssl_options: context.ssl_options,
            auth_options: context.auth_options
        )
    else
        auth_options = {
            bearer_token_file: '/var/run/secrets/kubernetes.io/serviceaccount/token'
        }
        ssl_options = {}
        if File.exist?("/var/run/secrets/kubernetes.io/serviceaccount/ca.crt")
            ssl_options[:ca_file] = "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
        end
        @k8sclient = Kubeclient::Client.new(
            'https://kubernetes.default.svc',
            'v1',
            auth_options: auth_options,
            ssl_options:  ssl_options
        )
    end
end

Instance Method Details

#add(obj, message, reason = "Upsert", type = "Normal", component = "KubernetesOperator") ⇒ Object

Add an event

Parameters:

  • obj (Hash)

    Kubernetes custom resource object as hash (required)

  • message (string)

    Event message (required)

  • reason (string) (defaults to: "Upsert")

    Event reason (default: “Upsert”)

  • type (string) (defaults to: "Normal")

    Event type (default: “Normal”)

  • component (string) (defaults to: "KubernetesOperator")

    Event component (default: “KubernetesOperator”)



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/kubernetes-operator.rb', line 60

def add(obj,message,reason = "Upsert",type = "Normal", component = "KubernetesOperator")
    begin
        event = Kubeclient::Resource.new
        time = Time.new.utc

        _tmpNS = obj[:metadata][:namespace]

        event.firstTimestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ")
        event.lastTimestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ")
        event.involvedObject = {}
        event.involvedObject.apiVersion = obj[:apiVersion]
        event.involvedObject.kind = obj[:kind]
        event.involvedObject.name = obj[:metadata][:name]
        event.involvedObject.namespace = obj[:metadata][:namespace]
        event.involvedObject.resourceVersion = obj[:metadata][:resourceVersion]
        event.involvedObject.uid = obj[:metadata][:uid]
        event.kind = "Event"
        event.message = message
        event. = {}
        event..name = "#{obj[:metadata][:name]}.#{time.to_i}"
        event..namespace = obj[:metadata][:namespace] ||= "default"
        event.reason = reason
        event.source = {}
        event.source.component = component
        event.type = type

        @k8sclient.create_event(event)

        @logger.info("add event #{message}(#{type}) to #{obj[:metadata][:name]}(#{obj[:metadata][:uid]})")
    rescue => exception
        @logger.error(exception.inspect)
    end

end

#deleteAll(obj) ⇒ Object

Delete all events from an cr

Parameters:

  • obj (Hash)

    Kubernetes custom resource object as hash (required)



97
98
99
100
101
102
103
104
105
106
107
# File 'lib/kubernetes-operator.rb', line 97

def deleteAll(obj)
    begin
        events = @k8sclient.get_events(namespace: obj[:metadata][:namespace],field_selector: "involvedObject.uid=#{obj[:metadata][:uid]}")
        events.each do |event|
            @logger.info("delete event #{event[:metadata][:name]}(#{event[:metadata][:namespace]}) from #{obj[:metadata][:name]}(#{obj[:metadata][:uid]})")
            @k8sclient.delete_event(event[:metadata][:name],event[:metadata][:namespace])
        end
    rescue => exception
        @logger.error(exception.inspect)
    end
end