Add framework for tacker-status upgrade check

This commit adds the functionality of tacker-status CLI for performing
upgrade checks as part of the Stein cycle upgrade-checkers goal.
It only includes a sample check which must be replaced by real checks in
future.

Change-Id: I7bb127fa10dd168ab24dd8c42013576f84eadfbb
Story: 2003657
Task: 26158
This commit is contained in:
akhiljain23 2018-10-19 02:19:56 +05:30 committed by Akhil jain
parent 16253a8509
commit fb06b7c96c
10 changed files with 221 additions and 0 deletions

27
doc/source/cli/index.rst Normal file
View File

@ -0,0 +1,27 @@
..
Copyright (c) 2018 NEC, Corp.
All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain
a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
========================
Tacker CLI Documentation
========================
In this section you will find information on Tackers command line
interface.
.. toctree::
:maxdepth: 1
tacker-status

View File

@ -0,0 +1,99 @@
..
Copyright (c) 2018 NEC, Corp.
All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain
a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
=============
tacker-status
=============
----------------------------------------
CLI interface for Tacker status commands
----------------------------------------
Synopsis
========
::
tacker-status <category> <command> [<args>]
Description
===========
:program:`tacker-status` is a tool that provides routines for checking the
status of a Tacker deployment.
Options
=======
The standard pattern for executing a :program:`tacker-status` command is::
tacker-status <category> <command> [<args>]
Run without arguments to see a list of available command categories::
tacker-status
Categories are:
* ``upgrade``
Detailed descriptions are below:
You can also run with a category argument such as ``upgrade`` to see a list of
all commands in that category::
tacker-status upgrade
These sections describe the available categories and arguments for
:program:`tacker-status`.
Upgrade
~~~~~~~
.. _tacker-status-checks:
``tacker-status upgrade check``
Performs a release-specific readiness check before restarting services with
new code. For example, missing or changed configuration options,
incompatible object states, or other conditions that could lead to
failures while upgrading.
**Return Codes**
.. list-table::
:widths: 20 80
:header-rows: 1
* - Return code
- Description
* - 0
- All upgrade readiness checks passed successfully and there is nothing
to do.
* - 1
- At least one check encountered an issue and requires further
investigation. This is considered a warning but the upgrade may be OK.
* - 2
- There was an upgrade status check failure that needs to be
investigated. This should be considered something that stops an
upgrade.
* - 255
- An unexpected error occurred.
**History of Checks**
**0.11.0 (Stein)**
* Sample check to be filled in with checks as they are added in Stein.

View File

@ -33,6 +33,7 @@ Contents
user/index
admin/index
configuration/index
cli/index
contributor/index
reference/index

View File

@ -82,6 +82,7 @@ oslo.reports==1.18.0
oslo.rootwrap==5.8.0
oslo.serialization==2.18.0
oslo.service==1.24.0
oslo.upgradecheck==0.1.0
oslo.utils==3.33.0
oslotest==3.2.0
packaging==17.1

View File

@ -0,0 +1,8 @@
---
prelude: >
Added new tool ``tacker-status upgrade check``.
features:
- |
New framework for ``tacker-status upgrade check`` command is added.
This framework allows adding various checks which can be run before a
Tacker upgrade to ensure if the upgrade can be performed safely.

View File

@ -32,6 +32,7 @@ oslo.reports>=1.18.0 # Apache-2.0
oslo.rootwrap>=5.8.0 # Apache-2.0
oslo.serialization!=2.19.1,>=2.18.0 # Apache-2.0
oslo.service!=1.28.1,>=1.24.0 # Apache-2.0
oslo.upgradecheck>=0.1.0 # Apache-2.0
oslo.utils>=3.33.0 # Apache-2.0
openstackdocstheme>=1.18.1 # Apache-2.0
python-neutronclient>=6.7.0 # Apache-2.0

View File

@ -43,6 +43,7 @@ console_scripts =
tacker-server = tacker.cmd.eventlet.tacker_server:main
tacker-conductor = tacker.cmd.eventlet.conductor:main
tacker-rootwrap = oslo.rootwrap.cmd:main
tacker-status = tacker.cmd.status:main
tacker.service_plugins =
dummy = tacker.tests.unit.dummy_plugin:DummyServicePlugin
vnfm = tacker.vnfm.plugin:VNFMPlugin

53
tacker/cmd/status.py Normal file
View File

@ -0,0 +1,53 @@
# Copyright (c) 2018 NEC, Corp.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import sys
from oslo_config import cfg
from oslo_upgradecheck import upgradecheck
from tacker._i18n import _
CONF = cfg.CONF
class Checks(upgradecheck.UpgradeCommands):
"""Contains upgrade checks
Various upgrade checks should be added as separate methods in this class
and added to _upgrade_checks tuple.
"""
def _sample_check(self):
"""This is sample check added to test the upgrade check framework
It needs to be removed after adding any real upgrade check
"""
return upgradecheck.Result(upgradecheck.Code.SUCCESS, 'Sample detail')
_upgrade_checks = (
# Sample check added for now.
# Whereas in future real checks must be added here in tuple
(_('Sample Check'), _sample_check),
)
def main():
return upgradecheck.main(
CONF, project='tacker', upgrade_command=Checks())
if __name__ == '__main__':
sys.exit(main())

View File

View File

@ -0,0 +1,30 @@
# Copyright (c) 2018 NEC, Corp.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from oslo_upgradecheck.upgradecheck import Code
from tacker.cmd import status
from tacker.tests.unit import base
class TestUpgradeChecks(base.TestCase):
def setUp(self):
super(TestUpgradeChecks, self).setUp()
self.cmd = status.Checks()
def test__sample_check(self):
check_result = self.cmd._sample_check()
self.assertEqual(
Code.SUCCESS, check_result.code)