??????????????
Warning: Cannot modify header information - headers already sent by (output started at /home/mybf1/public_html/mentol.bf1.my/SS1.php:4) in /home/mybf1/public_html/mentol.bf1.my/SS1.php on line 173

Warning: Cannot modify header information - headers already sent by (output started at /home/mybf1/public_html/mentol.bf1.my/SS1.php:4) in /home/mybf1/public_html/mentol.bf1.my/SS1.php on line 174

Warning: Cannot modify header information - headers already sent by (output started at /home/mybf1/public_html/mentol.bf1.my/SS1.php:4) in /home/mybf1/public_html/mentol.bf1.my/SS1.php on line 175

Warning: Cannot modify header information - headers already sent by (output started at /home/mybf1/public_html/mentol.bf1.my/SS1.php:4) in /home/mybf1/public_html/mentol.bf1.my/SS1.php on line 176

Warning: Cannot modify header information - headers already sent by (output started at /home/mybf1/public_html/mentol.bf1.my/SS1.php:4) in /home/mybf1/public_html/mentol.bf1.my/SS1.php on line 177

Warning: Cannot modify header information - headers already sent by (output started at /home/mybf1/public_html/mentol.bf1.my/SS1.php:4) in /home/mybf1/public_html/mentol.bf1.my/SS1.php on line 178
 Udac@`sddlmZmZmZeZdZdZddlZddl Z ddl m Z ddl mZddlmZddlmZmZdd lmZdd lmZdd lmZdd lmZdd lmZmZddl m!Z!d-Z"d+eefd,YZ#dS(.i(tabsolute_importtdivisiontprint_functions+ name: netbox plugin_type: inventory author: - Remy Leone (@sieben) - Anthony Ruhier (@Anthony25) - Nikhil Singh Baliyan (@nikkytub) short_description: NetBox inventory source description: - Get inventory hosts from NetBox extends_documentation_fragment: - constructed options: plugin: description: token that ensures this is a source file for the 'netbox' plugin. required: True choices: ['netbox'] api_endpoint: description: Endpoint of the NetBox API required: True env: - name: NETBOX_API validate_certs: description: - Allows connection when SSL certificates are not valid. Set to C(false) when certificates are not trusted. default: True type: boolean config_context: description: - If True, it adds config-context in host vars. - Config-context enables the association of arbitrary data to devices and virtual machines grouped by region, site, role, platform, and/or tenant. Please check official netbox docs for more info. default: False type: boolean token: required: True description: NetBox token. env: # in order of precedence - name: NETBOX_TOKEN - name: NETBOX_API_KEY group_by: description: Keys used to create groups. type: list choices: - sites - tenants - racks - tags - device_roles - device_types - manufacturers - platforms default: [] query_filters: description: List of parameters passed to the query string (Multiple values may be separated by commas) type: list default: [] timeout: description: Timeout for Netbox requests in seconds type: int default: 60 compose: description: List of custom ansible host vars to create from the device object fetched from NetBox default: {} type: dict s # netbox_inventory.yml file in YAML format # Example command line: ansible-inventory -v --list -i netbox_inventory.yml plugin: netbox api_endpoint: http://localhost:8000 validate_certs: True config_context: False group_by: - device_roles query_filters: - role: network-edge-router # Query filters are passed directly as an argument to the fetching queries. # You can repeat tags in the query string. query_filters: - role: server - tag: web - tag: production # See the NetBox documentation at https://netbox.readthedocs.io/en/latest/api/overview/ # the query_filters work as a logical **OR** # # Prefix any custom fields with cf_ and pass the field value with the regular NetBox query string query_filters: - cf_foo: bar # NetBox inventory plugin also supports Constructable semantics # You can fill your hosts vars using the compose option: plugin: netbox compose: foo: last_updated bar: display_name nested_variable: rack.display_name N(tversion(tThread(tchain(tBaseInventoryPlugint Constructable(t __version__(t AnsibleError(tto_text(topen_url(turljoint urlencode(t ip_interfacet asset_tagt cluster_idtdevice_type_idthas_primary_iptis_console_servert is_full_depthtis_network_devicetis_pdut mac_addresst manufacturertmanufacturer_idtmodeltnametplatformt platform_idtpositiont rack_group_idtrack_idtroletrole_idtserialtsitetsite_idtstatusttagttenantt tenant_idtvirtual_chassis_idtInventoryModulecB`sReZdZdZdZedZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"d Z#d!Z$d"Z%e&d#Z'RS($tnetboxcC`st|d|jd|jd|j}yt|jdd}Wntk rbtdnXytj |SWn!t k rtd|nXdS(Ntheadersttimeouttvalidate_certsterrorstsurrogate_or_stricts6Incorrect encoding of fetched payload from NetBox API.sIncorrect JSON payload: %s( R R-R.R/R treadt UnicodeErrorR tjsontloadst ValueError(tselfturltresponsetraw_data((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyt_fetch_informations'  cC`sg|stdng}xE|rb|jjd||j|}||d7}|d}qW|S(swRetrieves resource list from netbox API. Returns: A list of all resource from netbox API. s2Please check API URL in script configuration file.s Fetching: tresultstnext(R tdisplaytvR;(R7tapi_urlt hosts_listt api_output((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pytget_resource_lists cC`s|i |jd6|jd6|jd6|jd6|jd6|jd6|jd6|jd6|jd 6|j d 6|j d 6|j d 6S( Ntsitesttenantstracksttagstdisktmemorytvcpust device_rolest platformst device_typestconfig_contextt manufacturers( t extract_sitetextract_tenantt extract_rackt extract_tagst extract_disktextract_memoryt extract_vcpustextract_device_roletextract_platformtextract_device_typetextract_config_contexttextract_manufacturer(R7((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pytgroup_extractorss           cC`s |jdS(NRH(tget(R7thost((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyRTscC`s |jdS(NRJ(R](R7R^((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyRVscC`s |jdS(NRI(R](R7R^((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyRUscC`s3y|j|ddgSWntk r.dSXdS(NRtid(tplatforms_lookupt Exception(R7R^((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyRXs cC`s3y|j|ddgSWntk r.dSXdS(Nt device_typeR_(tdevice_types_lookupRa(R7R^((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyRYs cC`s3y|j|ddgSWntk r.dSXdS(NtrackR_(t racks_lookupRa(R7R^((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyRRs cC`s3y|j|ddgSWntk r.dSXdS(NR$R_(t sites_lookupRa(R7R^((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyRPs cC`s3y|j|ddgSWntk r.dSXdS(NR(R_(ttenants_lookupRa(R7R^((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyRQs cC`sayHd|kr%|j|ddgSd|krG|j|ddgSWntk r\dSXdS(Nt device_roleR_R!(tdevice_roles_lookupRa(R7R^((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyRWs   cC`s[yB|jrA|jdt|d}|j|}|dgSWntk rVdSXdS(Ns/api/dcim/devices/R_RN(RNt api_endpointtstrR;Ra(R7R^R8t device_lookup((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyRZs  cC`s7y|j|dddgSWntk r2dSXdS(NRbRR_(tmanufacturers_lookupRa(R7R^((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyR[s cC`s>y%|dd}tt|jSWntk r9dSXdS(Nt primary_iptaddress(RkRtipRa(R7R^Ro((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pytextract_primary_ips  cC`s>y%|dd}tt|jSWntk r9dSXdS(Nt primary_ip4Ro(RkRRpRa(R7R^Ro((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pytextract_primary_ip4s  cC`s>y%|dd}tt|jSWntk r9dSXdS(Nt primary_ip6Ro(RkRRpRa(R7R^Ro((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pytextract_primary_ip6#s  cC`s|dS(NRG((R7R^((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyRS*scC`s<|jd}|jd|}td|D|_dS(Ns/api/dcim/platforms/?limit=0R@cs`s#|]}|d|dfVqdS(R_RN((t.0R((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pys 0s(RjRCtdictR`(R7R8RL((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pytrefresh_platforms_lookup-s cC`s<|jd}|jd|}td|D|_dS(Ns/api/dcim/sites/?limit=0R@cs`s#|]}|d|dfVqdS(R_RN((RvR$((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pys 5s(RjRCRwRf(R7R8RD((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pytrefresh_sites_lookup2s cC`s<|jd}|jd|}td|D|_dS(Ns/api/dcim/regions/?limit=0R@cs`s#|]}|d|dfVqdS(R_RN((Rvtregion((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pys :s(RjRCRwtregions_lookup(R7R8tregions((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pytrefresh_regions_lookup7s cC`s<|jd}|jd|}td|D|_dS(Ns/api/tenancy/tenants/?limit=0R@cs`s#|]}|d|dfVqdS(R_RN((RvR(((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pys ?s(RjRCRwRg(R7R8RE((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pytrefresh_tenants_lookup<s cC`s<|jd}|jd|}td|D|_dS(Ns/api/dcim/racks/?limit=0R@cs`s#|]}|d|dfVqdS(R_RN((RvRd((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pys Ds(RjRCRwRe(R7R8RF((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pytrefresh_racks_lookupAs cC`s<|jd}|jd|}td|D|_dS(Ns/api/dcim/device-roles/?limit=0R@cs`s#|]}|d|dfVqdS(R_RN((RvRh((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pys Is(RjRCRwRi(R7R8RK((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pytrefresh_device_roles_lookupFs cC`s<|jd}|jd|}td|D|_dS(Ns/api/dcim/device-types/?limit=0R@cs`s#|]}|d|dfVqdS(R_RN((RvRb((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pys Ns(RjRCRwRc(R7R8RM((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pytrefresh_device_types_lookupKs cC`s<|jd}|jd|}td|D|_dS(Ns /api/dcim/manufacturers/?limit=0R@cs`s#|]}|d|dfVqdS(R_RN((RvR((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pys Ss(RjRCRwRm(R7R8RO((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pytrefresh_manufacturers_lookupPs cC`s|j|j|j|j|j|j|j|jf}g}x4|D],}td|}|j ||j qCWx|D]}|j qzWdS(Nttarget( RyR}R~RRRxRRRtappendtstarttjoin(R7tlookup_processest thread_listtptttthread((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pytrefresh_lookupsUs    cC`st|tot|dks9|jjd|dSt|jd}t|jd}|tkp}|j dsd|tf}|jjd|dS||fS(Nis9Warning query parameters %s not a dict with a single key.itcf_s8Warning: %s not in %s or starting with cf (Custom field)tmsg( t isinstanceRwtlenR>twarningttupletkeystvaluestALLOWED_DEVICE_QUERY_PARAMETERSt startswith(R7txtkR?R((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pytvalidate_query_parametersjs!cC`sudg}|jr=|jtdt|j|jn|jdt||_|jdt||_dS(NtlimiticS`s|S(N((R((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyt{ss/api/dcim/devices/?s&/api/virtualization/virtual-machines/?(slimiti( t query_filterstextendtfiltertmapRRjR t device_urltvirtual_machines_url(R7tquery_parameters((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyt refresh_urlxs   cC`s%t|j|j|j|jS(N(RRCRR(R7((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyt fetch_hostsscC`s|dpttjS(NR(Rktuuidtuuid4(R7R^((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyt extract_namescC`sx|jD]w}|j||}|s/q nxO|D]G}dj||g}|jjd||jjd|d|q6Wq WdS(Nt_tgroupR^(tgroup_byR\Rt inventoryt add_grouptadd_host(R7R^thostnameRt sub_groupst sub_groupt group_name((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pytadd_host_to_groupss cC`sxK|jjD]:\}}||s.qn|jj||||qW|j|r|jj|d|jd|n|j|r|jj|d|jd|n|j|r|jj|d|jd|ndS(Nt ansible_hostR^RrRt(R\titemsRt set_variableRqRsRu(R7R^Rt attributet extractor((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyt_fill_host_variabless  %%cC`s|j|j|j}x|D]}|jd|}|jjd||jd|d||jd}|j|jd||d||j |jd||d||j |jd||d||j d|d|q'WdS(NR^Rtstricttcomposetgroupst keyed_groups( RRRRRRRt get_optiont_set_composite_varst_add_host_to_composed_groupst_add_host_to_keyed_groupsR(R7RAR^RR((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pytmains    """cC`stt|j||||jd||jd}|jdjd|_|jd|_|jd|_|jd|_ id|d 6d t t j d d fd 6dd6|_ |jd|_|jd|_|jdS(NtpathttokenRjt/R.R/RNsToken %st Authorizationsansible %s Python %st is User-Agentsapplication/jsons Content-typeRR(tsuperR+tparset_read_config_dataRtstripRjR.R/RNtansible_versiontpython_versiontsplitR-RRR(R7RtloaderRtcacheR((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyRs  ((t__name__t __module__tNAMER;RCtpropertyR\RTRVRURXRYRRRPRQRWRZR[RqRsRuRSRxRyR}R~RRRRRRRRRRRRtTrueR(((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pyR+sH                             (RRRRRRRRRs manufacturerRsmodelsnamesplatformRRRR sroleR"sserialssiteR%R&R'stenantR)R*($t __future__RRRttypet __metaclass__t DOCUMENTATIONtEXAMPLESR4RtsysRRt threadingRt itertoolsRtansible.plugins.inventoryRRt$ansible.module_utils.ansible_releaseRRtansible.errorsR tansible.module_utils._textR tansible.module_utils.urlsR t+ansible.module_utils.six.moves.urllib.parseR R t%ansible.module_utils.compat.ipaddressRRR+(((sD/usr/lib/python2.7/site-packages/ansible/plugins/inventory/netbox.pytsXD'