2
2
import requests
3
3
4
4
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 ):
7
6
headers = {"Accept" : "application/json" }
8
7
tokens_url = f"{ base_url } /api/users/tokens/"
9
8
10
9
try :
11
10
response = requests .get (tokens_url , headers = headers , auth = (username , password ))
12
11
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
+ )
15
16
16
17
tokens = response .json ().get ("results" , [])
17
18
return next ((t for t in tokens if t .get ("key" ) == user_token ), None )
18
19
19
20
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."""
22
23
tokens_url = f"{ base_url } /api/users/tokens/"
23
24
headers = {"Content-Type" : "application/json" , "Accept" : "application/json" }
24
25
payload = {"key" : user_token , "description" : description , "write_enabled" : True }
@@ -28,26 +29,14 @@ def create_new_token(base_url, username, password, user_token, description):
28
29
tokens_url , headers = headers , json = payload , auth = (username , password )
29
30
)
30
31
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
+ )
33
36
34
37
return response .json ()
35
38
36
39
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
-
51
40
def run_module ():
52
41
module_args = dict (
53
42
base_url = dict (type = "str" , required = True ),
@@ -66,23 +55,25 @@ def run_module():
66
55
token_description = module .params ["token_description" ]
67
56
68
57
# 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 )
70
59
if token :
71
60
module .exit_json (
72
61
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 } " ,
75
64
)
76
65
77
66
# 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
+ )
79
70
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 } " )
81
72
82
73
module .exit_json (
83
74
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 } " ,
86
77
)
87
78
88
79
0 commit comments