kolesaev.harbor

Rol de Ansible Harbor

Ejemplo de Playbook

---
- nombre: Instalación de Harbor
  hosts: todos
  become: 
  gather_facts: 

  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: 
            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: 
            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

community.general

ansible-galaxy collection install community.general

community.crypto

ansible-galaxy collection install community.crypto

community.docker

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:

robertdebock.harbor

one_mind.harbor_ansible_role

Acerca del proyecto

Install and configure harbor on your system.

Instalar
ansible-galaxy install kolesaev.harbor
Licencia
mit
Descargas
124
Propietario