mirror of
https://github.com/linux-system-roles/network.git
synced 2026-01-23 02:15:17 +00:00
Support the nmstate network state configuration
The users want to apply the nmstate network state configuration to the interface directly through the role, which necessitates the less complexity of the network configuration and allows the partial configuration on the network. To warrant that the users are capable to apply the nmstate network state configuration, add the support for the `network_state` variable. Signed-off-by: Wen Liang <liangwen12year@gmail.com>
This commit is contained in:
parent
6dfd6485ed
commit
e694ad72c1
7 changed files with 535 additions and 10 deletions
74
library/network_state.py
Normal file
74
library/network_state.py
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
from __future__ import absolute_import, division, print_function
|
||||
|
||||
__metaclass__ = type
|
||||
|
||||
DOCUMENTATION = r"""
|
||||
---
|
||||
module: network_state
|
||||
version_added: "2.9"
|
||||
short_description: module for network role to apply network state configuration
|
||||
description:
|
||||
- This module allows to apply the network state configuration through nmstate,
|
||||
https://github.com/nmstate/nmstate
|
||||
options:
|
||||
desired_state:
|
||||
description: Nmstate state definition
|
||||
required: true
|
||||
type: dict
|
||||
author: "Wen Liang (@liangwen12year)"
|
||||
"""
|
||||
|
||||
RETURN = r"""
|
||||
state:
|
||||
description: Network state after running the module
|
||||
type: dict
|
||||
returned: always
|
||||
"""
|
||||
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
import libnmstate # pylint: disable=import-error
|
||||
|
||||
|
||||
class NetworkState:
|
||||
def __init__(self, module, module_name):
|
||||
self.module = module
|
||||
self.params = module.params
|
||||
self.result = dict(changed=False)
|
||||
self.module_name = module_name
|
||||
self.previous_state = libnmstate.show()
|
||||
|
||||
def run(self):
|
||||
desired_state = self.params["desired_state"]
|
||||
libnmstate.apply(desired_state)
|
||||
current_state = libnmstate.show()
|
||||
if current_state != self.previous_state:
|
||||
self.result["changed"] = True
|
||||
|
||||
self.result["state"] = current_state
|
||||
|
||||
self.module.exit_json(**self.result)
|
||||
|
||||
|
||||
def run_module():
|
||||
module_args = dict(
|
||||
desired_state=dict(type="dict", required=True),
|
||||
)
|
||||
|
||||
module = AnsibleModule(
|
||||
argument_spec=module_args,
|
||||
)
|
||||
|
||||
network_state_module = NetworkState(module, "network_state")
|
||||
network_state_module.run()
|
||||
|
||||
|
||||
def main():
|
||||
run_module()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue