Skip to content

Ejemplos útiles de cloud-config

Crear y configurar usuarios de sistema

#cloud-config

users:

  - default # Mantener configuración de usuarios predeterminada de la imagen

  - name: netuy
    shell: /bin/bash
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_authorized_keys:
        - ssh-rsa AAAABPOcPlifmM7nPAwrrEf... user@host

  - name: cloud
    shell: /bin/bash
    lock_passwd: false
    passwd: $5$rounds=4096$SJ6ekZUhiE4SUdPV$c0DzQ3RPFDqyluxxbC0dTvH9XgWgYgNY9ZYhG9jX3p2
    # El hash de la contraseña deseada, no la contraseña en texto plano
    # Puedes generar un hash fácilmente mediante el comando:
    # mkpasswd --method=SHA-512 --rounds=4096 <la-contraseña--que-deseo-aqui>

Ejecutar comandos

1
2
3
4
5
#cloud-config

runcmd:
- mkdir /app
- cp /etc/hostname /app/index.html

Actualizar paquetería del sistema mediante apt o yum:

1
2
3
4
#cloud-config

package_update: true
package_upgrade: true

Instalación de paquetes y stacks populares

Tip

Ten en cuenta que el nombre de los paquetes en ocasiones varian entre distintos sistemas operativos y ediciones

Stack LAMP (Linux, Apache, MySQL y PHP)

#cloud-config

package_update: true
packages:
  - apache2
  - mysql-server
  - libapache2-mod-php
  - php-mysql

Stack LEMP (Linux, Nginx, MySQL y PHP)

#cloud-config

package_update: true
packages:
  - nginx
  - mysql-server
  - php-fpm
  - php-mysql

Escribir archivos de texto

#cloud-config

write_files:
  - path: /etc/nginx/conf.d/loadbalancer
    permissions: '0644'
    owner: root
    content: |
        upstream pool_nodos_app {
            ip_hash;
            server 172.16.0.11 max_fails=1 fail_timeout=15s;
            server 172.16.0.12 max_fails=1 fail_timeout=15s;
            server 172.16.0.13 max_fails=1 fail_timeout=15s;
        }

        server {
            listen 80;
            # Contenido servido desde el propio loadbalancer:
            location / {
                root /var/www/static;
            }
            # Contenido servido dinámicamente desde los nodos de aplicación:
            location /app/ {
                proxy_pass http://pool_nodos_app/;
            }
        }

Gestionar unidades de almacenamiento, particiones y sistemas de archivos

#cloud-config

device_aliases: {mi_alias_para_volumen_de_datos: /dev/vdb }

disk_setup:
  mi_alias_para_volumen_de_datos:
    layout: [50, 50]
    overwrite: true
    table_type: gpt

fs_setup:
- { cmd: mkfs -t %(filesystem)s -L %(label)s %(device)s, device: mi_alias_para_volumen_de_datos.1, filesystem: ext4, label: fs1 }
- { device: mi_alias_para_volumen_de_datos.2, filesystem: ext4, label: fs2 }

mounts:
- [ mi_alias_para_volumen_de_datos.1, /mnt/particion_datos_1 ]
- [ mi_alias_para_volumen_de_datos.2, /mnt/particion_datos_2 ]