kolesaev.harbor
Rol de Ansible Harbor
Ejemplo de Playbook
---
- nombre: Instalación de Harbor
hosts: todos
become: sí
gather_facts: sí
roles:
# instalar docker y docker-compose
- role: geerlingguy.docker
# instalar Harbor
- role: kolesaev.harbor
vars:
harbor_parent_dir: /data
harbor_data_dir: /data/harbor_data
harbor_enable_trivy: verdadero
harbor_external_url: "https://{{ ansible_hostname }}"
harbor_admin_password: "{{ lookup('ansible.builtin.env', 'HARBOR_ADMIN_PWD') | default('Harbor12345') }}"
harbor_http_port: 5680
harbor_https_port: 5643
harbor_iface_ip: 127.0.0.1
harbor_projects_to_remove:
- library
harbor_users:
- name: "usuario-uno"
harbor_registries:
- url: "https://hub.docker.com"
name: "docker-hub"
type: "docker-hub"
harbor_projects:
- name: "nuevo-proyecto"
auto_scan: sí
public: no
retention_policy:
schedule: Horaria
rules:
- repositories_mask_type: "matching"
repositories_mask: "**"
tags_mask_type: "matching"
tags_mask: "dev-*"
rule_type: "pushed_by_days"
rule_value: 30
- name: "docker-hub"
public: sí
proxy_registry: "docker-hub"
harbor_members:
- project: "nuevo-proyecto"
name: "usuario-uno"
role_id: 2
Variables de Rol
Puede usar cualquier variable booleana (sí/no/verdadero/falso).
Los valores predeterminados para las variables se establecen en defaults/main.yml
.
---
# ¿Deberíamos desactivar el servicio de actualizaciones automáticas?
system_disable_unattended_upgrades: falso
# Versión que desea instalar
harbor_version: "2.10.0"
# ¿Deberíamos forzar la instalación de Harbor incluso si ya está instalado?
harbor_force_install: falso
# ¿Qué tipo de instalación deseas, "en línea" o "fuera de línea"?
harbor_installation_type: en línea
# Especifique la dirección IP o el nombre de dominio completamente calificado (FQDN) del host objetivo en el que implementar Harbor.
harbor_hostname: "{{ ansible_host }}"
# Establecer una contraseña inicial para el administrador del sistema de Harbor.
harbor_admin_password: "Harbor12345"
# Dónde crear el directorio de Harbor
harbor_parent_dir: /home
# Dónde almacenar los datos
harbor_data_dir: "{{ harbor_parent_dir }}/harbor/data"
# Puerto HTTP
harbor_http_port: 80
# Puerto HTTPS
harbor_https_port: 443
# Instalar con trivy o no
harbor_enable_trivy: falso
# Llenar harbor_external_url si desea habilitar el proxy externo.
harbor_external_url: ""
# Podemos definir una IP de interfaz para el puerto abierto cuando habilitamos el proxy externo
harbor_iface_ip: ""
###########################################################
##### #####
##### La IP de la interfaz se puede establecer una vez utilizando este rol, #####
##### no se actualizará después de cambiar el valor #####
##### sino solo hasta que elimine el archivo indicador #####
##### o use la variable harbor_force_install ###########
##### #####
###########################################################
#################
### Cosas de API ###
#################
# ¿Los administradores solo pueden crear proyectos?
harbor_project_creation_restriction: falso
# Lista de registros para eliminar
harbor_registries_to_remove: []
# - nombre-registro
# Lista de miembros para eliminar
harbor_members_to_remove: []
# - project: nombre-proyecto
# member_id: id-miembro
##################################################
##### Puede obtener los IDs de miembros a través de la API #####
##### Pero es más fácil eliminarlos a través de la interfaz de usuario #####
##################################################
# Lista de proyectos para eliminar
harbor_projects_to_remove: []
# - nombre-proyecto
# Lista de usuarios para eliminar
harbor_users_to_remove: []
# - nombre-usuario
# Lista de proyectos para crear
harbor_projects: []
# - name: "nombre-proyecto"
# public: no
# auto_scan: falso
# proxy_registry: nombre-registro
# # política de retención de etiquetas
# retention_policy:
# schedule: "0 0 * * * *" # acepta cron y el valor Horaria/Diaria
# rules:
# - repositories_mask_type: "matching"
# repositories_mask: "**"
# tags_mask_type: "matching"
# tags_mask: "dev-*"
# rule_type: "pushed_by_days"
# rule_value: 30
# with_untagged: falso
####################################################
##### #####
##### Mapeo para reglas de retención #####
##### #####
##### tipos_de_reglas: #####
##### pushed_by_count: "latestPushedK" #####
##### pulled_by_count: "latestPulledN" #####
##### pushed_by_days: "nDaysSinceLastPush" #####
##### pulled_by_days: "nDaysSinceLastPull" #####
##### always: "always" #####
##### tipos_de_máscaras_de_repositorios: #####
##### matching: "repoMatches" #####
##### excluding: "repoExcludes" #####
##### tipos_de_máscaras_de_etiquetas: #####
##### matching: "matches" #####
##### excluding: "excludes" #####
##### #####
####################################################
# Lista de usuarios para crear
harbor_users: []
# - name: "usuario"
# email: "[email protected]"
# password: "Harbor12345" # La contraseña se puede establecer una vez utilizando este rol, no se actualizará después de cambiar el valor
# realname: "usuario"
# comment: "comentario"
# Crear miembros del proyecto
harbor_members: []
# - project: "nombre-proyecto"
# name: "nombre-usuario"
# role_id: 1
#############################
##### IDs de rol: #####
##### #####
##### Administrador del Proyecto = 1 #####
##### Desarrollador = 2 #####
##### Invitado = 3 #####
##### Mantenedor = 4 #####
##### Invitado Limitado = 5 #####
#############################
# Crear registros espejo
harbor_registries: []
# - url: "https://hub.docker.com"
# insecure: falso
# name: "Docker Hub"
# type: "docker-hub"
# auth_type: básico
# access_key: nombre
# access_secret: contraseña
# Configuración del recolector de basura
harbor_gc: {}
# type: Personalizado # será personalizado si está vacío
# schedule: 0 0 1 * * *
# delete_untagged: falso
# workers: 2
#######################################
##### #####
##### Por defecto será con #####
##### #####
##### type: Personalizado #####
##### schedule: 0 0 0 * * * #####
##### worker: 1 #####
##### delete_untagged: falso #####
##### #####
##### Para desactivar, establecer type None #####
##### #####
##### Tipos disponibles: #####
##### - Ninguno #####
##### - Semanal #####
##### - Diaria #####
##### - Horaria #####
##### #####
#######################################
Reinstalar
Como este rol creará un archivo indicador, no se instalará ni configurará de nuevo después de que este rol ya haya sido utilizado. Para reinstalar Harbor, puede eliminar el archivo installed-indicator en el directorio de Harbor o establecer true como valor de la variable harbor_force_install.
Las acciones de la API se llevarán a cabo cada vez que se use este rol, incluso si el archivo indicador existe.
Características
Instalación de Harbor
Creación/Actualización/Configuración a través de la API:
- Proyectos
- Registros
- Usuarios
- Miembros
- Políticas de retención
- Recolector de basura
Características relacionadas con la API:
- Cada objeto se actualizará cada vez que esté en la lista de creación relacionada.
- No eliminará un objeto si también está en la lista de creación relacionada. Para recrearlo, primero elimínelo de la lista de creación relacionada y luego agrégalo nuevamente.
Requisitos
Paquetes de OS Remoto
Docker y docker-compose-plugin (puede instalarlos manualmente o usar cualquier playbook/tarea/rol de ansible, por ejemplo, geerlingguy.docker
).
Colecciones Ansible Locales
ansible-galaxy collection install community.general
ansible-galaxy collection install community.crypto
ansible-galaxy collection install community.docker
No implementado
Para la instalación:
- capacidad de usar una base de datos externa
- capacidad de usar un redis externo
- capacidad de usar un servidor syslog externo
- capacidad de usar un rastreo externo
- capacidad de abrir el endpoint de métricas
- (y otras cosas que no son configurables a través de variables predeterminadas)
Para la API:
- listas de permitidos de CVE
- servicios de trabajos
- purgas
- replicaciones
- robots
- grupos de usuarios
- webhooks
- reglas de etiquetas inmutables
- precalentamientos
- proveedores de autenticación externos
- (y otras cosas que no son configurables a través de variables predeterminadas)
Soluciones utilizadas
Un agradecimiento especial a los siguientes proyectos que me ayudaron en la implementación:
Install and configure harbor on your system.
ansible-galaxy install kolesaev.harbor