Emerging Tech Valencia 2019: 30 Mayo
Involucrado con Linux desde algo antes de comenzar los estudios universitarios y luego durante ellos, estando involucrado con las asociaciones LinUV y <Valux.org>.
Empecé a ‘vivir’ del software libre en 2004 y a trabajar en Red Hat en 2006 como Consultor, luego como Senior Technical Account Manager, posteriormente como Principal Software Maintenance Engineer y actualmente como Senior Software Engineer para el equipo de Solutions Engineering.
Un fin de semana de guardia revisando una y otra vez la mismas configuraciones en diversos equipos hicieron evidente la necesidad de automatizar.
Unos scripts sencillos y un ‘wrapper’ en bash
después, la herramienta fue tomando forma, poco después, se reescribió el ‘wrapper’ en python para proporcionarle características más avanzadas.
En esos primeros momentos también se mantuvieron conversaciones con ingeniería y como resultado, un nuevo diseño de los tests más sencillo fue adoptado.
citellus.html
por http se visualiza.
Actualmente hay una gran presencia de plugins de OpenStack, ya que es en ese área donde trabajamos diariamente, pero Citellus no está limitado a una tecnología o producto.
Por ejemplo, es fácil realizar comprobaciones acerca de si un sistema está configurado correctamente para recibir actualizaciones, comprobar versiones específicas con fallos (Meltdown/Spectre) y que no hayan sido deshabilitadas las protecciones, consumo excesivo de memoria por algún proceso, fallos de autentificación, etc.
Lea la guía del colaborador en: https://github.com/citellusorg/citellus/blob/master/CONTRIBUTING.md para más detalles.
XSOS: Proporciona información de datos del sistema (ram, red, etc), pero no analiza, a los efectos es un visor ‘bonito’ de información.
TripleO-validations: se ejecuta solamente en sistemas ’en vivo’, poco práctico para realizar auditorías o dar soporte.
Filosofía sencilla:
Los plugins son aún más sencillos:
$RC_OKAY
si el test es satisfactorio / $RC_FAILED
para error / $RC_SKIPPED
para los omitidos / Otro para fallos no esperados.CITELLUS_ROOT
) o si se está ejecutando en modo live (CITELLUS_LIVE
). No se necesita introducir datos vía el teclado#!/bin/bash
# Load common functions
[ -f "${CITELLUS_BASE}/common-functions.sh" ] && . "${CITELLUS_BASE}/common-functions.sh"
# description: error if disk usage is greater than $CITELLUS_DISK_MAX_PERCENT
: ${CITELLUS_DISK_MAX_PERCENT=75}
if [[ $CITELLUS_LIVE = 0 ]]; then
is_required_file "${CITELLUS_ROOT}/df"
DISK_USE_CMD="cat ${CITELLUS_ROOT}/df"
else
DISK_USE_CMD="df -P"
fi
result=$($DISK_USE_CMD |awk -vdisk_max_percent=$CITELLUS_DISK_MAX_PERCENT '/^\/dev/ && substr($5, 0, length($5)-1) > disk_max_percent { print $6,$5 }')
if [ -n "$result" ]; then
echo "${result}" >&2
exit $RC_FAILED
else
exit $RC_OKAY
fi
$RC_OKAY
(ok), $RC_FAILED
(fallo) or $RC_SKIPPED
(omitido).CITELLUS_ROOT
tiene la ruta a la carpeta del sosreport indicada.CITELLUS_LIVE
contiene 0
ó 1
si es una ejecución en vivo o no.~/~/.../plugins/core/rhev/hosted-engine.sh
chmod +x hosted-engine.sh
if [ "$CITELLUS_LIVE" = "0" ]; then
grep -q ovirt-hosted-engine-ha $CITELLUS_ROOT/installed-rpms
returncode=$?
if [ "x$returncode" == "x0" ]; then
exit $RC_OKAY
else
echo "ovirt-hosted-engine no instalado" >&2
exit $RC_FAILED
fi
else
echo "No funciona en modo Live" >&2
exit $RC_SKIPPED
fi
# Load common functions
[ -f "${CITELLUS_BASE}/common-functions.sh" ] && . "${CITELLUS_BASE}/common-functions.sh"
if is_rpm ovirt-hosted-engine-ha; then
exit $RC_OKAY
else
echo "ovirt-hosted-engine no instalado" >&2
exit $RC_FAILED
fi
Use tox
para ejecutar algunas pruebas UT (utf8, bashate, python 2.7, python 3)
Diga a Citellus qué plugin utilizar:
[piranzo@host citellus]$ ~/citellus/citellus.py sosreport-20170724-175510/crta02 -i hosted-engine.sh -r
_________ .__ __ .__ .__
\_ ___ \|__|/ |_ ____ | | | | __ __ ______
/ \ \/| \ __\/ __ \| | | | | | \/ ___/
\ \___| || | \ ___/| |_| |_| | /\___ \
\______ /__||__| \___ >____/____/____//____ >
\/ \/ \/
mode: fs snapshot sosreport-20170724-175510/crta02
# ~/~/.../plugins/core/rhev/hosted-engine.sh: failed
"ovirt-hosted-engine no instalado"
Por ejemplo, Galera debe comprobar el seqno entre los diversos miembros para ver cúal es el que contiene los datos más actualizados.
Viene en el mismo repositorio que Citellus y se ejecuta especificando los diversos sosreports:
[piranzo@collab-shell]$ ~/citellus/magui.py * -i seqno
_
_( )_ Magui:
(_(ø)_)
/(_) Multiple Analisis Generic Unifier and Interpreter
\|
|/
....
[piranzo@collab-shell]]$ cat magui.json:
{'~/~/.../core/openstack/mysql/seqno.sh': {'controller0': {'err': u'2b65adb0-787e-11e7-81a8-26480628c14c:285019879\n',
'out': u'',
'rc': 10},
'controller1': {'err': u'2b65adb0-787e-11e7-81a8-26480628c14c:285019879\n',
'out': u'',
'rc': 10},
'controller2': {'err': u'2b65adb0-787e-11e7-81a8-26480628c14c:285019878\n',
'out': u'',
'rc': 10}}}
- En este ejemplo (UUID and SEQNO se muestra para cada controlador y vemos que el controller2 tiene una sequencia distinta y menos actualizada.
</small>
----
## Siguientes pasos con Magui?
<small>
- Dispone de algunos plugins en este momento:
- Agregan data de citellus ordenada por plugin para comparar rápidamente
- Muestra los datos de 'metadatos' de forma separada para contrastar valores
- `pipeline-yaml`, `policy.json` y otros (asociados a OpenStack)
- `seqno` de galera
- `redhat-release` entre equipos
- Faraday: compara ficheros que deban ser iguales o distintos entre equipos
</small>
---
## Siguientes pasos
<small>
- Más plugins!
- Dar a conocer la herramienta para entre todos, facilitar la resolución de problemas, detección de fallos de seguridad, configuraciones incorrectas, etc.
- Movimiento: Muchas herramientas mueren por tener un único desarrollador trabajando en sus ratos libres, tener contribuciones es básico para cualquier proyecto.
- Programar más tests en Magui para identificar más casos dónde los problemas aparecen a nivel de grupos de sistemas y no a nivel de sistema sindividuales.
</small>
---
## Otros recursos
Blog posts:
<small>
- [Citellus tagged posts](/es/tags/citellus/)
- [Citellus Framework for detecting known issues](/blog/2017/07/26/citellus-framework-for-detecting-known-issues-in-systems./)
- [Magui for analysis of issues across several hosts](/blog/2017/07/31/magui-for-analysis-of-issues-across-several-hosts./)
- [Jenkins for running CI tests](/blog/2017/08/17/jenkins-for-running-ci-tests/)
- [i18n and bash](/blog/2017/10/26/i18n-and-bash8-in-bash/)
- [Recent changes in Magui and Citellus](/blog/2018/01/16/recent-changes-in-magui-and-citellus/)
- [DevConf.cz 2018 recording](https://www.youtube.com/watch?v=SDzzqrUdn5A)
</small>
---
### ¿Preguntas?
Gracias por asistir!!
Ven a #citellus en Freenode, <https://t.me/citellusUG> en Telegram o contacta con nosotros:
- <https://risuorg.github.io>
- citellus _AT_ googlegroups.com
- <https://groups.google.com/forum/#!forum/citellus>
- Issue en github <https://github.com/citellusorg/citellus/issues>
---
Presentación disponible en:
<https://iranzo.io>
![](../../../../extra/blogqr.png)