Ir al contenido

Desplegar la demostración

  • Terraform en la versión mínima indicada en terraform/versions.tf>= 1.8, para las funciones definidas por el proveedor y el bloque check que protege la VIP.
  • El proveedor xcsh. Nada fija una versión: .terraform.lock.hcl está en gitignore y la restricción es un mínimo abierto, por lo que cada init resuelve la última versión publicada. Esto es deliberado en un proyecto en prelanzamiento: la demostración debe fallar ante una regresión del proveedor en lugar de quedarse en una versión obsoleta que la oculte.
  • Una credencial de API de F5 XC para el tenant en var.expected_xc_tenant, exportada como XCSH_API_TOKEN (o el par P12/PEM). Exporta únicamente la credencial, nunca una URL — consulta más abajo.
  • Credenciales de Azure con permisos para crear un grupo de recursos, una VNet, un Route Server y VMs.
  • Un namespace de F5 XC preexistente para la capa de aplicación. El despliegue lo lee y nunca lo crea ni lo destruye, de modo que un namespace que contenga demostraciones no relacionadas jamás acabará en la lista de destrucción de este stack.

Proporciona los dos valores que no tienen predeterminado

Sección titulada «Proporciona los dos valores que no tienen predeterminado»

Todas las demás variables tienen un valor predeterminado funcional, y cada nombre de objeto deriva de var.component. Dos se dejan deliberadamente sin él:

Ventana de terminal
cd terraform
cp terraform.tfvars.example terraform.tfvars
VariablePor qué no tiene valor predeterminado
origin_ipCualquier valor predeterminado es una máquina concreta. Uno obsoleto envía el tráfico de un despliegue nuevo al host de otra persona en lugar de fallar.
lb_domainEl balanceador de carga hace coincidencia por Host, así que esto es lo que debe enviar cada petición. Pertenece a quien ejecute el despliegue.

Ambos se validan por formato, de modo que una errata hace fallar el plan en lugar de la demostración.

terraform.tfvars está en gitignore, y debe seguir así: contiene un id de suscripción y valores propios de cada ingeniero.

El tenant es configuración, no lo que sea que tu shell esté exportando

Sección titulada «El tenant es configuración, no lo que sea que tu shell esté exportando»

var.expected_xc_tenant nombra el tenant y es el único lugar donde se nombra. providers.tf deriva de él el api_url del proveedor xcsh, lo que deliberadamente anula cualquier XCSH_API_URL presente en el entorno, y una postcondition en terraform/main.tf hace fallar el plan cuando el entorno nombra un tenant distinto.

Consulta cualquiera de las dos mitades sin ejecutar nada que modifique el estado:

Ventana de terminal
terraform output -raw xc_tenant # what the deployment targets
terraform output -raw xc_env_tenant # what your shell claims — diagnostic only
f5-sales-demo
f5-sales-demo
  1. Inicializa. La configuración del backend no se incluye en el repositorio; proporciona la tuya.

    Ventana de terminal
    terraform init -backend-config=backend.hcl
  2. Primer apply. Esto construye Azure, los sitios CE y el token de registro, y arranca los CE.

    Ventana de terminal
    terraform apply
  3. Vuelve a aplicar una vez que los CE se hayan registrado. Esto no es opcional, y la razón está más abajo en lugar de ser algo que descubras.

    Ventana de terminal
    terraform apply

Después ve a comprobar que está saludable antes de mostrárselo a nadie.

La aprobación de registro está automatizada, y el apply sigue siendo de dos fases

Sección titulada «La aprobación de registro está automatizada, y el apply sigue siendo de dos fases»

La aprobación de registro ya no necesita a una persona en la consola: el recurso xcsh_registration_approval la realiza, y el módulo del sitio resuelve qué registro aprobar.

Eso sigue sin convertir el despliegue en un único apply desatendido, y merece la pena entender la razón antes de observar una primera ejecución y concluir que ha fallado:

  • El objeto de registro de un CE se llama r-<uuid>. Nunca se nombra según el sitio, así que nada puede predecir el nombre en tiempo de plan.
  • El registro solo existe después de que la VM haya arrancado y vpm se haya registrado.
  • Por eso el primer apply no planifica ninguna aprobación. Vuelve a aplicar una vez que los CE se hayan registrado y las aprobaciones se crearán.

terraform/main.tf documenta este orden en la parte superior del archivo, que es la versión autoritativa: la secuencia de despliegue vive junto al código que la implementa.

El SSH del operador es una decisión de tiempo de construcción

Sección titulada «El SSH del operador es una decisión de tiempo de construcción»

El despliegue escribe una clave de operador en la cuenta admin del appliance, cuyo shell de inicio de sesión es la CLI del sitio. La escribe write_files de cloud-init, que se ejecuta una sola vez en el primer arranque.

Ventana de terminal
terraform destroy

El namespace de la aplicación sobrevive: se lee, nunca se gestiona, por lo que destroy no puede llevarse consigo un namespace que contenga demostraciones no relacionadas. Todo lo demás en el grupo de recursos desaparece.