Merge "Proceed CNI output in format of version 0.3.1"

This commit is contained in:
Zuul 2018-07-10 14:35:17 +00:00 committed by Gerrit Code Review
commit 3e1f3e03ac
5 changed files with 52 additions and 13 deletions

View File

@ -256,7 +256,7 @@
x="754.02399"
y="640.83807"
id="tspan10312-2-0"
style="font-weight:normal;font-size:30px;line-height:93.99999976%">CNI 0.3.0</tspan></text>
style="font-weight:normal;font-size:30px;line-height:93.99999976%">CNI 0.3.1</tspan></text>
<g
id="g10768">
<path

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -142,7 +142,7 @@ Kubelet would only use the lexicographically first file in that directory, so
make sure that it is kuryr's config file::
{
"cniVersion": "0.3.0",
"cniVersion": "0.3.1",
"name": "kuryr",
"type": "kuryr-cni",
"kuryr_conf": "/etc/kuryr/kuryr.conf",

View File

@ -1,5 +1,5 @@
{
"cniVersion": "0.3.0",
"cniVersion": "0.3.1",
"name": "kuryr",
"type": "kuryr-cni",
"kuryr_conf": "/etc/kuryr/kuryr.conf",

View File

@ -38,8 +38,8 @@ LOG = logging.getLogger(__name__)
class CNIRunner(object):
# TODO(ivc): extend SUPPORTED_VERSIONS and format output based on
# requested params.CNI_VERSION and/or params.config.cniVersion
VERSION = '0.3.0'
SUPPORTED_VERSIONS = ['0.3.0']
VERSION = '0.3.1'
SUPPORTED_VERSIONS = ['0.3.1']
@abc.abstractmethod
def _add(self, params):
@ -69,6 +69,10 @@ class CNIRunner(object):
def prepare_env(self, env, stdin):
raise NotImplementedError()
@abc.abstractmethod
def get_container_id(self):
raise NotImplementedError()
def run(self, env, fin, fout):
try:
# Prepare params according to calling Object
@ -89,24 +93,36 @@ class CNIRunner(object):
self._write_exception(fout, str(ex))
return 1
def _vif_data(self, vif):
def _vif_data(self, vif, params):
result = {}
nameservers = []
cni_ip_list = result.setdefault("ips", [])
cni_routes_list = result.setdefault("routes", [])
result["interfaces"] = [
{
"name": vif.vif_name,
"mac": vif.address,
"sandbox": self.get_container_id(params)}]
for subnet in vif.network.subnets.objects:
cni_ip = {}
nameservers.extend(subnet.dns)
ip = subnet.ips.objects[0].address
cni_ip = result.setdefault("ip%s" % ip.version, {})
cni_ip['ip'] = "%s/%s" % (ip, subnet.cidr.prefixlen)
cni_ip['version'] = str(ip.version)
cni_ip['address'] = "%s/%s" % (ip, subnet.cidr.prefixlen)
cni_ip['interface'] = len(result["interfaces"]) - 1
if hasattr(subnet, 'gateway'):
cni_ip['gateway'] = str(subnet.gateway)
if subnet.routes.objects:
cni_ip['routes'] = [
routes = [
{'dst': str(route.cidr), 'gw': str(route.gateway)}
for route in subnet.routes.objects]
cni_routes_list.extend(routes)
cni_ip_list.append(cni_ip)
if nameservers:
result['dns'] = {'nameservers': nameservers}
@ -120,7 +136,7 @@ class CNIStandaloneRunner(CNIRunner):
def _add(self, params):
vif = self._plugin.add(params)
return self._vif_data(vif)
return self._vif_data(vif, params)
def _delete(self, params):
self._plugin.delete(params)
@ -128,13 +144,16 @@ class CNIStandaloneRunner(CNIRunner):
def prepare_env(self, env, stdin):
return utils.CNIParameters(env, stdin)
def get_container_id(self, params):
return params.CNI_CONTAINERID
class CNIDaemonizedRunner(CNIRunner):
def _add(self, params):
resp = self._make_request('addNetwork', params, httplib.ACCEPTED)
vif = base.VersionedObject.obj_from_primitive(resp.json())
return self._vif_data(vif)
return self._vif_data(vif, params)
def _delete(self, params):
self._make_request('delNetwork', params, httplib.NO_CONTENT)
@ -146,6 +165,9 @@ class CNIDaemonizedRunner(CNIRunner):
cni_envs['config_kuryr'] = dict(stdin)
return cni_envs
def get_container_id(self, params):
return params["CNI_CONTAINERID"]
def _make_request(self, path, cni_envs, expected_status=None):
method = 'POST'

View File

@ -62,8 +62,10 @@ class TestCNIStandaloneRunner(test_base.TestCase, TestCNIRunnerMixin):
m_k8s_add.return_value = vif
m_fin = StringIO()
m_fout = StringIO()
container_id = 'a4181c680a39'
env = {
'CNI_COMMAND': 'ADD',
'CNI_CONTAINERID': container_id,
'CNI_ARGS': 'foo=bar',
}
self.runner.run(env, m_fin, m_fout)
@ -71,9 +73,22 @@ class TestCNIStandaloneRunner(test_base.TestCase, TestCNIRunnerMixin):
self.assertEqual('foo=bar', m_k8s_add.call_args[0][0].CNI_ARGS)
result = jsonutils.loads(m_fout.getvalue())
self.assertDictEqual(
{"cniVersion": "0.3.0",
{"cniVersion": '0.3.1',
"dns": {"nameservers": ["192.168.0.1"]},
"ip4": {"gateway": "192.168.0.1", "ip": "192.168.0.2/24"}},
"ips": [
{
"version": "4",
"gateway": "192.168.0.1",
"address": "192.168.0.2/24",
"interface": 0,
}],
"interfaces": [
{
"name": vif.vif_name,
"mac": vif.address,
"sandbox": container_id,
}],
"routes": []},
result)
@mock.patch('kuryr_kubernetes.cni.plugins.k8s_cni.K8sCNIPlugin.delete')
@ -84,6 +99,7 @@ class TestCNIStandaloneRunner(test_base.TestCase, TestCNIRunnerMixin):
m_fout = StringIO()
env = {
'CNI_COMMAND': 'DEL',
'CNI_CONTAINERID': 'a4181c680a39',
'CNI_ARGS': 'foo=bar',
}
self.runner.run(env, m_fin, m_fout)
@ -103,6 +119,7 @@ class TestCNIDaemonizedRunner(test_base.TestCase, TestCNIRunnerMixin):
m_fout = StringIO()
env = {
'CNI_COMMAND': cni_cmd,
'CNI_CONTAINERID': 'a4181c680a39',
'CNI_ARGS': 'foo=bar',
}
result = self.runner.run(env, m_fin, m_fout)