Investigación sobre granjas de dispositivos y automatización completa para levantar un laboratorio Android sobre un chasis de blades Debian. Conclusión que ordena el repositorio: el cuello de botella nunca fue el cómputo sino la identidad. Desde que la atestación de dispositivo pasó de estadística a criptográfica, un servidor no puede hacerse pasar por un teléfono — le falta una clave grabada en fábrica que ningún software produce. Contenido: - 01_investigacion/ — capa de identidad (verificación telefónica, eSIM, reputación de IP, atestación por hardware, correlación entre cuentas), mercado y players, stack técnico, marco legal en la UE - 02_device_lab/ansible/ — Ansible para 16 blades: preflight de solo lectura que identifica el hardware por DMI, despliegue de redroid en Docker y control de flota por adb. Solo ansible.builtin, sin colecciones externas - docs/ — requisitos, costes y repaso de seguridad con 11 hallazgos - 03_charla/ — guion para HackMadrid / Hackmeeting València Estado: la automatización está escrita pero SIN ejecutar contra hardware. YAML validado, plantillas renderizadas en ambos modos de red y fleet.sh comprobado con bash -n. El modelo de blade sigue sin confirmar.
53 lines
1.6 KiB
YAML
53 lines
1.6 KiB
YAML
---
|
|
# Estado real de la granja. Solo lectura.
|
|
#
|
|
# ansible-playbook playbooks/status.yml
|
|
|
|
- name: Estado de los nodos de carga
|
|
hosts: redroid_nodes
|
|
gather_facts: true
|
|
tasks:
|
|
|
|
- name: Contenedores en marcha
|
|
ansible.builtin.command:
|
|
cmd: docker ps --filter "name=redroid-" --format '{% raw %}{{.Names}}\t{{.Status}}{% endraw %}'
|
|
register: status_ps
|
|
changed_when: false
|
|
failed_when: false
|
|
|
|
- name: Devices binder presentes
|
|
ansible.builtin.stat:
|
|
path: "/dev/{{ item }}"
|
|
loop: [binder, hwbinder, vndbinder]
|
|
register: status_binder
|
|
|
|
- name: Memoria libre
|
|
ansible.builtin.command:
|
|
cmd: free -m
|
|
register: status_mem
|
|
changed_when: false
|
|
|
|
- name: Resumen del nodo
|
|
ansible.builtin.debug:
|
|
msg:
|
|
- "--- {{ inventory_hostname }} ---"
|
|
- "binder : {{ 'ok' if (status_binder.results | rejectattr('stat.exists') | list | length == 0) else 'FALTAN devices' }}"
|
|
- "ram libre : {{ status_mem.stdout_lines[1].split()[6] | default('?') }} MB disponibles de {{ ansible_memtotal_mb }} MB"
|
|
- "contenedores:"
|
|
- "{{ status_ps.stdout_lines | default(['(ninguno)']) }}"
|
|
|
|
- name: Estado de la flota adb
|
|
hosts: coordinator
|
|
gather_facts: false
|
|
tasks:
|
|
|
|
- name: Conectar y listar
|
|
ansible.builtin.shell:
|
|
cmd: "{{ coordinator_dir }}/fleet.sh connect >/dev/null 2>&1; {{ coordinator_dir }}/fleet.sh list"
|
|
register: status_fleet
|
|
changed_when: false
|
|
failed_when: false
|
|
|
|
- name: Flota
|
|
ansible.builtin.debug:
|
|
var: status_fleet.stdout_lines
|