@@ -79,31 +79,39 @@ def write_token(token=None):
7979 raise e
8080 else :
8181 pass
82- def get (self , path , key = 'value' , wrap_ttl = None , default = None , fetch_all = False , raise_exceptions = False , raw = False ):
82+ def get (self , path , key = 'value' , wrap_ttl = None , default = None , fetch_all = False , raw = False ):
8383 if raw :
8484 fetch_all = True
8585 if fetch_all :
8686 key = None
87+ raw_data = self .vault_conn .secrets .kv .v2 .read_secret_version (
88+ path = path , mount_point = self .mount_point )
89+ # move this check earlier, and, if true, return immediately
90+ if raw :
91+ return raw_data
92+ data = raw_data .get ('data' )
93+ if isinstance (data , dict ):
94+ if not fetch_all :
95+ if key :
96+ # the actual secret k v pairs are nested under another dictionary key "data"
97+ return data .get ("data" ).get (key , default )
98+ else :
99+ raise ('VAULT-LIB: either key or fetch_all should be set!' )
100+
101+ def check (self , path , key ):
102+ # somewhat boilerplate method that returns a boolean whether the provided secret exists
103+ # and if it has the desired key, with a non-empty value
87104 try :
88105 raw_data = self .vault_conn .secrets .kv .v2 .read_secret_version (
89106 path = path , mount_point = self .mount_point )
90- # move this check earlier, and, if true, return immediately
91- if raw :
92- return raw_data
93- data = raw_data .get ('data' )
94- if isinstance (data , dict ):
95- if not fetch_all :
96- if key :
97- # the actual secret k v pairs are nested under another dictionary key "data"
98- return data .get ("data" ).get (key , default )
99- else :
100- raise ('VAULT-LIB: either key or fetch_all should be set!' )
107+ if key not in raw_data ["data" ]["data" ]:
108+ return False
109+ if raw_data ["data" ]["data" ][key ] is None :
110+ return False
101111 except Exception as e :
102- if raise_exceptions :
103- raise e
104- else :
105- data = default
106- return data
112+ # if the provided secret path doesn't exist, return false
113+ return False
114+ return True
107115
108116 def put (self , path , value , lease = None , wrap_ttl = None ):
109117 payload = {}
@@ -161,7 +169,7 @@ def __init__(
161169 display ('MANAGED-SECRET: could not obtain a proper Vault connection.\n {}' .format (e .message ))
162170 raise e
163171 try :
164- self .current_data = self .sv .get (path = path , fetch_all = True , raise_exceptions = True )
172+ self .current_data = self .sv .get (path = path , fetch_all = True )
165173 except Exception as e :
166174 display ('MANAGED-SECRET: could not confirm if secret at path {} does or not already exist. '
167175 'Exception was:\n {}' .format (path ,e .message ))
0 commit comments