Update help docs for actions in Shipyard Client

- Adds the information related to the test_site action.
- Reformats, slightly, the output from 'shipyard help actions'
- Adds tests that use an externalized list of actions to keep the help
documentation in alignment with the actions supported in the API.

Change-Id: I2efd473da0dbf6c8cbadfc9fae575c303996c43b
This commit is contained in:
Bryan Strassner 2019-01-23 10:48:29 -06:00 committed by Matt Carter
parent f1c193a232
commit fe87c64f97
4 changed files with 90 additions and 12 deletions

View File

@ -23,6 +23,7 @@ from falcon import testing
from oslo_config import cfg from oslo_config import cfg
import pytest import pytest
import responses import responses
import yaml
from shipyard_airflow.common.notes.notes import NotesManager from shipyard_airflow.common.notes.notes import NotesManager
from shipyard_airflow.common.notes.notes_helper import NotesHelper from shipyard_airflow.common.notes.notes_helper import NotesHelper
@ -48,6 +49,23 @@ CONF = cfg.CONF
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
def _get_actions_list():
dir_path = os.path.dirname(os.path.realpath(__file__))
a_path = dir_path.split('src/bin')[0] + "src/bin/supported_actions.yaml"
with open(a_path, 'r') as stream:
try:
action_list = yaml.safe_load(stream)['actions']
if not action_list:
raise FileNotFoundError("Action list is empty")
except Exception as e:
print(e)
print("This test requires that the file at '{}' is a valid yaml "
"file containing a list of action names at a key of "
"'actions'".format(a_path))
assert False
return action_list
def get_token(): def get_token():
"""Stub method to use for NotesHelper/NotesManager""" """Stub method to use for NotesHelper/NotesManager"""
return "token" return "token"
@ -238,6 +256,19 @@ def conf_fixture(request):
context = ShipyardRequestContext() context = ShipyardRequestContext()
def test_actions_all_in_list():
"""Test that all actions are in alignment with supported list
Compares the action mappings structure with the externalized list of
supported actions, allowing for better alignment with the client
"""
mappings = actions_api._action_mappings()
actions = _get_actions_list()
for action in actions:
assert action in mappings
for action in mappings.keys():
assert action in actions
@mock.patch.object(ShipyardPolicy, 'authorize', return_value=True) @mock.patch.object(ShipyardPolicy, 'authorize', return_value=True)
@mock.patch.object( @mock.patch.object(
ActionsResource, ActionsResource,

View File

@ -32,23 +32,34 @@ For information of the following topics, run shipyard help <topic>
def actions(): def actions():
return '''ACTIONS return '''ACTIONS
The workflow actions that may be invoked using Shipyard Workflow actions that may be invoked using Shipyard.
deploy_site: Triggers the initial deployment of a site using the latest deploy_site
committed configuration documents. Triggers the initial deployment of a site using the latest committed
configdocs.
update_site: Triggers the update to a deployment of a site, using the latest update_site
committed configuration documents. Triggers the update to a deployment of a site, using the latest committed
configdocs.
update_software: Starts an update that only exercises the software portion of update_software
the committed configuration documents. Starts an update that only exercises the software portion of the committed
configdocs.
redeploy_server: Using parameters to indicate which server(s), triggers a redeploy_server
redeployment of servers to the last committed design and Using the --param="target_nodes=node1,node2" parameter to target server(s),
secrets. triggers a redeployment of servers using the last committed configdocs.
relabel_nodes: Using parameters to indicate which server(s), updates the relabel_nodes
labels for those servers. Using the --param="target_nodes=node1,node2" parameter to target server(s),
updates the Kubernetes node labels for the nodes on those servers.
test_site
Triggers the Helm tests for the site, using parameters to control the
tests:
--param="cleanup=true" to delete the test pods immediately after execution
--param="release=release-name" to target a specific Helm release instead of
all releases (the default if this parameter is not specified).
''' '''

View File

@ -11,11 +11,29 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
import os
from click.testing import CliRunner from click.testing import CliRunner
import yaml
from shipyard_client.cli.help.commands import help from shipyard_client.cli.help.commands import help
def _get_actions_list():
dir_path = os.path.dirname(os.path.realpath(__file__))
a_path = dir_path.split('src/bin')[0] + "src/bin/supported_actions.yaml"
with open(a_path, 'r') as stream:
try:
action_list = yaml.safe_load(stream)['actions']
if not action_list:
raise FileNotFoundError("Action list is empty")
except Exception as e:
print(e)
print("This test requires that the file at '{}' is a valid yaml "
"file containing a list of action names at a key of "
"'actions'".format(a_path))
assert False
return action_list
def test_help(): def test_help():
"""test help with all options""" """test help with all options"""
@ -27,6 +45,10 @@ def test_help():
topic = 'actions' topic = 'actions'
result = runner.invoke(help, [topic]) result = runner.invoke(help, [topic])
assert 'ACTIONS' in result.output assert 'ACTIONS' in result.output
actions = _get_actions_list()
for action in actions:
# Assert that actions each have headers
assert "\n{}\n".format(action) in result.output
topic = 'configdocs' topic = 'configdocs'
result = runner.invoke(help, [topic]) result = runner.invoke(help, [topic])

View File

@ -0,0 +1,14 @@
# This file contains a list of supported actions that exists outside the
# scope of both the client and API. This is tested in both the client and
# the API to ensure that the actions in the API match the actions supported
# in the help of the client. Because of this, it becomes another place that
# has to be updated, but since it's tied to tests, the reminders to fix it
# should be outweighed by the benefit.
actions:
- deploy_site
- update_site
- update_software
- redeploy_server
- relabel_nodes
- test_site
...