Source code for validations_common.library.reportentry

# -*- coding: utf-8 -*-
# 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 ansible.module_utils.basic import AnsibleModule
from yaml import safe_load as yaml_safe_load

DOCUMENTATION = '''
---
module: reportentry
short_description: Print a custom report
description:
    - Print a custom report
options:
    report_status:
        required: true
        description:
          - The report status. Should be 'OK', 'ERROR' or 'SKIPPED'.
        choices:
          - 'OK'
          - 'ERROR'
          - 'SKIPPED'
        type: str
    report_reason:
        required: true
        description:
          - The reason of the report
        type: str
    report_recommendations:
        required: true
        description:
          - A list of recommendations to do.
        type: list
author: "Gael Chamoulaud"
'''

EXAMPLES = '''
- hosts: undercloud
  tasks:
  - name: Report DNS setup in undercloud.conf
    reportentry:
      report_status: "ERROR"
      report_reason: "DNS is not setup correctly in undercloud.conf"
      report_recommendations:
        - "Please set the 'undercloud_nameservers' param in undercloud.conf"
'''


[docs]def format_msg_report(status, reason, recommendations): """ Turn status, reason and list of recommendations into more readable formatted strings. :return: status and reason as string, recommendations as separate strings :rtype: tuple of strings """ msg = ("[{}] '{}'\n".format(status, reason)) if recommendations: for rec in recommendations: msg += " - RECOMMENDATION: {}\n".format(rec) return msg
[docs]def display_type_report(module, status, msg): """ Pass msg to fail_json or exit_json methods depending on status. """ if status == 'ERROR': module.fail_json(msg=msg) elif status == "SKIPPED": module.exit_json(changed=False, warnings=msg) else: module.exit_json(changed=False, msg=msg)
[docs]def main(): module = AnsibleModule( argument_spec=yaml_safe_load(DOCUMENTATION)['options'] ) status = module.params.get('report_status') msg = format_msg_report(module.params.get('report_status'), module.params.get('report_reason'), module.params.get('report_recommendations')) display_type_report(module, status, msg)
if __name__ == '__main__': main()