Skip to content
Merged
43 changes: 29 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ trabajar inmediatamente luego de correrlo. Al momento, depende de dos roles:
* **mikroways.tools:** role privado con un set de herramientas que usamos a
diario y fueron exclusivamente desarrolladas por Mikroways. Es opcional.

# Herramientas requeridas
## Herramientas requeridas

* [direnv](https://direnv.net/)
* [python3](https://www.python.org/downloads/)
* [pyenv](https://github.com/pyenv/pyenv#installation)

# Instalar roles y requerimientos
## Instalar roles y requerimientos

Primero se deben correr los siguientes comandos para instalar Ansible:

Expand Down Expand Up @@ -42,20 +42,28 @@ ansible-galaxy role install -r ansible/requirements/roles.yml
ansible-galaxy role install -r ansible/requirements/roles-mw.yml
```

> **Nota:** Ansible ignora el `ansible.cfg` del repositorio si el directorio tiene
> permisos de escritura para todos (world-writable). Para evitar el warning y que
> se cargue la configuración correctamente, correr una vez:
>
> ```bash
> chmod o-w .
> ```

Para actualizar los requerimientos:

```bash
## Actualizamos el repositorio
git pull

## Si no pertenece a Mikroways actualizamos roles con el siguiente comando:
ansible-galaxy role install -r ansible/requirements/roles.yml --force-with-deps
ansible-galaxy role install -r ansible/requirements/roles.yml --force-with-deps --force

## Si pertenece a Mikroways actualizamos roles con el siguiente comando:
ansible-galaxy role install -r ansible/requirements/roles-mw.yml --force-with-deps
ansible-galaxy role install -r ansible/requirements/roles-mw.yml --force-with-deps --force
```

# Ejecutar playbook en local
## Ejecutar playbook en local

Antes de continuar, es recomendable realizar resguardos de toda configuración del
usuario donde se ejecute el playbook o realizarlo en un usuario nuevo.
Expand All @@ -67,13 +75,13 @@ actualización debemos ejecutar el siguiente comando:
ansible-playbook ansible/playbooks/vm-setup.yml -i ansible/inventory/localhost.yml -K
```

Si perteneces a Mikroways, entonces deberías además correr el siguiente playbook
Si perteneces a Mikroways, entonces deberías además correr el siguiente playbook:

```bash
ansible-playbook ansible/playbooks/vm-setup-mw.yml -i ansible/inventory/localhost.yml -K
```

# Consideraciones
## Consideraciones

* Si se está utilizando Pop!\_Os se debe agregar además `-e ansible_distribution=Ubuntu`

Expand All @@ -83,7 +91,7 @@ ansible-playbook ansible/playbooks/vm-setup-mw.yml -i ansible/inventory/localhos
* Si ya utilizabas dotfiles, considerá subir tus cambios porque podrías perder
alguna de tus personalizaciones.

# Funcionamiento
## Funcionamiento

El playbook sigue la siguiente serie de pasos:

Expand All @@ -93,17 +101,17 @@ El playbook sigue la siguiente serie de pasos:
wrapper para descargar binarios.
1. Configura [asdf](https://asdf-vm.com/) y prepara una serie de plugins y
versiones de productos.
1. Crea las configuraciones propias del entorno dejandolas a disposicion en el
1. Crea las configuraciones propias del entorno dejándolas a disposición en el
directorio `~/.mikroways/dotfiles`.
1. (opcional) Si se indico la instalación de las herramientas de Mikroways,
entonces estas se instalaran en la carpeta `~/.mikroways/tools`.

# Recomendaciones
## Recomendaciones

Una vez instalado tu desktop con este playbook, te recomendamos que agregues en
`$HOME/.envrc` la siguiente configuración:

```
```bash
use asdf
```

Expand All @@ -115,12 +123,12 @@ autocomplete, entonces proveemos el alias **`mw-fix-kube-completion`** que
debería actualizar el autocomplete que se suele romper entre diferentes
versiones de kubectl que se manejan con asdf.

# Usar este playbook en un bastion
## Usar este playbook en un bastion

Si querés usar directamente este playbook en una vm determinada, proponemos usar
el siguiente comando:

```
```bash
ansible-playbook ansible/playbooks/vm-setup.yml [-K] \
-i SOME_USER@10.10.10.10, \
-e ansible_user=SOME_USER
Expand All @@ -130,7 +138,7 @@ ansible-playbook ansible/playbooks/vm-setup.yml [-K] \
> especificado tanto en la opción `-i` como en `ansible_user`. Además, para usar
> un inventario inline es **fundamental el uso de la coma al final de la IP**.

# ¿Como probar el entorno en Vagrant?
## ¿Como probar el entorno en Vagrant?

Simplemente correr:

Expand All @@ -141,3 +149,10 @@ vagrant up
## Para ingresar y verificar el entorno
vagrant ssh
```

Para probar también las herramientas privadas de Mikroways (`vm-setup-mw.yml`), una vez
que la VM esté levantada:

```bash
vagrant provision --provision-with mw
```
36 changes: 25 additions & 11 deletions Vagrantfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,31 @@
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/jammy64"

config.ssh.forward_agent = true

config.vm.provider "virtualbox" do |vb|
vb.memory = "4096"
vb.memory = "4096"
end

config.vm.provision :ansible do |ansible|
ansible.galaxy_role_file = "ansible/requirements/roles.yml"
ansible.playbook = "ansible/playbooks/vm-setup.yml"
ansible.raw_ssh_args = ["-o ForwardAgent=yes"]
ansible.extra_vars = {
ansible_user: "vagrant",
ansible_python_interpreter: "/usr/bin/python3",
}
end

# Para probar vm-setup-mw.yml (herramientas privadas de Mikroways):
# vagrant provision --provision-with mw
config.vm.provision "mw", type: :ansible, run: "never" do |ansible|
ansible.galaxy_role_file = "ansible/requirements/roles-mw.yml"
ansible.playbook = "ansible/playbooks/vm-setup-mw.yml"
ansible.raw_ssh_args = ["-o ForwardAgent=yes"]
ansible.extra_vars = {
ansible_user: "vagrant",
ansible_python_interpreter: "/usr/bin/python3"
}
end
config.vm.provision :ansible do |ansible|
ansible.galaxy_role_file = "ansible/requirements/roles.yml"
ansible.playbook = "ansible/playbooks/vm-setup.yml"
ansible.raw_ssh_args = ["-o ForwardAgent=yes"]
ansible.extra_vars = {
ansible_user: "vagrant",
ansible_python_interpreter: "/usr/bin/python3",
mw_tools_enabled: false
}
end
end
98 changes: 86 additions & 12 deletions ansible/inventory/bastion-inventory.yml
Original file line number Diff line number Diff line change
@@ -1,19 +1,93 @@
---
# Inventario de ejemplo para bastiones remotos. Ajustar según las necesidades
# del equipo que va a usar la máquina.
#
# Variables disponibles y valores por defecto:
# https://github.com/Mikroways/ansible-workstation/tree/master/defaults/main
all:
vars:
# Ajustar si el usuario remoto difiere del local
ansible_user: "{{ lookup('env','USER')}}"
hosts:
bastion:
ansible_host: bastion-example.mikroways.net
mw_user_environment_tools_enabled: false
mw_user_environment_dotfiles_git_write_local_config: false
mw_user_environment_language_managers_enabled: false
mw_user_environment_krew_plugins_enabled: false
mw_user_environment_tf_plugins_enabled: false
mw_user_environment_helm_plugins_enabled: false
mw_user_environment_install_dotfiles: true
mw_podman_enabled: false
mw_docker_enabled: false
mw_tools_enabled: false
mw_workstation_local_packages_only:
- kubectl

# Docker no suele necesitarse en un bastion
workstation_docker_enabled: false

# Los dotfiles configuran zsh, aliases y el entorno de shell.
# En un bastion se suelen desactivar para evitar problemas de
# compatibilidad o configuración no deseada.
workstation_dotfiles_enabled: false

# Herramientas binarias a instalar (navi, govc, amtool, promtool, certinfo,
# gitlab-runner, fzf, sonobuoy). Por defecto instala todas.
# Ver https://github.com/Mikroways/ansible-workstation/blob/main/defaults/main/tools.yml
# Para limitar a las necesarias:
# workstation_tools_only:
# - navi
# - fzf
# OJO: workstation_tools_only: [] instala TODAS (lista vacía = sin filtro).
# Para no instalar ninguna hay que vaciar la lista superior
workstation_tools: []

# Herramientas de asdf a instalar.
# Por defecto instala todo el stack completo
# Ver https://github.com/Mikroways/ansible-workstation/blob/main/defaults/main/asdf.yml
#
# NOTA: se usa "latest" como ejemplo pero en entornos de producción se
# recomienda pinear versiones específicas para evitar cambios inesperados,
# por ejemplo: version: ["1.31.0"]
workstation_asdf_tools:
kubectl:
version: [latest]
helm:
version: [latest]
krew:
version: [latest]
terraform:
version: [latest]
terragrunt:
version: [latest]
tflint:
version: [latest]
sops:
version: [latest]
age:
version: [latest]
jq:
version: [latest]
yq:
version: [latest]
direnv:
version: [latest]
awscli:
version: [latest]
sshuttle:
version: [latest]
teleport-ent:
version: [latest]

# Plugins de krew (kubectl)
# Ver https://github.com/Mikroways/ansible-workstation/blob/main/defaults/main/krew-plugins.yml
workstation_krew_plugins:
- ctx
- ns
- oidc-login
- view-secret
- access-matrix

# Plugins de Helm
# Ver https://github.com/Mikroways/ansible-workstation/blob/main/defaults/main/helm-plugins.yml
workstation_helm_plugins:
- name: diff
repo: https://github.com/databus23/helm-diff
- name: secrets
repo: https://github.com/jkroepke/helm-secrets

# Proxy (si el bastion está detrás de un proxy corporativo)
# Ver https://github.com/Mikroways/ansible-workstation/blob/main/defaults/main/proxy.yml
# workstation_proxy_enabled: true
# workstation_proxy_http: http://proxy.example.com:3128
# workstation_proxy_https: http://proxy.example.com:3128
# workstation_proxy_no_proxy: localhost,127.0.0.1,.example.com
2 changes: 1 addition & 1 deletion ansible/inventory/localhost.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ all:
ansible_python_interpreter: /usr/bin/python3
ansible_connection: local
ansible_user: "{{ lookup('env','USER')}}"
mw_tools_enabled: false

hosts:
localhost:
2 changes: 1 addition & 1 deletion ansible/playbooks/vm-setup-mw.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
- name: Install a Mikroways desktop bastion
- name: Install Mikroways private tools
hosts: all
gather_facts: true
tasks:
Expand Down
2 changes: 1 addition & 1 deletion ansible/playbooks/vm-setup.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
- name: Install a Mikroways desktop bastion
- name: Install a Mikroways workstation
hosts: all
gather_facts: true
tasks:
Expand Down
2 changes: 1 addition & 1 deletion ansible/requirements/roles.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
- name: mikroways.workstation
version: 2.4.2
version: 2.6.0