Terraform GSuite Provider: mon expérience

Luciano Adonis
devsChile
Published in
4 min readJul 13, 2018

JE SUIS G SUITE? NO?

Quería un triangulo amoroso pero, ¿a quién iba a engañar?

Dejando el humor de lado, este es un simple post para conversar sobre la palabra de Lord GSuite.

¿Qué es GSuite? ¿De dónde venimos? ¿Adónde vamos? No lo sé, pero lo que sí sé, es que hay un provider de Terraform, por lo tanto hay una forma de darle uso.

Por cierto, al final hay un TL;DR.

Sinopsis

GSuite te permite administrar usuarios, grupos y permisos de forma centralizada dentro de tu organización, lo cual para un ambiente en Google Cloud Platform (GCP) es bastante útil.

El pasado:

Tenías que tomarte el tiempo para crear los grupos manualmente (en el mejor de los casos por consola con gcloud), asignarle los usuarios y finalmente darle los permisos desde GCP a estos, para recién un solo proyecto. Mientras en paralelo tu infra se levantaba en cosa de segundos con Terraform.

Actualmente:

El siguiente ejemplo es uno simple de como crear un grupo, asignarle un usuario con GSuite y darle permisos con GCP, sería mas o menos algo así:

### GROUPS ###resource "gsuite_group" "viewer" {
email = "huemul@devschile.cl"
name = "huemul-digital"
description = "Grupo para Huemules observadores"
}
### MEMBERS ###resource "gsuite_group_members" "members" {
group_email = "${gsuite_group.viewer.email}"

member {
email = "huemul-user01@devschile.cl"
}
}
### ROLES ###resource "google_project_iam_policy" "members" {
project = "${var.id_project}"
policy_data = "${data.google_iam_policy.members.policy_data}"
depends_on = ["gsuite_group_members.members"]
}
data "google_iam_policy" "members" {
depends_on = ["gsuite_group_members.members"]
binding {
role = "roles/viewer"
members = [
"group:${gsuite_group.viewer.email}"
]
}
}

De esta forma todos los miembros del grupo “huemul@devschile.cl” se les asigna un rol dentro del proyecto en el que se requiera. Esto en conjunto a lo que puedas automatizar con el provider de GCP = ❤️ (Cuando funciona).

Comencemos:

Si no te basta con tener tu infraestructura y Google Calendar con Terraform, este post te encantará.

¿Cansado de tener que agregar a tus usuarios a mano? ¿Buscas garantizar la ley y el orden de tu empresa? ¿Muy cool para usar GCloud? Prueba el ¡Terraform GSuite Provider!

Este provider surge como respuesta a las posturas que tiene Terraform sobre no querer crear un provider completamente nuevo solo para GSuite (no puedo culparlos).

No se me ocurrió nada inteligente que decir.

Este tipo 👉 Chase, necesitaba un provider para GSuite, así que hizo uno. Principalmente con el objetivo de crear los recursos que necesitaba en Terraform (lamentablemente, solo esos por el momento).

Solo le hago propaganda porque es buena onda y responde mis mails💰💌

¿Qué gracia tiene?

Actualmente soporta la creación de usuarios, grupos, administración de miembros y destrucción casual de cuentas inocentes.

Cosas que te encantará hacer con Terraform en GCP y GSuite:

  • Libertad: ya no tener que crear los grupos a mano y/o usando scripts. Acercándonos, poco a poco, cada vez más hacia la soñada DIGITAL — TRANSFORMATION.
  • Administración: estandarizar y facilitar el manejo de usuarios dentro de tu infraestructura definida con Terraform.
  • Y el favorito de los niños en casa: asignar roles a miembros de grupos predeterminados para proyectos específicos. ¿Suena genial? ¡Lo es!.

Cosas que tendrás que enfrentar si quieres hacerlo:

  • Administración: funciona bien siempre y cuando agregues miembros en base a atributos individuales; lo cual es malo para grandes listas de usuarios y para la salud.
  • Variables: usar lists, maps tendrás un buen desafío, ya que no deja agregar un segmento. ¿Imposible? No, pero se pierde bastante el control sobre los recursos ya creados. Sigo buscando una solución estable 🆘
  • Grupos existentes: agregar un usuario con Terraform a uno de estos = ☠️. Pese a que es obvio, es necesario hacerlo al menos una vez en producción.
  • Actualización: todo lo antes mencionado, pero de nuevo. Es increíblemente más delicado de lo que parece, el seguimiento a los recursos funciona ligeramente distinto al “procesarse” como una lista de usuarios. Aún recuerdo mis años mozos donde podía meter una lista de strings y hacer muchas cosas, sin preocuparme de matar a alguien.
  • A veces creo que GSuite me odia.
  • Veo grupos muertos 👥
Así se siente superar lo anterior.

Pese a todas estas dificultades junto el no tener soporte oficial de Terraform, este sigue estando dentro de los Community Providers e igual tiene “movimiento” con nuevas versiones de este. Lamentablemente su uso se encuentra limitado solamente a lo “estrictamente” necesario para evitar 💥.

Este provider puede volverse más contundente y con un gran número de funcionalidades que me encantaría ver y usar. Para aquellEs que quieran aportar al provider, pueden hacerlo con un PR.

“¡Ajá! Y si lo es, ¿por qué no lo haces tú?” — Anon.

Porque quiero disfrutar de mi lucha contra el provider en su estado actual, mejorarlo solo lo haría mas fácil, lo cual no es malo, pero ante la adversidad se aprende más.

PD: cualquier ayuda con el provider o tips sobre cómo mantener la consistencia usando listas es bienvenida.

Y lo mas esperado del post:

TL;DR: si usas Terraform para GCP y administras tus usuarios con GSuite, puedes utilizar el Community Provider, automatizando varias cuestiones, si logras sobrellevar algunos desafíos.

Este fue mi pseudo-review del provider de GSuite. Slds.

--

--