EdgeOS module improvements (#39530) (#40548)

* Update docs and use to_text on strings

* Add warning to use network_cli

(cherry picked from commit d5dbd8c76d)
pull/40552/head
Sam Doran 8 years ago committed by GitHub
parent 9bef06ccd9
commit 4c279f5e45
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,2 @@
bugfixes:
- edgeos modules - add note and warning that the modules require network_cli connection (https://github.com/ansible/ansible/issues/39499)

@ -25,6 +25,9 @@ description:
use a custom pager that can cause this module to hang. If the use a custom pager that can cause this module to hang. If the
value of the environment variable C(ANSIBLE_EDGEOS_TERMINAL_LENGTH) value of the environment variable C(ANSIBLE_EDGEOS_TERMINAL_LENGTH)
is not set, the default number of 10000 is used. is not set, the default number of 10000 is used.
- "This is a network module and requires C(connection: network_cli)
in order to work properly."
- For more information please see the L(Network Guide,../network/getting_started/index.html).
options: options:
commands: commands:
description: description:
@ -95,9 +98,10 @@ stdout_lines:
import time import time
from ansible.module_utils._text import to_text
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.common.utils import ComplexList
from ansible.module_utils.network.common.parsing import Conditional from ansible.module_utils.network.common.parsing import Conditional
from ansible.module_utils.network.common.utils import ComplexList
from ansible.module_utils.network.edgeos.edgeos import run_commands from ansible.module_utils.network.edgeos.edgeos import run_commands
from ansible.module_utils.six import string_types from ansible.module_utils.six import string_types
@ -105,7 +109,7 @@ from ansible.module_utils.six import string_types
def to_lines(stdout): def to_lines(stdout):
for item in stdout: for item in stdout:
if isinstance(item, string_types): if isinstance(item, string_types):
item = str(item).split('\n') item = to_text(item).split('\n')
yield item yield item
@ -149,7 +153,7 @@ def main():
try: try:
conditionals = [Conditional(c) for c in wait_for] conditionals = [Conditional(c) for c in wait_for]
except AttributeError as e: except AttributeError as e:
module.fail_json(msg=str(e)) module.fail_json(msg=to_text(e))
retries = module.params['retries'] retries = module.params['retries']
interval = module.params['interval'] interval = module.params['interval']

@ -25,6 +25,9 @@ description:
configuration file and state of the active configuration. All configuration file and state of the active configuration. All
configuration statements are based on `set` and `delete` commands configuration statements are based on `set` and `delete` commands
in the device configuration. in the device configuration.
- "This is a network module and requires the C(connection: network_cli) in order
to work properly."
- For more information please see the L(Network Guide,../network/getting_started/index.html).
notes: notes:
- Tested against EdgeOS 1.9.7 - Tested against EdgeOS 1.9.7
- Setting C(ANSIBLE_PERSISTENT_COMMAND_TIMEOUT) to 30 is recommended since - Setting C(ANSIBLE_PERSISTENT_COMMAND_TIMEOUT) to 30 is recommended since
@ -59,13 +62,14 @@ options:
choices: ['line', 'none'] choices: ['line', 'none']
backup: backup:
description: description:
- The C(backup) argument will backup the current devices active - The C(backup) argument will backup the current device's active
configuration to the Ansible control host prior to making any configuration to the Ansible control host prior to making any
changes. The backup file will be located in the backup folder changes. The backup file will be located in the backup folder
in the root of the playbook in the playbook root directory or role root directory if the
required: false playbook is part of an ansible role. If the directory does not
default: false exist, it is created.
choices: ['yes', 'no'] type: bool
default: 'no'
comment: comment:
description: description:
- Allows a commit description to be specified to be included - Allows a commit description to be specified to be included
@ -126,10 +130,12 @@ backup_path:
import re import re
from ansible.module_utils._text import to_native
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.common.config import NetworkConfig from ansible.module_utils.network.common.config import NetworkConfig
from ansible.module_utils.network.edgeos.edgeos import load_config, get_config, run_commands from ansible.module_utils.network.edgeos.edgeos import load_config, get_config, run_commands
DEFAULT_COMMENT = 'configured by edgeos_config' DEFAULT_COMMENT = 'configured by edgeos_config'
CONFIG_FILTERS = [ CONFIG_FILTERS = [
@ -154,7 +160,7 @@ def config_to_commands(config):
commands = ['set %s' % cmd.replace(' {', '') for cmd in commands] commands = ['set %s' % cmd.replace(' {', '') for cmd in commands]
else: else:
commands = str(candidate).split('\n') commands = to_native(candidate).split('\n')
return commands return commands
@ -169,13 +175,13 @@ def get_candidate(module):
def diff_config(commands, config): def diff_config(commands, config):
config = [str(c).replace("'", '') for c in config.splitlines()] config = [to_native(c).replace("'", '') for c in config.splitlines()]
updates = list() updates = list()
visited = set() visited = set()
for line in commands: for line in commands:
item = str(line).replace("'", '') item = to_native(line).replace("'", '')
if not item.startswith('set') and not item.startswith('delete'): if not item.startswith('set') and not item.startswith('delete'):
raise ValueError('line must start with either `set` or `delete`') raise ValueError('line must start with either `set` or `delete`')

@ -35,6 +35,8 @@ PRIVATE_KEYS_RE = re.compile('__.+__')
class ActionModule(_ActionModule): class ActionModule(_ActionModule):
def run(self, tmp=None, task_vars=None): def run(self, tmp=None, task_vars=None):
if self._play_context.connection != 'network_cli':
return {'failed': True, 'msg': 'Connection type %s is not valid for this module. Must use network_cli.' % self._play_context.connection}
if self._task.args.get('src'): if self._task.args.get('src'):
try: try:

@ -1,6 +1,5 @@
# Copyright: (c) 2018, Ansible Project # Copyright: (c) 2018, Ansible Project
# GNU General Public License v3.0+ # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function) from __future__ import (absolute_import, division, print_function)
__metaclass__ = type __metaclass__ = type

Loading…
Cancel
Save