mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
207 lines
6.8 KiB
Python
207 lines
6.8 KiB
Python
|
#!/usr/bin/python
|
||
|
#
|
||
|
# Copyright: Ansible Project
|
||
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||
|
|
||
|
from __future__ import absolute_import, division, print_function
|
||
|
__metaclass__ = type
|
||
|
|
||
|
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
||
|
'status': ['preview'],
|
||
|
'supported_by': 'community'}
|
||
|
|
||
|
DOCUMENTATION = '''
|
||
|
---
|
||
|
module: onyx_ptp_global
|
||
|
author: "Anas Badaha (@anasb)"
|
||
|
short_description: Configures PTP Global parameters
|
||
|
description:
|
||
|
- This module provides declarative management of PTP Global configuration
|
||
|
on Mellanox ONYX network devices.
|
||
|
notes:
|
||
|
- Tested on ONYX 3.6.8130
|
||
|
ptp and ntp protocols cannot be enabled at the same time
|
||
|
options:
|
||
|
ptp_state:
|
||
|
description:
|
||
|
- PTP state.
|
||
|
choices: ['enabled', 'disabled']
|
||
|
default: enabled
|
||
|
ntp_state:
|
||
|
description:
|
||
|
- NTP state.
|
||
|
choices: ['enabled', 'disabled']
|
||
|
domain:
|
||
|
description:
|
||
|
- "set PTP domain number Range 0-127"
|
||
|
primary_priority:
|
||
|
description:
|
||
|
- "set PTP primary priority Range 0-225"
|
||
|
secondary_priority:
|
||
|
description:
|
||
|
- "set PTP secondary priority Range 0-225"
|
||
|
'''
|
||
|
|
||
|
EXAMPLES = """
|
||
|
- name: configure PTP
|
||
|
onyx_ptp_global:
|
||
|
ntp_state: enabled
|
||
|
ptp_state: disabled
|
||
|
domain: 127
|
||
|
primary_priority: 128
|
||
|
secondary_priority: 128
|
||
|
"""
|
||
|
|
||
|
RETURN = """
|
||
|
commands:
|
||
|
description: The list of configuration mode commands to send to the device.
|
||
|
returned: always
|
||
|
type: list
|
||
|
sample:
|
||
|
- no ntp enable
|
||
|
- protocol ptp
|
||
|
- ptp domain 127
|
||
|
"""
|
||
|
|
||
|
from ansible.module_utils.basic import AnsibleModule
|
||
|
from ansible_collections.community.general.plugins.module_utils.network.onyx.onyx import show_cmd
|
||
|
from ansible_collections.community.general.plugins.module_utils.network.onyx.onyx import BaseOnyxModule
|
||
|
|
||
|
|
||
|
class OnyxPtpGlobalModule(BaseOnyxModule):
|
||
|
|
||
|
def init_module(self):
|
||
|
""" initialize module
|
||
|
"""
|
||
|
element_spec = dict(
|
||
|
ntp_state=dict(choices=['enabled', 'disabled']),
|
||
|
ptp_state=dict(choices=['enabled', 'disabled'], default='enabled'),
|
||
|
domain=dict(type=int),
|
||
|
primary_priority=dict(type=int),
|
||
|
secondary_priority=dict(type=int)
|
||
|
)
|
||
|
argument_spec = dict()
|
||
|
argument_spec.update(element_spec)
|
||
|
self._module = AnsibleModule(
|
||
|
argument_spec=argument_spec,
|
||
|
supports_check_mode=True)
|
||
|
|
||
|
def get_required_config(self):
|
||
|
module_params = self._module.params
|
||
|
self._required_config = dict(module_params)
|
||
|
self._validate_param_values(self._required_config)
|
||
|
|
||
|
def _validate_param_values(self, obj, param=None):
|
||
|
super(OnyxPtpGlobalModule, self).validate_param_values(obj, param)
|
||
|
if obj['ntp_state'] == 'enabled' and obj['ptp_state'] == 'enabled':
|
||
|
self._module.fail_json(msg='PTP State and NTP State Can not be enabled at the same time')
|
||
|
|
||
|
def validate_domain(self, value):
|
||
|
if value and not 0 <= int(value) <= 127:
|
||
|
self._module.fail_json(msg='domain must be between 0 and 127')
|
||
|
|
||
|
def validate_primary_priority(self, value):
|
||
|
if value and not 0 <= int(value) <= 255:
|
||
|
self._module.fail_json(msg='Primary Priority must be between 0 and 255')
|
||
|
|
||
|
def validate_secondary_priority(self, value):
|
||
|
if value and not 0 <= int(value) <= 255:
|
||
|
self._module.fail_json(msg='Secondary Priority must be between 0 and 255')
|
||
|
|
||
|
def _set_ntp_config(self, ntp_config):
|
||
|
ntp_config = ntp_config[0]
|
||
|
if not ntp_config:
|
||
|
return
|
||
|
ntp_state = ntp_config.get('NTP enabled')
|
||
|
if ntp_state == "yes":
|
||
|
self._current_config['ntp_state'] = "enabled"
|
||
|
else:
|
||
|
self._current_config['ntp_state'] = "disabled"
|
||
|
|
||
|
def _set_ptp_config(self, ptp_config):
|
||
|
if ptp_config is None:
|
||
|
self._current_config['ptp_state'] = 'disabled'
|
||
|
else:
|
||
|
self._current_config['ptp_state'] = 'enabled'
|
||
|
self._current_config['domain'] = int(ptp_config['Domain'])
|
||
|
self._current_config['primary_priority'] = int(ptp_config['Priority1'])
|
||
|
self._current_config['secondary_priority'] = int(ptp_config['Priority2'])
|
||
|
|
||
|
def _show_ntp_config(self):
|
||
|
cmd = "show ntp configured"
|
||
|
return show_cmd(self._module, cmd, json_fmt=True, fail_on_error=False)
|
||
|
|
||
|
def _show_ptp_config(self):
|
||
|
cmd = "show ptp clock"
|
||
|
return show_cmd(self._module, cmd, json_fmt=True, fail_on_error=False)
|
||
|
|
||
|
def load_current_config(self):
|
||
|
self._current_config = dict()
|
||
|
|
||
|
ntp_config = self._show_ntp_config()
|
||
|
self._set_ntp_config(ntp_config)
|
||
|
|
||
|
ptp_config = self._show_ptp_config()
|
||
|
self._set_ptp_config(ptp_config)
|
||
|
|
||
|
def generate_commands(self):
|
||
|
ntp_state = self._required_config.get("ntp_state")
|
||
|
if ntp_state == "enabled":
|
||
|
self._enable_ntp()
|
||
|
elif ntp_state == "disabled":
|
||
|
self._disable_ntp()
|
||
|
|
||
|
ptp_state = self._required_config.get("ptp_state", "enabled")
|
||
|
if ptp_state == "enabled":
|
||
|
self._enable_ptp()
|
||
|
else:
|
||
|
self._disable_ptp()
|
||
|
|
||
|
domain = self._required_config.get("domain")
|
||
|
if domain is not None:
|
||
|
curr_domain = self._current_config.get("domain")
|
||
|
if domain != curr_domain:
|
||
|
self._commands.append('ptp domain %d' % domain)
|
||
|
|
||
|
primary_priority = self._required_config.get("primary_priority")
|
||
|
if primary_priority is not None:
|
||
|
curr_primary_priority = self._current_config.get("primary_priority")
|
||
|
if primary_priority != curr_primary_priority:
|
||
|
self._commands.append('ptp priority1 %d' % primary_priority)
|
||
|
|
||
|
secondary_priority = self._required_config.get("secondary_priority")
|
||
|
if secondary_priority is not None:
|
||
|
curr_secondary_priority = self._current_config.get("secondary_priority")
|
||
|
if secondary_priority != curr_secondary_priority:
|
||
|
self._commands.append('ptp priority2 %d' % secondary_priority)
|
||
|
|
||
|
def _enable_ptp(self):
|
||
|
curr_ptp_state = self._current_config['ptp_state']
|
||
|
if curr_ptp_state == 'disabled':
|
||
|
self._commands.append('protocol ptp')
|
||
|
|
||
|
def _disable_ptp(self):
|
||
|
curr_ptp_state = self._current_config['ptp_state']
|
||
|
if curr_ptp_state == 'enabled':
|
||
|
self._commands.append('no protocol ptp')
|
||
|
|
||
|
def _enable_ntp(self):
|
||
|
curr_ntp_state = self._current_config.get('ntp_state')
|
||
|
if curr_ntp_state == 'disabled':
|
||
|
self._commands.append('ntp enable')
|
||
|
|
||
|
def _disable_ntp(self):
|
||
|
curr_ntp_state = self._current_config['ntp_state']
|
||
|
if curr_ntp_state == 'enabled':
|
||
|
self._commands.append('no ntp enable')
|
||
|
|
||
|
|
||
|
def main():
|
||
|
""" main entry point for module execution
|
||
|
"""
|
||
|
OnyxPtpGlobalModule.main()
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main()
|