christiangda.awscli_configure
Rol de Ansible: christiangda.awscli
Este rol crea los archivos necesarios para configurar la Interfaz de Línea de Comandos de AWS (awscli).
Este rol es muy básico; su única función es transformar una variable definida en formato yaml
, que contiene el contenido de los archivos .aws/config
y .aws/credentials
, al formato de archivo .ini
y colocarlos en el lugar que desees.
La mejor forma de instalar este rol es usando el comando ansible-galaxy install christiangda.awscli_configure
. El repositorio de Ansible Galaxy es christiangda.awscli_configure.
El código del repositorio está en https://github.com/christiangda/ansible-role-awscli-configure.
Consulta los ejemplos para entenderlo mejor.
Requisitos
Este rol funciona en las distribuciones de RedHat, CentOS, Debian y Ubuntu
- RedHat
- 6 (*)
- 7
- 8
- CentOS
- 6 (*)
- 7
- 8
- Ubuntu
- 14.* (*)
- 16.* (*)
- 18.*
- 19.*
- Debian
- jessie (8) (*)
- stretch (9)
- buster (10)
- sid (inestable)
(*) Fuera de pruebas, es posible que encuentres problemas con este SO.
Para ver la matriz de compatibilidad de Python vs. Ansible, consulta el proyecto Matriz de construcción de Travis-CI.
Variables del rol
Variable | Valor por defecto |
---|---|
awscliconf_path | "~/." |
awscliconf_recursive_path_creation | false |
awscliconf_files_owner | "root" |
awscliconf_files_group | "root" |
awscliconf_files | "" --> Vacío |
Más detalles: Consulta el archivo defaults/main.yaml.
Dependencias
Este rol no tiene dependencias, pero es importante que instales la Interfaz de Línea de Comandos de AWS (awscli) para que tenga sentido. Mi rol christiangda.awscli puede ayudarte a instalar la Interfaz de Línea de Comandos de AWS (awscli).
Ejemplo de Playbook
RedHat/CentOS, Ubuntu y Debian
Si ya has instalado la Interfaz de Línea de Comandos de AWS (awscli):
- hosts: redhat-8
gather_facts: True
roles:
- role: christiangda.awscli_configure
vars:
awscliconf_path: '/home/christian.gonzalez'
awscliconf_files_owner: 'christian.gonzalez'
awscliconf_files_group: 'christian.gonzalez'
awscliconf_files:
credentials:
- default:
aws_access_key_id: 'AKIAIOSFODNN7EXAMPLE'
aws_secret_access_key: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
config:
- default:
region: us-west-2
output: json
- profile development:
role_arn: 'arn:aws:iam::123456789012:role/role-for-development'
mfa_serial: 'arn:aws:iam::11111111111:mfa/christian.gonzalez'
region: eu-west-1
source_profile: default
Cuando tengas RedHat/CentOS 8 o objetivo de Debian/Ubuntu y no tengas instalada la Interfaz de Línea de Comandos de AWS (awscli) y deseas usar mi rol christiangda.awscli:
- hosts: redhat-8
gather_facts: True
roles:
- role: christiangda.awscli
- role: christiangda.awscli_configure
vars:
awscliconf_files:
credentials:
- default:
aws_access_key_id: 'AKIAIOSFODNN7EXAMPLE'
aws_secret_access_key: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
config:
- default:
region: us-west-2
output: json
- profile development:
role_arn: 'arn:aws:iam::123456789012:role/role-for-development'
mfa_serial: 'arn:aws:iam::11111111111:mfa/christian.gonzalez'
region: eu-west-1
source_profile: default
Cuando tengas un objetivo de RedHat/CentOS 6/7 y no tengas instalada la Interfaz de Línea de Comandos de AWS (awscli) ni el Repositorio EPEL, y deseas usar mis roles christiangda.epel_role y christiangda.awscli:
- hosts: redhat-7
gather_facts: True
roles:
- role: christiangda.epel_repo
- role: christiangda.awscli
- role: christiangda.awscli_configure
vars:
awscliconf_files:
credentials:
- default:
aws_access_key_id: 'AKIAIOSFODNN7EXAMPLE'
aws_secret_access_key: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
config:
- default:
region: us-west-2
output: json
- profile development:
role_arn: 'arn:aws:iam::123456789012:role/role-for-development'
mfa_serial: 'arn:aws:iam::11111111111:mfa/christian.gonzalez'
region: eu-west-1
source_profile: default
Cuando tengas múltiples objetivos de SO y deseas instalar el repositorio EPEL solo en RedHat/CentOS 6/7 usando mis roles christiangda.epel_role y christiangda.awscli:
- hosts: servers
gather_facts: True
roles:
- role: christiangda.epel_repo
when: >
ansible_os_family == 'RedHat' and (
ansible_distribution == 'CentOS' or
ansible_distribution == 'RedHat'
)
and (
ansible_distribution_major_version == '6' or
ansible_distribution_major_version == '7'
)
changed_when: false
- role: christiangda.awscli
- role: christiangda.awscli_configure
vars:
awscliconf_files:
credentials:
- default:
aws_access_key_id: 'AKIAIOSFODNN7EXAMPLE'
aws_secret_access_key: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
- production-profile:
aws_access_key_id: 'AKIAIOSFODNN7EXAMPLE'
aws_secret_access_key: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
config:
- default:
region: us-west-2
output: json
- profile development:
role_arn: arn:aws:iam::123456789012:role/role-name
role_session_name: maria_garcia_role
source_profile: production-profile
aws_session_token: AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4Olgk
s3:
max_concurrent_requests: 20
max_queue_size: 10000
multipart_threshold: 64MB
multipart_chunksize: 16MB
max_bandwidth: 50MB/s
use_accelerate_endpoint: true
addressing_style: path
api_versions:
ec2: '2015-03-01'
cloudfront: '2015-09-17'
tcp_keepalive: false
Desarrollo / Contribuciones
Este rol se prueba usando Molecule y fue desarrollado utilizando Entornos Virtuales de Python.
Asimismo, utilizamos las ramas principales de git
- master
- develop
Si deseas contribuir a este proyecto, lo que debes hacer es:
- Hacer un fork del proyecto
- Preparar tu entorno
- Corregir el problema en la rama
develop
- Ejecutar
molecule test
- Crear un Pull Request a la rama
develop
del proyecto oficial
Referencias:
Preparar tu entorno
- Python 3
mkdir ansible-roles
cd ansible-roles/
python3 -m venv venv
source venv/bin/activate
pip install pip --upgrade
pip install ansible
pip install molecule
pip install 'molecule[docker]'
pip install 'molecule[podman]'
pip install 'molecule[lint]'
pip install molecule-vagrant
pip install python-vagrant
pip install selinux
pip install docker
pip install pytest
pip install pytest-mock
pip install pylint
pip install rope
pip install autopep8
pip install yamllint
pip install flake8
pip install ansible-lint
Clonar el repositorio del rol (desde tu fork) y crear un enlace simbólico
git clone https://github.com/christiangda/ansible-role-awscli-configure.git
ln -s ansible-role-awscli-configure christiangda.awscli_configure
cd christiangda.awscli_configure
Ejecutar la prueba de molecule
Escenarios disponibles:
- default -->
--driver-name docker
- podman -->
--driver-name podman
- centos-8 -->
--driver-name centos-8
- centos-7 -->
--driver-name centos-7
- ubuntu-21.04 -->
--driver-name ubuntu-21.04
escenario por defecto
Paso a paso:
molecule create [--scenario-name default]
molecule converge [--scenario-name default]
molecule verify [--scenario-name default]
molecule destroy [--scenario-name default]
o
Todo en uno:
molecule test [--scenario-name default]
escenario podman
Paso a paso:
molecule create --scenario-name podman
molecule converge --scenario-name podman
molecule verify --scenario-name podman
molecule destroy --scenario-name podman
o
Todo en uno:
molecule test --scenario-name podman
Además, si deseas probarlo usando VMs, tengo un muy buen proyecto de ansible-playground que utiliza Vagrant y VirtualBox, ¡pruébalo!
Licencia
Este módulo se publica bajo la Licencia Pública General GNU Versión 3:
Información del autor
Ansible Role to Configure AWS Command Line Interface (awscli)
ansible-galaxy install christiangda.awscli_configure