|
1 | 1 | ---
|
| 2 | +# Discover AWS credentials from standard locations |
| 3 | +- name: Set AWS credentials file path |
| 4 | + set_fact: |
| 5 | + aws_credentials_path: "{{ lookup('env', 'AWS_SHARED_CREDENTIALS_FILE') | default(lookup('env', 'HOME') + '/.aws/credentials', true) }}" |
| 6 | + aws_profile: "{{ lookup('env', 'AWS_PROFILE') | default('default', true) }}" |
| 7 | + |
| 8 | +# Try to read credentials from file if not already provided |
| 9 | +- block: |
| 10 | + - name: Check if AWS credentials file exists |
| 11 | + stat: |
| 12 | + path: "{{ aws_credentials_path }}" |
| 13 | + register: aws_creds_file |
| 14 | + delegate_to: localhost |
| 15 | + |
| 16 | + - name: Read AWS credentials from file |
| 17 | + set_fact: |
| 18 | + _file_access_key: "{{ lookup('ini', 'aws_access_key_id', section=aws_profile, file=aws_credentials_path, errors='ignore') | default('', true) }}" |
| 19 | + _file_secret_key: "{{ lookup('ini', 'aws_secret_access_key', section=aws_profile, file=aws_credentials_path, errors='ignore') | default('', true) }}" |
| 20 | + _file_session_token: "{{ lookup('ini', 'aws_session_token', section=aws_profile, file=aws_credentials_path, errors='ignore') | default('', true) }}" |
| 21 | + when: aws_creds_file.stat.exists |
| 22 | + no_log: true |
| 23 | + when: |
| 24 | + - aws_access_key is undefined |
| 25 | + - lookup('env','AWS_ACCESS_KEY_ID')|length <= 0 |
| 26 | + |
| 27 | +# Prompt for credentials if still not available |
2 | 28 | - pause:
|
3 | 29 | prompt: |
|
4 | 30 | Enter your AWS Access Key ID (http://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html)
|
|
8 | 34 | when:
|
9 | 35 | - aws_access_key is undefined
|
10 | 36 | - lookup('env','AWS_ACCESS_KEY_ID')|length <= 0
|
| 37 | + - _file_access_key is undefined or _file_access_key|length <= 0 |
11 | 38 |
|
12 | 39 | - pause:
|
13 | 40 | prompt: |
|
|
17 | 44 | when:
|
18 | 45 | - aws_secret_key is undefined
|
19 | 46 | - lookup('env','AWS_SECRET_ACCESS_KEY')|length <= 0
|
| 47 | + - _file_secret_key is undefined or _file_secret_key|length <= 0 |
20 | 48 |
|
| 49 | +# Set final credentials with proper precedence |
21 | 50 | - set_fact:
|
22 |
| - access_key: "{{ aws_access_key | default(_aws_access_key.user_input|default(None)) | default(lookup('env','AWS_ACCESS_KEY_ID'), true) }}" |
23 |
| - secret_key: "{{ aws_secret_key | default(_aws_secret_key.user_input|default(None)) | default(lookup('env','AWS_SECRET_ACCESS_KEY'), true) }}" |
| 51 | + access_key: >- |
| 52 | + {{ aws_access_key |
| 53 | + | default(lookup('env', 'AWS_ACCESS_KEY_ID')) |
| 54 | + | default(_file_access_key) |
| 55 | + | default(_aws_access_key.user_input | default(None)) }} |
| 56 | + secret_key: >- |
| 57 | + {{ aws_secret_key |
| 58 | + | default(lookup('env', 'AWS_SECRET_ACCESS_KEY')) |
| 59 | + | default(_file_secret_key) |
| 60 | + | default(_aws_secret_key.user_input | default(None)) }} |
| 61 | + session_token: >- |
| 62 | + {{ aws_session_token |
| 63 | + | default(lookup('env', 'AWS_SESSION_TOKEN')) |
| 64 | + | default(_file_session_token) |
| 65 | + | default('') }} |
| 66 | + no_log: true |
24 | 67 |
|
25 | 68 | - block:
|
26 | 69 | - name: Get regions
|
27 | 70 | aws_region_info:
|
28 | 71 | aws_access_key: "{{ access_key }}"
|
29 | 72 | aws_secret_key: "{{ secret_key }}"
|
| 73 | + aws_session_token: "{{ session_token if session_token else omit }}" |
30 | 74 | region: us-east-1
|
31 | 75 | register: _aws_regions
|
32 | 76 |
|
|
67 | 111 | ec2_eip_info:
|
68 | 112 | aws_access_key: "{{ access_key }}"
|
69 | 113 | aws_secret_key: "{{ secret_key }}"
|
| 114 | + aws_session_token: "{{ session_token if session_token else omit }}" |
70 | 115 | region: "{{ algo_region }}"
|
71 | 116 | register: raw_eip_addresses
|
72 | 117 |
|
|
0 commit comments