Skip to content

Commit 0903e86

Browse files
committed
support k8s for ICp
Signed-off-by: Hitomi Takahashi <hitomi@jp.ibm.com>
1 parent 40c1e2c commit 0903e86

File tree

12 files changed

+173
-9
lines changed

12 files changed

+173
-9
lines changed

crawler/plugins/applications/apache/apache_container_crawler.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
import os
23

34

45
import dockercontainer
@@ -32,7 +33,16 @@ def crawl(self, container_id=None, **kwargs):
3233
c.image_name)
3334

3435
# extract IP and Port information
35-
ip = c.get_container_ip()
36+
pod_info = os.environ.get("KUBE_POD_INFO")
37+
if pod_info:
38+
pod_info = pod_info.split(":")
39+
if not pod_info[0] == container_id:
40+
logger.debug("%s is not same %s" % (pod_info[0], container_id))
41+
raise CrawlError("no ip address")
42+
ip = pod_info[1]
43+
else:
44+
ip = c.get_container_ip()
45+
3646
ports = c.get_container_ports()
3747

3848
# crawl all candidate ports

crawler/plugins/applications/db2/db2_container_crawler.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
import os
23

34
import dockercontainer
45
from icrawl_plugin import IContainerCrawler
@@ -42,7 +43,16 @@ def crawl(self, container_id=None, **kwargs):
4243
c.image_name)
4344

4445
# extract IP and Port information
45-
ip = c.get_container_ip()
46+
pod_info = os.environ.get("KUBE_POD_INFO")
47+
if pod_info:
48+
pod_info = pod_info.split(":")
49+
if not pod_info[0] == container_id:
50+
logger.debug("%s is not same %s" % (pod_info[0], container_id))
51+
raise CrawlError("no ip address")
52+
ip = pod_info[1]
53+
else:
54+
ip = c.get_container_ip()
55+
4656
ports = c.get_container_ports()
4757

4858
# crawl all candidate ports

crawler/plugins/applications/liberty/liberty_container_crawler.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
import os
23

34
import dockercontainer
45
from icrawl_plugin import IContainerCrawler
@@ -39,7 +40,16 @@ def crawl(self, container_id=None, **kwargs):
3940
c.image_name)
4041

4142
# extract IP and Port information
42-
ip = c.get_container_ip()
43+
pod_info = os.environ.get("KUBE_POD_INFO")
44+
if pod_info:
45+
pod_info = pod_info.split(":")
46+
if not pod_info[0] == container_id:
47+
logger.debug("%s is not same %s" % (pod_info[0], container_id))
48+
raise CrawlError("no ip address")
49+
ip = pod_info[1]
50+
else:
51+
ip = c.get_container_ip()
52+
4353
ports = c.get_container_ports()
4454

4555
# crawl all candidate ports

crawler/plugins/applications/nginx/nginx_container_crawler.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
import os
23

34
import dockercontainer
45
from icrawl_plugin import IContainerCrawler
@@ -29,7 +30,16 @@ def crawl(self, container_id=None, **kwargs):
2930
c.image_name)
3031

3132
# extract IP and Port information
32-
ip = c.get_container_ip()
33+
pod_info = os.environ.get("KUBE_POD_INFO")
34+
if pod_info:
35+
pod_info = pod_info.split(":")
36+
if not pod_info[0] == container_id:
37+
logger.debug("%s is not same %s" % (pod_info[0], container_id))
38+
raise CrawlError("no ip address")
39+
ip = pod_info[1]
40+
else:
41+
ip = c.get_container_ip()
42+
3343
ports = c.get_container_ports()
3444

3545
# crawl all candidate ports

crawler/plugins/applications/redis/redis_container_crawler.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import dockercontainer
44
from requests.exceptions import ConnectionError
55
import logging
6+
import os
67

78

89
logger = logging.getLogger('crawlutils')
@@ -35,7 +36,16 @@ def crawl(self, container_id=None, **kwargs):
3536
raise NameError("this is not target crawl container")
3637

3738
# extract IP and Port information
38-
ip = c.get_container_ip()
39+
pod_info = os.environ.get("KUBE_POD_INFO")
40+
if pod_info:
41+
pod_info = pod_info.split(":")
42+
if not pod_info[0] == container_id:
43+
logger.debug("%s is not same %s" % (pod_info[0], container_id))
44+
raise ConnectionError("no ip address")
45+
ip = pod_info[1]
46+
else:
47+
ip = c.get_container_ip()
48+
3949
ports = c.get_container_ports()
4050

4151
# set default port number

crawler/plugins/applications/tomcat/tomcat_container_crawler.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
import os
23

34
import dockercontainer
45
from icrawl_plugin import IContainerCrawler
@@ -39,7 +40,16 @@ def crawl(self, container_id=None, **kwargs):
3940
c.image_name)
4041

4142
# extract IP and Port information
42-
ip = c.get_container_ip()
43+
pod_info = os.environ.get("KUBE_POD_INFO")
44+
if pod_info:
45+
pod_info = pod_info.split(":")
46+
if not pod_info[0] == container_id:
47+
logger.debug("%s is not same %s" % (pod_info[0], container_id))
48+
raise CrawlError("no ip address")
49+
ip = pod_info[1]
50+
else:
51+
ip = c.get_container_ip()
52+
4353
ports = c.get_container_ports()
4454

4555
# crawl all candidate ports

tests/unit/test_app_apache.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from unittest import TestCase
22

