Matar tareas colgadas en Foreman

En esta breve entrada explico como matar tareas colgadas en la herramienta Foreman. Esta entrada va sobre todo para mis apuntes. Si no sabes lo que es Foreman, hace un tiempo te expliqué en que consistía.

Matar tareas colgadas en Foreman

De vez en cuando se quedan tareas colgadas en esta herramienta, sobre todo, por lo menos en mi caso, cuando quiero sincronizar un producto o un repositorio. Generalmente estas tareas se pueden consultar desde la interfaz web, pero no permite matarlas.

Para conseguir ese fin nos debemos ir a la consola de comandos. Una vez allí accedemos a PostgreSQL

su - postgres

Y listamos las tareas pendientes:

$ psql foreman
foreman=# select id, label, started_at, state, result from foreman_tasks_tasks where state != 'stopped';

En mi caso:

Listamos el estado de las tareas

La primera columna (id) del volcado muestra el ID de la tarea; la tercera columna (started_at) también es importante. Todas las tareas previas con estado «error» se deberían detener.

Lo que tenemos que hacer ahora es copiar los ID asociados y utilizar la consola de «foreman-rake» para abortar las tareas:

foreman-rake console
irb(main)> ForemanTasks::Task.find("e7f49632-0c78-44a0-ac6e-b4c235a82936").destroy
irb(main)> ForemanTasks::Task.find("06682faa-839b-4dc6-bbcf-0562b3ea1c3f").destroy
...

Una vez hecho esto se recomienda verificar y corregir la integridad de la base de datos:

foreman-rake katello:reimport
Importing Katello::Erratum
Importing Katello::PackageGroup
Importing Katello::PuppetModule
Importing Katello::Rpm
(...)
Importing Katello::Srpm
Importing Katello::ModuleStream
Importing Katello::YumMetadataFile
Importing Katello::FileUnit
Importing Katello::Subscription
Importing Katello::Pool
Importing Katello::DockerManifest
Importing Katello::DockerManifestList
Importing Katello::DockerTag
Importing Katello::ContentViewPuppetEnvironment

De esta maenra ya tendríamos que tener nuestra herramienta lista para trabajar sin tareas con error.