Add an hourly cron trigger for tripleo-ui logging

After tripleo-common workbooks are loaded, we create a new cron trigger in
Mistral.  This will run the `publish_ui_logs_to_swift` workflow every hour.

Also makes sure that we are deleting the cron-triggers before deleting
the workflows

Change-Id: Ic60be51e46b56cbae9c4b5071ec8bfd908cccd5d
Depends-On: I2affd39e85ccfdbaa18590de182104715cfbbed4
Depends-On: I636873c0db4b3dbf66a0c5a856fee4dcb644ac3c
Depends-On: Ifa7d6eb43ea86e97ef5707d378901d3e2c074a7a
Implements: blueprint websocket-logging
This commit is contained in:
Honza Pokorny 2017-05-31 15:06:54 -03:00 committed by Adriano Petrich
parent 361c97555d
commit 19c96cd859
3 changed files with 47 additions and 6 deletions

View File

@ -1008,6 +1008,14 @@ class TestPostConfig(base.BaseTestCase):
mock_workbooks[0].name = 'foo'
mock_workbooks[1].name = 'tripleo.bar'
mock_mistral.workbooks.list.return_value = mock_workbooks
mock_triggers = [mock.Mock() for m in range(2)]
mock_triggers[0].name = 'foobar'
mock_triggers[0].workflow_name = 'foo'
mock_triggers[1].name = 'delete_me'
mock_triggers[1].workflow_name = 'tripleo.bar'
mock_mistral.cron_triggers.list.return_value = mock_triggers
mock_workflows = [mock.Mock() for m in range(2)]
mock_workflows[0].name = 'foo'
mock_workflows[1].name = 'tripleo.bar'
@ -1020,6 +1028,8 @@ class TestPostConfig(base.BaseTestCase):
mock_mistral.workbooks.delete.mock_calls)
self.assertEqual([mock.call('tripleo.bar')],
mock_mistral.workflows.delete.mock_calls)
self.assertEqual([mock.call('delete_me')],
mock_mistral.cron_triggers.delete.mock_calls)
self.assertEqual([mock.call(undercloud.PATHS.WORKBOOK_PATH +
'/foo.yaml'),
mock.call(undercloud.PATHS.WORKBOOK_PATH +
@ -1048,18 +1058,27 @@ class TestPostConfig(base.BaseTestCase):
mock_workbooks[0].name = 'foo'
mock_workbooks[1].name = 'tripleo.bar'
mock_mistral.workbooks.list.return_value = mock_workbooks
mock_triggers = [mock.Mock() for m in range(2)]
mock_triggers[0].name = 'dont_delete_me'
mock_triggers[0].workflow_name = 'tripleo.foo'
mock_triggers[1].name = 'delete_me'
mock_triggers[1].workflow_name = 'tripleo.bar'
mock_mistral.cron_triggers.list.return_value = mock_triggers
mock_workflows = [mock.Mock() for m in range(2)]
mock_workflows[0].name = 'tripleo.foo'
mock_workflows[1].name = 'tripleo.bar'
mock_workflows[0].tags = []
mock_workflows[1].tags = ['tripleo-common-managed', ]
mock_mistral.workflows.list.return_value = mock_workflows
mock_listdir.return_value = ['foo.yaml', 'bar.yaml']
undercloud._post_config_mistral(instack_env, mock_mistral, mock_swift)
self.assertEqual([mock.call('tripleo.bar')],
mock_mistral.workbooks.delete.mock_calls)
self.assertEqual([mock.call('tripleo.bar')],
mock_mistral.workflows.delete.mock_calls)
self.assertEqual([mock.call('delete_me')],
mock_mistral.cron_triggers.delete.mock_calls)
self.assertEqual([mock.call(undercloud.PATHS.WORKBOOK_PATH +
'/foo.yaml'),
mock.call(undercloud.PATHS.WORKBOOK_PATH +
@ -1076,7 +1095,7 @@ class TestUpgradeFact(base.BaseTestCase):
@mock.patch('os.path.dirname')
@mock.patch('os.path.exists')
@mock.patch.object(tempfile, 'mkstemp', return_value=(1, '/tmp/file'))
def test_upgrade_fact(self, mock_mkstemp, mock_exists, mock_dirname,
def test_upgrade_fact(self, mock_mkstemp, mock_exists, mock_dirname,
mock_run):
fact_path = '/etc/facter/facts.d/undercloud_upgrade.txt'
mock_dirname.return_value = '/etc/facter/facts.d'

View File

@ -1548,11 +1548,20 @@ def _prepare_ssh_environment(mistral):
mistral.executions.create('tripleo.validations.v1.copy_ssh_key')
def _create_logging_cron(mistral):
LOG.info('Configuring an hourly cron trigger for tripleo-ui logging')
mistral.cron_triggers.create(
'publish-ui-logs-hourly',
'tripleo.plan_management.v1.publish_ui_logs_to_swift',
pattern='0 * * * *'
)
def _post_config_mistral(instack_env, mistral, swift):
LOG.info('Configuring Mistral workbooks')
for workbook in [w for w in mistral.workbooks.list()
if 'tripleo' in w.name]:
if w.name.startswith('tripleo')]:
mistral.workbooks.delete(workbook.name)
managed_tag = 'tripleo-common-managed'
@ -1568,12 +1577,19 @@ def _post_config_mistral(instack_env, mistral, swift):
# TODO(d0ugal): From Q onwards we should only ever delete workflows with
# the tripleo-common tag.
if 'tripleo-common-managed' in workflow_tags:
workflows_delete = [w for w in all_workflows if managed_tag in w.tags]
workflows_delete = [w.name for w in all_workflows
if managed_tag in w.tags]
else:
workflows_delete = [w for w in all_workflows if 'tripleo' in w.name]
workflows_delete = [w.name for w in all_workflows
if w.name.startswith('tripleo')]
for workflow in workflows_delete:
mistral.workflows.delete(workflow.name)
# in order to delete workflows they should have no triggers associated
for trigger in [t for t in mistral.cron_triggers.list()
if t.workflow_name in workflows_delete]:
mistral.cron_triggers.delete(trigger.name)
for workflow_name in workflows_delete:
mistral.workflows.delete(workflow_name)
for workbook in [f for f in os.listdir(PATHS.WORKBOOK_PATH)
if os.path.isfile(os.path.join(PATHS.WORKBOOK_PATH, f))]:
@ -1585,6 +1601,7 @@ def _post_config_mistral(instack_env, mistral, swift):
_create_mistral_config_environment(instack_env, mistral)
_migrate_plans(mistral, swift, plans)
_create_default_plan(mistral, plans)
_create_logging_cron(mistral)
if CONF.enable_validations:
_prepare_ssh_environment(mistral)

View File

@ -0,0 +1,5 @@
---
features:
- |
Implements `websocket-logging <https://blueprints.launchpad.net/openstack/?searchtext=websocket-logging>`__
Add an hourly cron trigger for tripleo-ui logging