33
import mock
4+
import os
45

56
from plugins.applications.apache import apache_crawler
67
from plugins.applications.apache.feature import ApacheFeature
@@ -257,3 +258,21 @@ def test_no_accessible_endpoint(self):
257258
c = ApacheContainerCrawler()
258259
with self.assertRaises(CrawlError):
259260
c.crawl("mockcontainer")
261+
262+
@mock.patch('dockercontainer.DockerContainer',
263+
MockedApacheContainer)
264+
@mock.patch.dict(os.environ, {'KUBE_POD_INFO': '123456:1.2.3.4'})
265+
def test_env_apache_container(self):
266+
c = ApacheContainerCrawler()
267+
with self.assertRaises(CrawlError):
268+
c.crawl("mockcontainer")
269+
270+
@mock.patch('plugins.applications.apache.'
271+
'apache_crawler.retrieve_status_page',
272+
mocked_retrieve_status_page)
273+
@mock.patch('dockercontainer.DockerContainer',
274+
MockedApacheContainer)
275+
@mock.patch.dict(os.environ, {'KUBE_POD_INFO': '123456:1.2.3.4'})
276+
def test_no_env_apache_container(self):
277+
c = ApacheContainerCrawler()
278+
c.crawl("123456")

tests/unit/test_app_db2.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import mock
22
import pip
3+
import os
34
from unittest import TestCase
45
from plugins.applications.db2 import db2_crawler
56
from plugins.applications.db2.feature import DB2Feature
@@ -34,7 +35,6 @@ def get_container_ports(self):
3435
ports = []
3536
return ports
3637

37-
3838
class MockedDB2Container(object):
3939

4040
def __init__(
@@ -232,3 +232,20 @@ def test_no_accessible_endpoint(self):
232232
c = DB2ContainerCrawler()
233233
with self.assertRaises(CrawlError):
234234
c.crawl("mockcontainer")
235+
236+
@mock.patch('dockercontainer.DockerContainer',
237+
MockedDB2Container)
238+
@mock.patch.dict(os.environ, {'KUBE_POD_INFO': '123456:1.2.3.4'})
239+
def test_env_db2_container(self):
240+
c = DB2ContainerCrawler()
241+
with self.assertRaises(CrawlError):
242+
c.crawl("mockcontainer")
243+
244+
@mock.patch('dockercontainer.DockerContainer',
245+
MockedNoPortContainer)
246+
@mock.patch.dict(os.environ, {'KUBE_POD_INFO': '123456:1.2.3.4'})
247+
def test_no_env_db2_container(self):
248+
c = DB2ContainerCrawler()
249+
with self.assertRaises(CrawlError):
250+
c.crawl("123456")
251+

tests/unit/test_app_liberty.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from unittest import TestCase
22

3+
import os
34
import mock
45
from plugins.applications.liberty import liberty_crawler
56
from plugins.applications.liberty import feature
@@ -241,3 +242,19 @@ def test_none_liberty_container(self):
241242
c = LibertyContainerCrawler()
242243
with self.assertRaises(CrawlError):
243244
c.crawl("mockcontainer")
245+
246+
@mock.patch('dockercontainer.DockerContainer',
247+
MockedLibertyContainer)
248+
@mock.patch.dict(os.environ, {'KUBE_POD_INFO': '123456:1.2.3.4'})
249+
def test_no_env_liberty_container(self):
250+
c = LibertyContainerCrawler()
251+
with self.assertRaises(CrawlError):
252+
c.crawl("mockcontainer")
253+
254+
@mock.patch('dockercontainer.DockerContainer',
255+
MockedLibertyContainer)
256+
@mock.patch.dict(os.environ, {'KUBE_POD_INFO': '123456:1.2.3.4'})
257+
def test_env_liberty_container(self):
258+
c = LibertyContainerCrawler()
259+
c.crawl("123456")
260+
pass

tests/unit/test_app_nginx.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from unittest import TestCase
22

33
import mock
4+
import os
45

56
from plugins.applications.nginx import nginx_crawler
67
from plugins.applications.nginx.feature import NginxFeature
@@ -24,7 +25,6 @@ def mocked_no_status_page(host, port):
2425
#raise urllib2.HTTPError(1,2,3,4,5)
2526
raise Exception
2627

27-
2828
def mocked_wrong_status_page(host, port):
2929
return ('No Acceptable status page format')
3030

@@ -187,3 +187,19 @@ def test_no_accessible_endpoint(self):
187187
c = NginxContainerCrawler()
188188
with self.assertRaises(CrawlError):
189189
c.crawl("mockcontainer")
190+
191+
@mock.patch('dockercontainer.DockerContainer',
192+
MockedNginxContainer)
193+
@mock.patch.dict(os.environ, {'KUBE_POD_INFO': '123456:1.2.3.4'})
194+
def test_no_env_nginx_container(self):
195+
c = NginxContainerCrawler()
196+
with self.assertRaises(CrawlError):
197+
c.crawl("mockcontainer")
198+
199+
@mock.patch('dockercontainer.DockerContainer',
200+
MockedNoPortContainer)
201+
@mock.patch.dict(os.environ, {'KUBE_POD_INFO': '123456:1.2.3.4'})
202+
def test_env_nginx_container(self):
203+
c = NginxContainerCrawler()
204+
with self.assertRaises(CrawlError):
205+
c.crawl("123456")

0 commit comments

Comments
 (0)