Skip to content

Commit 2595ff3

Browse files
committedSep 22, 2017
Kube api fixes
1. Send one instance of fake data for each kind of k8 CL data type so solution tile error doesnt pop up for non K8 environments 2. Select the first agent in the agent pool to talk to the k8 api instead of the master. In some environments for some reason you can only talk to the api from agents.
1 parent a9bc497 commit 2595ff3

File tree

3 files changed

+116
-98
lines changed

3 files changed

+116
-98
lines changed
 

‎source/code/plugin/KubernetesApiClient.rb

+3-3
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def isNodeMaster
107107
thisNodeName = OMS::Common.get_hostname
108108
allNodesInfo['items'].each do |item|
109109
if item['metadata']['name'].casecmp(thisNodeName) == 0
110-
if item['metadata']['labels'].to_s.include? "master"
110+
if !item['metadata']['labels'].to_s.include?("master") && item['metadata']['labels']["kubernetes.io/hostname"].to_s.split('-').last == '0'
111111
@@IsNodeMaster = true
112112
end
113113
break
@@ -118,9 +118,9 @@ def isNodeMaster
118118
@Log.warn("node role request failed: #{error}")
119119
end
120120
if(@@IsNodeMaster == true)
121-
@Log.info("Kubernetes master node")
121+
@Log.info("Electing current node to talk to k8 api")
122122
else
123-
@Log.info("Not Kubernetes master node")
123+
@Log.info("Not Electing current node to talk to k8 api")
124124
end
125125
return @@IsNodeMaster
126126
end

‎source/code/plugin/in_kube_events.rb

+64-55
Original file line numberDiff line numberDiff line change
@@ -24,70 +24,79 @@ def configure (conf)
2424
end
2525

2626
def start
27-
28-
if KubernetesApiClient.isNodeMaster
29-
#run only if master node
30-
if @run_interval
31-
@finished = false
32-
@condition = ConditionVariable.new
33-
@mutex = Mutex.new
34-
@thread = Thread.new(&method(:run_periodic))
35-
else
36-
enumerate
37-
end
38-
end
27+
if KubernetesApiClient.isNodeMaster && @run_interval
28+
@finished = false
29+
@condition = ConditionVariable.new
30+
@mutex = Mutex.new
31+
@thread = Thread.new(&method(:run_periodic))
32+
else
33+
enumerate
34+
end
3935
end
4036

4137
def shutdown
42-
if KubernetesApiClient.isNodeMaster
43-
if @run_interval
44-
@mutex.synchronize {
45-
@finished = true
46-
@condition.signal
47-
}
48-
@thread.join
49-
end
38+
if KubernetesApiClient.isNodeMaster && @run_interval
39+
@mutex.synchronize {
40+
@finished = true
41+
@condition.signal
42+
}
43+
@thread.join
5044
end
5145
end
5246

5347
def enumerate(eventList = nil)
5448
time = Time.now.to_f
55-
if eventList.nil?
56-
events = KubernetesApiClient.getKubeResourceInfo('events')
49+
if KubernetesApiClient.isNodeMaster
50+
if eventList.nil?
51+
events = KubernetesApiClient.getKubeResourceInfo('events')
52+
else
53+
events = eventList
54+
end
55+
eventQueryState = getEventQueryState
56+
newEventQueryState = []
57+
events['items'].each do |items|
58+
record = {}
59+
begin
60+
eventId = items['metadata']['uid']
61+
newEventQueryState.push(eventId)
62+
if !eventQueryState.empty? && eventQueryState.include?(eventId)
63+
next
64+
end
65+
record['ObjectKind']= items['involvedObject']['kind']
66+
record['Namespace'] = items['involvedObject']['namespace']
67+
record['Name'] = items['involvedObject']['name']
68+
record['Reason'] = items['reason']
69+
record['Message'] = items['message']
70+
record['Type'] = items['type']
71+
record['TimeGenerated'] = items['metadata']['creationTimestamp']
72+
record['SourceComponent'] = items['source']['component']
73+
if items['source'].key?('host')
74+
record['Computer'] = items['source']['host']
75+
else
76+
record['Computer'] = (OMS::Common.get_hostname)
77+
end
78+
record['ClusterName'] = KubernetesApiClient.getClusterName
79+
router.emit(@tag, time, record) if record
80+
rescue => errorStr
81+
$log.warn line.dump, error: errorStr.to_s
82+
$log.debug_backtrace(e.backtrace)
83+
end
84+
end
85+
writeEventQueryState(newEventQueryState)
5786
else
58-
events = eventList
59-
end
60-
eventQueryState = getEventQueryState
61-
newEventQueryState = []
62-
events['items'].each do |items|
63-
record = {}
64-
begin
65-
eventId = items['metadata']['uid']
66-
newEventQueryState.push(eventId)
67-
if !eventQueryState.empty? && eventQueryState.include?(eventId)
68-
next
69-
end
70-
record['ObjectKind']= items['involvedObject']['kind']
71-
record['Namespace'] = items['involvedObject']['namespace']
72-
record['Name'] = items['involvedObject']['name']
73-
record['Reason'] = items['reason']
74-
record['Message'] = items['message']
75-
record['Type'] = items['type']
76-
record['TimeGenerated'] = items['metadata']['creationTimestamp']
77-
record['SourceComponent'] = items['source']['component']
78-
if items['source'].key?('host')
79-
record['Computer'] = items['source']['host']
80-
else
81-
record['Computer'] = (OMS::Common.get_hostname)
82-
end
83-
record['ClusterName'] = KubernetesApiClient.getClusterName
84-
router.emit(@tag, time, record) if record
85-
rescue => errorStr
86-
$log.warn line.dump, error: errorStr.to_s
87-
$log.debug_backtrace(e.backtrace)
88-
end
89-
end
90-
writeEventQueryState(newEventQueryState)
87+
record = {}
88+
record['ObjectKind']= ""
89+
record['Namespace'] = ""
90+
record['Name'] = ""
91+
record['Reason'] = ""
92+
record['Message'] = ""
93+
record['Type'] = ""
94+
record['TimeGenerated'] = ""
95+
record['SourceComponent'] = ""
96+
record['Computer'] = ""
97+
record['ClusterName'] = ""
98+
router.emit(@tag, time, record)
99+
end
91100
end
92101

