def main(): backup_spec = dict( filename=dict(), dir_path=dict(type='path') ) argument_spec = dict( src=dict(type='path'), lines=dict(type='list'), match=dict(default='line', choices=['line', 'none']), comment=dict(default=DEFAULT_COMMENT), config=dict(), backup=dict(type='bool', default=False), backup_options=dict(type='dict', options=backup_spec), save=dict(type='bool', default=False), ) argument_spec.update(vyos_argument_spec) mutually_exclusive = [('lines', 'src')] module = AnsibleModule( argument_spec=argument_spec, mutually_exclusive=mutually_exclusive, supports_check_mode=True ) warnings = list() result = dict(changed=False, warnings=warnings) if module.params['backup']: result['__backup__'] = get_config(module=module) if any((module.params['src'], module.params['lines'])): run(module, result) if module.params['save']: diff = run_commands(module, commands=['configure', 'compare saved'])[1] if diff != '[edit]': run_commands(module, commands=['save']) result['changed'] = True run_commands(module, commands=['exit']) module.exit_json(**result)
def map_config_to_obj(module): objs = [] output = run_commands(module, 'show interfaces') lines = output[0].strip().splitlines()[3:] for l in lines: splitted_line = re.split(r'\s{2,}', l.strip()) obj = {} eth = splitted_line[0].strip("'") if eth.startswith('eth'): obj['interfaces'] = [] if '.' in eth: interface = eth.split('.')[0] obj['interfaces'].append(interface) obj['vlan_id'] = eth.split('.')[-1] else: obj['interfaces'].append(eth) obj['vlan_id'] = None if splitted_line[1].strip("'") != '-': obj['address'] = splitted_line[1].strip("'") if len(splitted_line) > 3: obj['name'] = splitted_line[3].strip("'") obj['state'] = 'present' objs.append(obj) return objs
def map_config_to_obj(module): obj = [] output = run_commands(module, ['show interfaces bonding slaves']) lines = output[0].splitlines() if len(lines) > 1: for line in lines[1:]: splitted_line = line.split() name = splitted_line[0] mode = splitted_line[1] state = splitted_line[2] if len(splitted_line) > 4: members = splitted_line[4:] else: members = [] obj.append({ 'name': name, 'mode': mode, 'members': members, 'state': state }) return obj
def map_config_to_obj(module): obj = [] output = run_commands(module, ['show interfaces']) lines = re.split(r'\n[e|l]', output[0])[1:] if len(lines) > 0: for line in lines: splitted_line = line.split() if len(splitted_line) > 0: ipv4 = [] ipv6 = [] if splitted_line[0].lower().startswith('th'): name = 'e' + splitted_line[0].lower() elif splitted_line[0].lower().startswith('o'): name = 'l' + splitted_line[0].lower() for i in splitted_line[1:]: if (('.' in i or ':' in i) and '/' in i): value = i.split(r'\n')[0] if is_ipv4(value): ipv4.append(value) elif is_ipv6(value): ipv6.append(value) obj.append({'name': name, 'ipv4': ipv4, 'ipv6': ipv6}) return obj
def main(): spec = dict( commands=dict(type='list', required=True), wait_for=dict(type='list', aliases=['waitfor']), match=dict(default='all', choices=['all', 'any']), retries=dict(default=10, type='int'), interval=dict(default=1, type='int') ) spec.update(vyos_argument_spec) module = AnsibleModule(argument_spec=spec, supports_check_mode=True) warnings = list() result = {'changed': False, 'warnings': warnings} commands = parse_commands(module, warnings) wait_for = module.params['wait_for'] or list() try: conditionals = [Conditional(c) for c in wait_for] except AttributeError as exc: module.fail_json(msg=to_text(exc)) retries = module.params['retries'] interval = module.params['interval'] match = module.params['match'] for _ in range(retries): responses = run_commands(module, commands) for item in list(conditionals): if item(responses): if match == 'any': conditionals = list() break conditionals.remove(item) if not conditionals: break time.sleep(interval) if conditionals: failed_conditions = [item.raw for item in conditionals] msg = 'One or more conditional statements have not been satisfied' module.fail_json(msg=msg, failed_conditions=failed_conditions) result.update({ 'stdout': responses, 'stdout_lines': list(to_lines(responses)), }) module.exit_json(**result)
def populate(self): self.responses = run_commands(self.module, list(self.COMMANDS))
def main(): """ main entry point for module execution """ argument_spec = dict( count=dict(type="int", default=5), dest=dict(type="str", required=True), source=dict(type="str"), ttl=dict(type='int'), size=dict(type='int'), interval=dict(type='int'), state=dict(type="str", choices=["absent", "present"], default="present"), ) argument_spec.update(vyos_argument_spec) module = AnsibleModule(argument_spec=argument_spec) count = module.params["count"] dest = module.params["dest"] source = module.params["source"] size = module.params["size"] ttl = module.params["ttl"] interval = module.params["interval"] warnings = list() results = {} if warnings: results["warnings"] = warnings results["commands"] = [ build_ping(dest, count, size, interval, source, ttl) ] ping_results = run_commands(module, commands=results["commands"]) ping_results_list = ping_results[0].split("\n") rtt_info, rate_info = None, None for line in ping_results_list: if line.startswith('rtt'): rtt_info = line if line.startswith('%s packets transmitted' % count): rate_info = line if rtt_info: rtt = parse_rtt(rtt_info) for k, v in rtt.items(): if rtt[k] is not None: rtt[k] = int(v) results["rtt"] = rtt pkt_loss, rx, tx = parse_rate(rate_info) results["packet_loss"] = str(pkt_loss) + "%" results["packets_rx"] = int(rx) results["packets_tx"] = int(tx) validate_results(module, pkt_loss, results) module.exit_json(**results)