summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Sprygada <privateip@users.noreply.github.com>2016-09-18 22:26:20 -0400
committerGitHub <noreply@github.com>2016-09-18 22:26:20 -0400
commitff52e01a11eb431525fb842346615d0981eb23d8 (patch)
treed63f7cd5923bfbe65c05205e9ef361e58d8f96ce
parent8f8eb84ebf214bf3f71f76691867fbf366a8f87f (diff)
parent463349c0d1c7269bc031ce36ea207207540af26f (diff)
downloadansible-ff52e01a11eb431525fb842346615d0981eb23d8.tar.gz
Merge pull request #17625 from skg-net/dellos6_template
Added support for template module for Dell Networking OS6 devices
-rw-r--r--CHANGELOG.md1
-rw-r--r--lib/ansible/module_utils/dellos6.py99
-rw-r--r--lib/ansible/plugins/action/dellos6_template.py28
3 files changed, 121 insertions, 7 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2f0ae74ea1..773a22fe00 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -70,6 +70,7 @@ Ansible Changes By Release
* dellos6_command
* dellos6_config
* dellos6_facts
+ * dellos6_template
- dellos9
* dellos9_command
* dellos9_config
diff --git a/lib/ansible/module_utils/dellos6.py b/lib/ansible/module_utils/dellos6.py
index 1351feddfc..420855e022 100644
--- a/lib/ansible/module_utils/dellos6.py
+++ b/lib/ansible/module_utils/dellos6.py
@@ -33,15 +33,101 @@ import re
from ansible.module_utils.shell import CliBase
from ansible.module_utils.network import Command, register_transport, to_list
-from ansible.module_utils.netcfg import NetworkConfig
+from ansible.module_utils.netcfg import NetworkConfig, ConfigLine, ignore_line, DEFAULT_COMMENT_TOKENS
+
def get_config(module):
- contents = module.params['running_config']
+ contents = module.params['config']
+
if not contents:
- contents = module.cli('show running-config all')[0]
- module.params['running_config'] = contents
+ contents = module.config.get_config()
+ module.params['config'] = contents
+
+ return Dellos6NetworkConfig(indent=0, contents=contents[0])
+
+
+def get_sublevel_config(running_config, module):
+ contents = list()
+ current_config_contents = list()
+ sublevel_config = Dellos6NetworkConfig(indent=0)
+
+ obj = running_config.get_object(module.params['parents'])
+ if obj:
+ contents = obj.children
+
+ for c in contents:
+ if isinstance(c, ConfigLine):
+ current_config_contents.append(c.raw)
+ sublevel_config.add(current_config_contents, module.params['parents'])
+
+ return sublevel_config
+
+
+def os6_parse(lines, indent=None, comment_tokens=None):
+ sublevel_cmds = [
+ re.compile(r'^vlan.*$'),
+ re.compile(r'^stack.*$'),
+ re.compile(r'^interface.*$'),
+ re.compile(r'line [(console)|(telnet)|(ssh)].*$'),
+ re.compile(r'ip ssh !(server).*$'),
+ re.compile(r'ip address .*$'),
+ re.compile(r'ip access-list .*$'),
+ re.compile(r'banner motd.*$'),
+ re.compile(r'radius-server host auth.*$')]
+
+ childline = re.compile(r'^exit$')
+
+ config = list()
+ inSubLevel = False
+ parent = None
+ children = list()
+ subcommandcount = 0
- return NetworkConfig(indent=1, contents=contents)
+ for line in str(lines).split('\n'):
+ text = str(re.sub(r'([{};])', '', line)).strip()
+
+ cfg = ConfigLine(text)
+ cfg.raw = line
+
+ if not text or ignore_line(text, comment_tokens):
+ parent = None
+ children = list()
+ inSubLevel = False
+ continue
+
+ if inSubLevel is False:
+ for pr in sublevel_cmds:
+ if pr.match(line):
+ parent = cfg
+ config.append(parent)
+ inSubLevel = True
+ continue
+ if parent is None:
+ config.append(cfg)
+
+ # handle sub level commands
+ elif inSubLevel and childline.match(line):
+ parent.children = children
+ inSubLevel = False
+ children = list()
+ parent = None
+
+ # handle top level commands
+ elif inSubLevel:
+ children.append(cfg)
+ cfg.parents = [parent]
+ config.append(cfg)
+
+ else: # global level
+ config.append(cfg)
+
+ return config
+
+
+class Dellos6NetworkConfig(NetworkConfig):
+
+ def load(self, contents):
+ self._config = os6_parse(contents, self.indent, DEFAULT_COMMENT_TOKENS)
class Cli(CliBase):
@@ -60,8 +146,7 @@ class Cli(CliBase):
re.compile(r"(?:incomplete|ambiguous) command", re.I),
re.compile(r"connection timed out", re.I),
re.compile(r"[^\r\n]+ not found", re.I),
- re.compile(r"'[^']' +returned error code: ?\d+"),
- ]
+ re.compile(r"'[^']' +returned error code: ?\d+")]
def connect(self, params, **kwargs):
diff --git a/lib/ansible/plugins/action/dellos6_template.py b/lib/ansible/plugins/action/dellos6_template.py
new file mode 100644
index 0000000000..5334b644d3
--- /dev/null
+++ b/lib/ansible/plugins/action/dellos6_template.py
@@ -0,0 +1,28 @@
+#
+# Copyright 2015 Peter Sprygada <psprygada@ansible.com>
+#
+# This file is part of Ansible
+#
+# Ansible is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Ansible is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
+#
+from __future__ import (absolute_import, division, print_function)
+__metaclass__ = type
+
+from ansible.plugins.action import ActionBase
+from ansible.plugins.action.net_template import ActionModule as NetActionModule
+
+class ActionModule(NetActionModule, ActionBase):
+ pass
+
+