93102
def run_periodic

‎source/code/plugin/in_kube_podinventory.rb

+49-40
Original file line numberDiff line numberDiff line change
@@ -21,56 +21,65 @@ def configure (conf)
2121
end
2222

2323
def start
24-
if KubernetesApiClient.isNodeMaster
25-
#run only if master node
26-
if @run_interval
27-
@finished = false
28-
@condition = ConditionVariable.new
29-
@mutex = Mutex.new
30-
@thread = Thread.new(&method(:run_periodic))
31-
else
32-
enumerate
33-
end
24+
if KubernetesApiClient.isNodeMaster && @run_interval
25+
@finished = false
26+
@condition = ConditionVariable.new
27+
@mutex = Mutex.new
28+
@thread = Thread.new(&method(:run_periodic))
29+
else
30+
enumerate
3431
end
3532
end
3633

3734
def shutdown
38-
if KubernetesApiClient.isNodeMaster
39-
if @run_interval
40-
@mutex.synchronize {
41-
@finished = true
42-
@condition.signal
43-
}
44-
@thread.join
45-
end
46-
end
35+
if KubernetesApiClient.isNodeMaster && @run_interval
36+
@mutex.synchronize {
37+
@finished = true
38+
@condition.signal
39+
}
40+
@thread.join
41+
end
4742
end
4843

4944
def enumerate(podList = nil)
5045
time = Time.now.to_f
51-
if podList.nil?
52-
podInventory = KubernetesApiClient.getKubeResourceInfo('pods')
46+
if KubernetesApiClient.isNodeMaster
47+
if podList.nil?
48+
podInventory = KubernetesApiClient.getKubeResourceInfo('pods')
49+
else
50+
podInventory = podList
51+
end
52+
podInventory['items'].each do |items|
53+
record = {}
54+
begin
55+
record['Name'] = items['metadata']['name']
56+
record['PodUid'] = items['metadata']['uid']
57+
record['PodLabel'] = items['metadata']['labels']
58+
record['Namespace'] = items['metadata']['namespace']
59+
record['PodCreationTimeStamp'] = items['metadata']['creationTimestamp']
60+
record['PodStatus'] = items['status']['phase']
61+
record['PodIp'] =items['status']['podIP']
62+
record['Computer'] = items['spec']['nodeName']
63+
record['ClusterName'] = KubernetesApiClient.getClusterName
64+
router.emit(@tag, time, record) if record
65+
rescue => errorStr
66+
$log.warn line.dump, error: errorStr.to_s
67+
$log.debug_backtrace(e.backtrace)
68+
end
69+
end
5370
else
54-
podInventory = podList
55-
end
56-
podInventory['items'].each do |items|
5771
record = {}
58-
begin
59-
record['Name'] = items['metadata']['name']
60-
record['PodUid'] = items['metadata']['uid']
61-
record['PodLabel'] = items['metadata']['labels']
62-
record['Namespace'] = items['metadata']['namespace']
63-
record['PodCreationTimeStamp'] = items['metadata']['creationTimestamp']
64-
record['PodStatus'] = items['status']['phase']
65-
record['PodIp'] =items['status']['podIP']
66-
record['Computer'] = items['spec']['nodeName']
67-
record['ClusterName'] = KubernetesApiClient.getClusterName
68-
router.emit(@tag, time, record) if record
69-
rescue => errorStr
70-
$log.warn line.dump, error: errorStr.to_s
71-
$log.debug_backtrace(e.backtrace)
72-
end
73-
end
72+
record['Name'] = ""
73+
record['PodUid'] = ""
74+
record['PodLabel'] = ""
75+
record['Namespace'] = ""
76+
record['PodCreationTimeStamp'] = ""
77+
record['PodStatus'] = ""
78+
record['PodIp'] = ""
79+
record['Computer'] = ""
80+
record['ClusterName'] = ""
81+
router.emit(@tag, time, record)
82+
end
7483
end
7584

7685
def run_periodic

0 commit comments

Comments
 (0)
Please sign in to comment.