Advertisement
Guest User

Untitled

a guest
Aug 21st, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.89 KB | None | 0 0
  1. try:
  2.     import netaddr
  3.     HAS_NETADDR = True
  4. except ImportError:
  5.     HAS_NETADDR = False
  6. try:
  7.     import netifaces
  8.     HAS_NETIFACES = True
  9. except ImportError:
  10.     HAS_NETIFACES = False
  11.  
  12. from ansible.module_utils.basic import AnsibleModule
  13.  
  14.  
  15. def check_interfaces(name, address):
  16.     result = {
  17.         'success': False,
  18.         'data': {
  19.             'found': False,
  20.             'name': '',
  21.             'interfaces': {}
  22.         }
  23.     }
  24.  
  25.     for interface in netifaces.interfaces():
  26.         addresses = netifaces.ifaddresses(interface)
  27.         result['data']['interfaces'][interface] = addresses
  28.  
  29.         try:
  30.             if netaddr.IPAddress(addresses[netifaces.AF_INET][0]['addr']) in netaddr.IPNetwork(address):
  31.                 if interface == name:
  32.                     result['success'] = True
  33.                     result['data']['found'] = True
  34.                     result['data']['name'] = name
  35.                 else:
  36.                     result['success'] = True
  37.                     result['data']['found'] = False
  38.                     result['data']['name'] = interface
  39.         except KeyError:
  40.             pass
  41.  
  42.     return result
  43.  
  44.  
  45. def main():
  46.     module = AnsibleModule(
  47.         argument_spec=dict(
  48.             name=dict(required=True),
  49.             subnet=dict(required=True)
  50.         )
  51.     )
  52.  
  53.     if not HAS_NETADDR:
  54.         module.fail_json(msg='The netaddr python module is required')
  55.     if not HAS_NETIFACES:
  56.         module.fail_json(msg='The netifaces python module is required')
  57.  
  58.     name = module.params['name']
  59.     subnet = module.params['subnet']
  60.  
  61.     result_interface = check_interfaces(name, subnet)
  62.     if not result_interface['success']:
  63.         module.fail_json(data_interface=result_interface['data'], msg='No interface in subnet %s' % subnet)
  64.  
  65.     module.exit_json(data_interface=result_interface['data'])
  66.  
  67.  
  68. if __name__ == '__main__':
  69.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement