Revert back to getting the AWS role name from the URI with a small change (#49113)
- The role name and instance profile name _can_ be different - Change the delimiter to `:` for keys that are discovered through the JSON parsing (which is not a valid delimiter for AWS IAM role names), this delimiter is still converted to underscore - Now checks for the existence of that delimiter to remove the cases where the JSON keys are appended to the role name to find the role name
This commit is contained in:
parent
3cbb66dd53
commit
ff9b86f560
1 changed files with 4 additions and 3 deletions
|
@ -467,8 +467,9 @@ class Ec2Metadata(object):
|
||||||
new_fields = {}
|
new_fields = {}
|
||||||
for key, value in fields.items():
|
for key, value in fields.items():
|
||||||
split_fields = key[len(uri):].split('/')
|
split_fields = key[len(uri):].split('/')
|
||||||
if len(split_fields) == 2 and split_fields[0:2] == ['iam', 'info_instanceprofilearn']:
|
# Parse out the IAM role name (which is _not_ the same as the instance profile name)
|
||||||
new_fields[self._prefix % "iam-instance-profile-role"] = value.split('/')[1]
|
if len(split_fields) == 3 and split_fields[0:2] == ['iam', 'security-credentials'] and ':' not in split_fields[2]:
|
||||||
|
new_fields[self._prefix % "iam-instance-profile-role"] = split_fields[2]
|
||||||
if len(split_fields) > 1 and split_fields[1]:
|
if len(split_fields) > 1 and split_fields[1]:
|
||||||
new_key = "-".join(split_fields)
|
new_key = "-".join(split_fields)
|
||||||
new_fields[self._prefix % new_key] = value
|
new_fields[self._prefix % new_key] = value
|
||||||
|
@ -504,7 +505,7 @@ class Ec2Metadata(object):
|
||||||
dict = json.loads(content)
|
dict = json.loads(content)
|
||||||
self._data['%s' % (new_uri)] = content
|
self._data['%s' % (new_uri)] = content
|
||||||
for (key, value) in dict.items():
|
for (key, value) in dict.items():
|
||||||
self._data['%s_%s' % (new_uri, key.lower())] = value
|
self._data['%s:%s' % (new_uri, key.lower())] = value
|
||||||
except:
|
except:
|
||||||
self._data['%s' % (new_uri)] = content # not a stringifed JSON string
|
self._data['%s' % (new_uri)] = content # not a stringifed JSON string
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue