22import requests
33
44
5- def get_existing_token (base_url , username , password , user_token ):
6- """Return the token dict if it exists, otherwise None."""
5+ def get_existing_token (base_url , username , password , user_token , module ):
76 headers = {"Accept" : "application/json" }
87 tokens_url = f"{ base_url } /api/users/tokens/"
98
109 try :
1110 response = requests .get (tokens_url , headers = headers , auth = (username , password ))
1211 response .raise_for_status ()
13- except requests .exceptions .RequestException :
14- return None
12+ except requests .exceptions .RequestException as e :
13+ module .fail_json (
14+ msg = f"Failed to fetch existing tokens for user { username } : { str (e )} "
15+ )
1516
1617 tokens = response .json ().get ("results" , [])
1718 return next ((t for t in tokens if t .get ("key" ) == user_token ), None )
1819
1920
20- def create_new_token (base_url , username , password , user_token , description ):
21- """Create a new Nautobot token using Basic Auth. Returns the token dict or None. """
21+ def create_new_token (base_url , username , password , user_token , description , module ):
22+ """Create a new Nautobot token using Basic Auth."""
2223 tokens_url = f"{ base_url } /api/users/tokens/"
2324 headers = {"Content-Type" : "application/json" , "Accept" : "application/json" }
2425 payload = {"key" : user_token , "description" : description , "write_enabled" : True }
@@ -28,26 +29,14 @@ def create_new_token(base_url, username, password, user_token, description):
2829 tokens_url , headers = headers , json = payload , auth = (username , password )
2930 )
3031 response .raise_for_status ()
31- except requests .exceptions .RequestException :
32- return None
32+ except requests .exceptions .RequestException as e :
33+ module .fail_json (
34+ msg = f"Failed to create new token for user { username } : { str (e )} "
35+ )
3336
3437 return response .json ()
3538
3639
37- def format_token_response (token ):
38- """Normalize token dict fields for output."""
39- if not token :
40- return None
41- return {
42- "id" : str (token .get ("id" )),
43- "display" : str (token .get ("display" )),
44- "created" : str (token .get ("created" )),
45- "expires" : str (token .get ("expires" )),
46- "write_enabled" : bool (token .get ("write_enabled" )),
47- "description" : str (token .get ("description" , "No description" )),
48- }
49-
50-
5140def run_module ():
5241 module_args = dict (
5342 base_url = dict (type = "str" , required = True ),
@@ -66,23 +55,25 @@ def run_module():
6655 token_description = module .params ["token_description" ]
6756
6857 # fetch existing token
69- token = get_existing_token (base_url , username , password , user_token )
58+ token = get_existing_token (base_url , username , password , user_token , module )
7059 if token :
7160 module .exit_json (
7261 changed = False ,
73- message = f"Found existing token for { username } " ,
74- token = format_token_response ( token ) ,
62+ username = username ,
63+ message = f"Found existing Nautobot token for user { username } " ,
7564 )
7665
7766 # No token found → try creating new
78- new_token = create_new_token (base_url , username , password , user_token , token_description )
67+ new_token = create_new_token (
68+ base_url , username , password , user_token , token_description , module
69+ )
7970 if not new_token :
80- module .fail_json (msg = "Failed to create new token" )
71+ module .fail_json (msg = f "Failed to create new token for user { username } " )
8172
8273 module .exit_json (
8374 changed = True ,
84- message = f"No token found, created new token for { username } " ,
85- token = format_token_response ( new_token ) ,
75+ username = username ,
76+ message = f"No token found, created new Nautobot token for user { username } " ,
8677 )
8778
8879
0 commit comments