So I'm working with gitlab with ansible and deploying it to an EC2 instance. There was some authentication issue on the pipeline so I changed my yaml file to authenticate always whenever I deploy.
It worked for a while, but now I encountered an issue saying "DuplicateSectionError" that describes an issue with AWS configuration because I've probably authenticated too much.
Here's the error log:
configparser.DuplicateSectionError: While reading from '/root/.aws/credentials' [line 4]: section 'default' already existsDuring handling of the above exception, another exception occurred:Traceback (most recent call last): File \"/usr/bin/aws\", line 27, in <module> sys.exit(main()) File \"/usr/bin/aws\", line 23, in main return awscli.clidriver.main() File \"/usr/lib/python3/dist-packages/awscli/clidriver.py\", line 68, in main driver = create_clidriver() File \"/usr/lib/python3/dist-packages/awscli/clidriver.py\", line 77, in create_clidriver load_plugins(session.full_config.get('plugins', {}), File \"/usr/lib/python3/dist-packages/botocore/session.py\", line 364, in full_config cred_profiles = botocore.configloader.raw_config_parse( File \"/usr/lib/python3/dist-packages/botocore/configloader.py\", line 151, in raw_config_parse raise botocore.exceptions.ConfigParseError(botocore.exceptions.ConfigParseError: Unable to parse config file: /root/.aws/credentialsTraceback (most recent call last): File \"/usr/lib/python3/dist-packages/botocore/configloader.py\", line 149, in raw_config_parse cp.read([path]) File \"/usr/lib/python3.8/configparser.py\", line 697, in read self._read(fp, filename) File \"/usr/lib/python3.8/configparser.py\", line 1067, in _read raise DuplicateSectionError(sectname, fpname,configparser.DuplicateSectionError: While reading from '/root/.aws/credentials' [line 4]: section 'default' already existsDuring handling of the above exception, another exception occurred:Traceback (most recent call last): File \"/usr/bin/aws\", line 27, in <module> sys.exit(main()) File \"/usr/bin/aws\", line 23, in main return awscli.clidriver.main() File \"/usr/lib/python3/dist-packages/awscli/clidriver.py\", line 68, in main driver = create_clidriver() File \"/usr/lib/python3/dist-packages/awscli/clidriver.py\", line 77, in create_clidriver load_plugins(session.full_config.get('plugins', {}), File \"/usr/lib/python3/dist-packages/botocore/session.py\", line 364, in full_config cred_profiles = botocore.configloader.raw_config_parse( File \"/usr/lib/python3/dist-packages/botocore/configloader.py\", line 151, in raw_config_parse raise botocore.exceptions.ConfigParseError(botocore.exceptions.ConfigParseError: Unable to parse config file: /root/.aws/credentialsTraceback (most recent call last): File \"/usr/lib/python3/dist-packages/botocore/configloader.py\", line 149, in raw_config_parse cp.read([path]) File \"/usr/lib/python3.8/configparser.py\", line 697, in read self._read(fp, filename) File \"/usr/lib/python3.8/configparser.py\", line 1067, in _read raise DuplicateSectionError(sectname, fpname,configparser.DuplicateSectionError: While reading from '/root/.aws/credentials' [line 4]: section 'default' already existsDuring handling of the above exception, another exception occurred:Traceback (most recent call last): File \"/usr/bin/aws\", line 27, in <module> sys.exit(main()) File \"/usr/bin/aws\", line 23, in main return awscli.clidriver.main() File \"/usr/lib/python3/dist-packages/awscli/clidriver.py\", line 68, in main driver = create_clidriver() File \"/usr/lib/python3/dist-packages/awscli/clidriver.py\", line 77, in create_clidriver load_plugins(session.full_config.get('plugins', {}), File \"/usr/lib/python3/dist-packages/botocore/session.py\", line 364, in full_config cred_profiles = botocore.configloader.raw_config_parse( File \"/usr/lib/python3/dist-packages/botocore/configloader.py\", line 151, in raw_config_parse raise botocore.exceptions.ConfigParseError(botocore.exceptions.ConfigParseError: Unable to parse config file: /root/.aws/credentialsError: Cannot perform an interactive login from a non TTY device", "stderr_lines": ["Traceback (most recent call last):", " File \"/usr/lib/python3/dist-packages/botocore/configloader.py\", line 149, in raw_config_parse", " cp.read([path])", " File \"/usr/lib/python3.8/configparser.py\", line 697, in read", " self._read(fp, filename)", " File \"/usr/lib/python3.8/configparser.py\", line 1067, in _read", " raise DuplicateSectionError(sectname, fpname,", "configparser.DuplicateSectionError: While reading from '/root/.aws/credentials' [line 4]: section 'default' already exists", "", "During handling of the above exception, another exception occurred:", "", "Traceback (most recent call last):", " File \"/usr/bin/aws\", line 27, in <module>", " sys.exit(main())", " File \"/usr/bin/aws\", line 23, in main", " return awscli.clidriver.main()", " File \"/usr/lib/python3/dist-packages/awscli/clidriver.py\", line 68, in main", " driver = create_clidriver()", " File \"/usr/lib/python3/dist-packages/awscli/clidriver.py\", line 77, in create_clidriver", " load_plugins(session.full_config.get('plugins', {}),", " File \"/usr/lib/python3/dist-packages/botocore/session.py\", line 364, in full_config", " cred_profiles = botocore.configloader.raw_config_parse(", " File \"/usr/lib/python3/dist-packages/botocore/configloader.py\", line 151, in raw_config_parse", " raise botocore.exceptions.ConfigParseError(", "botocore.exceptions.ConfigParseError: Unable to parse config file: /root/.aws/credentials", "Traceback (most recent call last):", " File \"/usr/lib/python3/dist-packages/botocore/configloader.py\", line 149, in raw_config_parse", " cp.read([path])", " File \"/usr/lib/python3.8/configparser.py\", line 697, in read", " self._read(fp, filename)", " File \"/usr/lib/python3.8/configparser.py\", line 1067, in _read", " raise DuplicateSectionError(sectname, fpname,", "configparser.DuplicateSectionError: While reading from '/root/.aws/credentials' [line 4]: section 'default' already exists", "", "During handling of the above exception, another exception occurred:", "", "Traceback (most recent call last):", " File \"/usr/bin/aws\", line 27, in <module>", " sys.exit(main())", " File \"/usr/bin/aws\", line 23, in main", " return awscli.clidriver.main()", " File \"/usr/lib/python3/dist-packages/awscli/clidriver.py\", line 68, in main", " driver = create_clidriver()", " File \"/usr/lib/python3/dist-packages/awscli/clidriver.py\", line 77, in create_clidriver", " load_plugins(session.full_config.get('plugins', {}),", " File \"/usr/lib/python3/dist-packages/botocore/session.py\", line 364, in full_config", " cred_profiles = botocore.configloader.raw_config_parse(", " File \"/usr/lib/python3/dist-packages/botocore/configloader.py\", line 151, in raw_config_parse", " raise botocore.exceptions.ConfigParseError(", "botocore.exceptions.ConfigParseError: Unable to parse config file: /root/.aws/credentials", "Traceback (most recent call last):", " File \"/usr/lib/python3/dist-packages/botocore/configloader.py\", line 149, in raw_config_parse", " cp.read([path])", " File \"/usr/lib/python3.8/configparser.py\", line 697, in read", " self._read(fp, filename)", " File \"/usr/lib/python3.8/configparser.py\", line 1067, in _read", " raise DuplicateSectionError(sectname, fpname,", "configparser.DuplicateSectionError: While reading from '/root/.aws/credentials' [line 4]: section 'default' already exists", "", "During handling of the above exception, another exception occurred:", "", "Traceback (most recent call last):", " File \"/usr/bin/aws\", line 27, in <module>", " sys.exit(main())", " File \"/usr/bin/aws\", line 23, in main", " return awscli.clidriver.main()", " File \"/usr/lib/python3/dist-packages/awscli/clidriver.py\", line 68, in main", " driver = create_clidriver()", " File \"/usr/lib/python3/dist-packages/awscli/clidriver.py\", line 77, in create_clidriver", " load_plugins(session.full_config.get('plugins', {}),", " File \"/usr/lib/python3/dist-packages/botocore/session.py\", line 364, in full_config", " cred_profiles = botocore.configloader.raw_config_parse(", " File \"/usr/lib/python3/dist-packages/botocore/configloader.py\", line 151, in raw_config_parse", " raise botocore.exceptions.ConfigParseError(", "botocore.exceptions.ConfigParseError: Unable to parse config file: /root/.aws/credentials", "Error: Cannot perform an interactive login from a non TTY device"], "stdout": "", "stdout_lines": []}
I've found something close to my problem which is this: "configparser.DuplicateOptionError" when running AWS CLI command
So my question is, how do I clear wherever the authentication is happening from the bash script I've set for my gitlab? Is this the right way to do this or am I going about this on the wrong way?
Here's my gitlab yaml:
deploy:server:docker:
stage: deploy
image: registry.itsyndicate.org/public-area/ansible:2.10.4-py2.9.1-buster
before_script:
- eval $(ssh-agent -s)
- ssh-add <(echo "$DEV_SSH_PRIVATE_KEY")
- mkdir -p ~/.ssh && chmod 700 ~/.ssh
- echo -e "Host *\n\tStrictHostKeyChecking no\n\tPort 22722\n\n" >> ~/.ssh/config
script:
- export API_SERVER=$(cat ./deploy.env | grep API_SERVER | awk -F= '{print $2}')
- export ENVIRONMENT=$(cat ./deploy.env | grep ENVIRONMENT | awk -F= '{print $2}')
- echo ${ENVIRONMENT}
- echo Deploy on Server_IP - ${API_SERVER}
- ansible-playbook -i ansible/inventory --limit ${ENVIRONMENT} --extra-vars "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} ENVIRONMENT=${ENVIRONMENT} IMAGE_TAG=${CI_COMMIT_SHA}-${CI_PIPELINE_ID} IMAGE_REGISTRY=${AWS_DOCKER_REGISTRY}" ansible/deploy.yml
dependencies:
- prepare:envfiles:dev
- build:server:docker
rules:
- if: '$CI_COMMIT_BRANCH =~ /Feature-*/'
when: manual
cache: {}