Merge "Finish kubernetes networking upgrade support"
This commit is contained in:
commit
1e03ab7e3e
@ -6586,8 +6586,7 @@ class HostController(rest.RestController):
|
||||
# Verify the upgrade is in the correct state
|
||||
if kube_upgrade_obj.state in [
|
||||
kubernetes.KUBE_UPGRADE_DOWNLOADED_IMAGES,
|
||||
kubernetes.KUBE_UPGRADED_NETWORKING,
|
||||
kubernetes.KUBE_UPGRADED_FIRST_MASTER]:
|
||||
kubernetes.KUBE_UPGRADED_NETWORKING]:
|
||||
# We are upgrading a control plane
|
||||
pass
|
||||
elif kube_upgrade_obj.state in [
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2013-2019 Wind River Systems, Inc.
|
||||
# Copyright (c) 2013-2020 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
@ -82,6 +82,22 @@ def get_kube_versions():
|
||||
]
|
||||
|
||||
|
||||
def get_kube_networking_upgrade_version(kube_upgrade):
|
||||
"""Determine the version that kubernetes networking
|
||||
should be upgraded to."""
|
||||
if kube_upgrade.state in [
|
||||
KUBE_UPGRADE_STARTED,
|
||||
KUBE_UPGRADE_DOWNLOADING_IMAGES,
|
||||
KUBE_UPGRADE_DOWNLOADING_IMAGES_FAILED,
|
||||
KUBE_UPGRADE_DOWNLOADED_IMAGES,
|
||||
KUBE_UPGRADING_FIRST_MASTER,
|
||||
KUBE_UPGRADING_FIRST_MASTER_FAILED,
|
||||
KUBE_UPGRADED_FIRST_MASTER]:
|
||||
return kube_upgrade.from_version
|
||||
else:
|
||||
return kube_upgrade.to_version
|
||||
|
||||
|
||||
class KubeOperator(object):
|
||||
|
||||
def __init__(self):
|
||||
|
@ -16,7 +16,7 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# Copyright (c) 2013-2019 Wind River Systems, Inc.
|
||||
# Copyright (c) 2013-2020 Wind River Systems, Inc.
|
||||
#
|
||||
|
||||
"""Conduct all activity related system inventory.
|
||||
@ -5280,12 +5280,27 @@ class ConductorManager(service.PeriodicService):
|
||||
wait_fixed=(CONF.conductor.kube_upgrade_downgrade_retry_interval * 1000))
|
||||
def _upgrade_downgrade_kube_networking(self):
|
||||
try:
|
||||
LOG.info(
|
||||
"_upgrade_downgrade_kube_networking executing playbook: %s " %
|
||||
constants.ANSIBLE_KUBE_NETWORKING_PLAYBOOK)
|
||||
# Get the kubernetes version from the upgrade table
|
||||
# if an upgrade exists
|
||||
kube_upgrade = self.dbapi.kube_upgrade_get_one()
|
||||
kube_version = \
|
||||
kubernetes.get_kube_networking_upgrade_version(kube_upgrade)
|
||||
except exception.NotFound:
|
||||
# Not upgrading kubernetes, get the kubernetes version
|
||||
# from the kubeadm config map
|
||||
kube_version = self._kube.kube_get_kubernetes_version()
|
||||
|
||||
if not kube_version:
|
||||
LOG.error("Unable to get the current kubernetes version.")
|
||||
return False
|
||||
|
||||
try:
|
||||
LOG.info("_upgrade_downgrade_kube_networking executing"
|
||||
" playbook: %s for version %s" %
|
||||
(constants.ANSIBLE_KUBE_NETWORKING_PLAYBOOK, kube_version))
|
||||
|
||||
proc = subprocess.Popen(
|
||||
['ansible-playbook',
|
||||
['ansible-playbook', '-e', 'kubernetes_version=%s' % kube_version,
|
||||
constants.ANSIBLE_KUBE_NETWORKING_PLAYBOOK],
|
||||
stdout=subprocess.PIPE)
|
||||
out, _ = proc.communicate()
|
||||
@ -11029,8 +11044,26 @@ class ConductorManager(service.PeriodicService):
|
||||
def kube_upgrade_networking(self, context, kube_version):
|
||||
"""Upgrade kubernetes networking for this kubernetes version"""
|
||||
|
||||
# TODO: Upgrade kubernetes networking.
|
||||
LOG.info("Upgrade kubernetes networking here")
|
||||
LOG.info("executing playbook: %s for version %s" %
|
||||
(constants.ANSIBLE_KUBE_NETWORKING_PLAYBOOK, kube_version))
|
||||
|
||||
proc = subprocess.Popen(
|
||||
['ansible-playbook', '-e', 'kubernetes_version=%s' % kube_version,
|
||||
constants.ANSIBLE_KUBE_NETWORKING_PLAYBOOK],
|
||||
stdout=subprocess.PIPE)
|
||||
out, _ = proc.communicate()
|
||||
|
||||
LOG.info("ansible-playbook: %s." % out)
|
||||
|
||||
if proc.returncode:
|
||||
LOG.warning("ansible-playbook returned an error: %s" %
|
||||
proc.returncode)
|
||||
# Update the upgrade state
|
||||
kube_upgrade_obj = objects.kube_upgrade.get_one(context)
|
||||
kube_upgrade_obj.state = \
|
||||
kubernetes.KUBE_UPGRADING_NETWORKING_FAILED
|
||||
kube_upgrade_obj.save()
|
||||
return
|
||||
|
||||
# Indicate that networking upgrade is complete
|
||||
kube_upgrade_obj = objects.kube_upgrade.get_one(context)
|
||||
|
@ -2,7 +2,7 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
#
|
||||
#
|
||||
# Copyright (c) 2013-2019 Wind River Systems, Inc.
|
||||
# Copyright (c) 2013-2020 Wind River Systems, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
@ -542,7 +542,7 @@ class TestPostKubeUpgrades(TestHost):
|
||||
kube_upgrade = dbutils.create_test_kube_upgrade(
|
||||
from_version='v1.42.1',
|
||||
to_version='v1.42.2',
|
||||
state=kubernetes.KUBE_UPGRADED_FIRST_MASTER,
|
||||
state=kubernetes.KUBE_UPGRADED_NETWORKING,
|
||||
)
|
||||
|
||||
# Mark the first kube host upgrade as OK
|
||||
|
@ -1162,6 +1162,40 @@ class ManagerTestCase(base.DbTestCase):
|
||||
updated_host_upgrade = self.dbapi.kube_host_upgrade_get(1)
|
||||
self.assertIsNotNone(updated_host_upgrade.status)
|
||||
|
||||
def test_kube_upgrade_networking(self):
|
||||
# Create an upgrade
|
||||
utils.create_test_kube_upgrade(
|
||||
from_version='v1.42.1',
|
||||
to_version='v1.42.2',
|
||||
state=kubernetes.KUBE_UPGRADING_NETWORKING,
|
||||
)
|
||||
|
||||
# Upgrade kubernetes networking
|
||||
self.service.kube_upgrade_networking(self.context, 'v1.42.2')
|
||||
|
||||
# Verify that the upgrade state was updated
|
||||
updated_upgrade = self.dbapi.kube_upgrade_get_one()
|
||||
self.assertEqual(updated_upgrade.state,
|
||||
kubernetes.KUBE_UPGRADED_NETWORKING)
|
||||
|
||||
def test_kube_upgrade_networking_ansible_fail(self):
|
||||
# Create an upgrade
|
||||
utils.create_test_kube_upgrade(
|
||||
from_version='v1.42.1',
|
||||
to_version='v1.42.2',
|
||||
state=kubernetes.KUBE_UPGRADING_NETWORKING,
|
||||
)
|
||||
# Fake an ansible failure
|
||||
self.fake_subprocess_popen.returncode = 1
|
||||
|
||||
# Upgrade kubernetes networking
|
||||
self.service.kube_upgrade_networking(self.context, 'v1.42.2')
|
||||
|
||||
# Verify that the upgrade state was updated
|
||||
updated_upgrade = self.dbapi.kube_upgrade_get_one()
|
||||
self.assertEqual(updated_upgrade.state,
|
||||
kubernetes.KUBE_UPGRADING_NETWORKING_FAILED)
|
||||
|
||||
def test_configure_out_of_date(self):
|
||||
config_applied = self.service._config_set_reboot_required(uuid.uuid4())
|
||||
config_target = self.service._config_set_reboot_required(uuid.uuid4())
|
||||
|
Loading…
Reference in New Issue
Block a user