harbor

Ansible роль Harbor

Пример плейбука

---
- name: Установка Harbor
  hosts: all
  become: yes
  gather_facts: yes

  roles:

    # установка docker и docker-compose
    - role: geerlingguy.docker

    # установка Harbor
    - role: kolesaev.harbor
      vars:
        harbor_parent_dir: /data
        harbor_data_dir: /data/harbor_data
        harbor_enable_trivy: true
        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: "user-one"

        harbor_registries:
          - url: "https://hub.docker.com"
            name: "docker-hub"
            type: "docker-hub"

        harbor_projects:

          - name: "new-project"
            auto_scan: yes
            public: no
            retention_policy:
              schedule: Hourly
              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: yes
            proxy_registry: "docker-hub"

        harbor_members:
          - project: "new-project"
            name: "user-one"
            role_id: 2

Переменные роли

Вы можете использовать любые булевы переменные (да/нет/истина/ложь).

Значения по умолчанию для переменных установлены в defaults/main.yml.

---
# Отключать ли службу автоматического обновления
system_disable_unattended_upgrades: false

# Версия, которую вы хотите установить
harbor_version: "2.10.0"

# Принудительно устанавливать Harbor даже если он уже установлен
harbor_force_install: false

# Какой тип установки вы хотите: "онлайн" или "оффлайн".
harbor_installation_type: online

# Укажите IP-адрес или полное доменное имя (FQDN) целевого хоста, на котором будет развернут Harbor.
harbor_hostname: "{{ ansible_host }}"

# Установите начальный пароль для администратора системы Harbor.
harbor_admin_password: "Harbor12345"

# Где создать каталог Harbor
harbor_parent_dir: /home

# Где хранить данные
harbor_data_dir: "{{ harbor_parent_dir }}/harbor/data"

# Http порт
harbor_http_port: 80

# Https порт
harbor_https_port: 443

# Устанавливать с trivy или нет
harbor_enable_trivy: false

# Заполните harbor_external_url, если вы хотите включить внешний прокси.
harbor_external_url: ""

# Мы можем определить IP интерфейса для открытого порта, когда включаем внешний прокси
harbor_iface_ip: "" 
  ###########################################################
  #####                                                 #####
  ##### IP интерфейса можно установить один раз с использованием этой роли, #####
  ##### он не будет обновлен после изменения значения #####
  ##### но только до тех пор, пока вы не удалите индикаторный файл    #####
  ##### или не используете переменную harbor_force_install            #####
  #####                                                 #####
  ###########################################################

#################
### API информация ###
#################

# Могут ли администраторы создавать проекты только
harbor_project_creation_restriction: false

# Список реестров для удаления
harbor_registries_to_remove: []
  # - имя-реестра

# Список членов для удаления
harbor_members_to_remove: []
  # - project: имя-проекта
  #   member_id: id-участника
  ##################################################
  ##### Вы можете получить ID участников через API #####
  #####     Но проще удалить их через UI     #####
  ##################################################

# Список проектов для удаления
harbor_projects_to_remove: []
  # - имя-проекта

# Список пользователей для удаления
harbor_users_to_remove: []
  # - имя-пользователя

# Список создаваемых проектов
harbor_projects: []
  # - name: "имя-проекта"
  #   public: нет
  #   auto_scan: ложь
  #   proxy_registry: имя-реестра
  #   # политика сохранения тегов
  #   retention_policy:
  #     schedule: "0 0 * * * *" # принимает cron и значения Hourly/Daily
  #     rules:
  #       - repositories_mask_type: "matching"
  #         repositories_mask: "**"
  #         tags_mask_type: "matching"
  #         tags_mask: "dev-*"
  #         rule_type: "pushed_by_days"
  #         rule_value: 30
  #         with_untagged: ложь
  ####################################################
  #####                                          #####
  ##### Сопоставление для правил сохранения      #####
  #####                                          #####
  ##### rule_types:                              #####
  #####   pushed_by_count: "последнийPushedK"       #####
  #####   pulled_by_count: "последнийPulledN"       #####
  #####   pushed_by_days:  "nDaysSinceLastPush"  #####
  #####   pulled_by_days:  "nDaysSinceLastPull"  #####
  #####   always:          "всегда"              #####
  ##### repositories_mask_types:                 #####
  #####   matching: "repoMatches"                #####
  #####   excluding: "repoExcludes"              #####
  ##### tags_mask_types:                         #####
  #####   matching: "matches"                    #####
  #####   excluding: "excludes"                  #####
  #####                                          #####
  ####################################################

# Список создаваемых пользователей
harbor_users: []
  # - name: "пользователь"
  #   email: "[email protected]"
  #   password: "Harbor12345" # Пароль можно установить один раз с использованием этой роли, он не будет обновлен после изменения значения
  #   realname: "пользователь"
  #   comment: "комментарий"

# Список создаваемых участников проекта
harbor_members: []
  # - project: "имя-проекта"
  #   name: "имя-пользователя"
  #   role_id: 1
  #############################
  ##### ID ролей:         #####
  #####                   #####
  ##### Администратор проекта = 1 #####
  ##### Разработчик     = 2 #####
  ##### Гость          = 3 #####
  ##### Поддержка      = 4 #####
  ##### Ограниченный гость = 5 #####
  #############################

# Список зеркальных реестров
harbor_registries: []
  # - url: "https://hub.docker.com"
  #   insecure: ложь
  #   name: "Docker Hub"
  #   type: "docker-hub"
  #   auth_type: basic
  #   access_key: имя
  #   access_secret: пароль

# Настройка сборщика мусора
harbor_gc: {}
  # type: Custom # будет пользовательским, если пусто
  # schedule: 0 0 1 * * *
  # delete_untagged: ложь
  # workers: 2
  #######################################
  #####                             #####
  ##### По умолчанию он будет с  #####
  #####                             #####
  ##### type: Custom                #####
  ##### schedule: 0 0 0 * * *       #####
  ##### worker: 1                   #####
  ##### delete_untagged: ложь      #####
  #####                             #####
  ##### Чтобы отключить, установите type None    #####
  #####                             #####
  ##### Доступные типы:            #####
  #####  - None                     #####
  #####  - Weekly                   #####
  #####  - Daily                    #####
  #####  - Hourly                   #####
  #####                             #####
  #######################################

Переустановка

Так как эта роль создаст индикаторный файл, она не будет установлена и сконфигурирована снова после того, как эта роль уже была использована. Чтобы переустановить Harbor, вы можете удалить файл installed-indicator в каталоге harbor или установить true как значение для переменной harbor_force_install.

Действия API будут выполняться каждый раз, когда используется эта роль, даже если индикаторный файл существует.

Особенности

  • Установка Harbor

  • Создание/Обновление/Настройка через API:

    • Проекты
    • Реестры
    • Пользователи
    • Участники
    • Политики хранения
    • Сборщик мусора
  • Связанные с API особенности:

    • Каждый объект будет обновляться каждый раз, когда он находится в связанном списке создания
    • Объект не будет удален, если он также находится в связанном списке создания. Чтобы пересоздать его, сначала удалите его из связанного списка создания, затем добавьте снова.

Требования

Пакеты удаленной ОС

Docker и docker-compose-plugin (вы можете установить их вручную или использовать любой ansible плейбук/задачу/роль, например, geerlingguy.docker)

Локальные коллекции Ansible

community.general

ansible-galaxy collection install community.general

community.crypto

ansible-galaxy collection install community.crypto

community.docker

ansible-galaxy collection install community.docker

Не реализовано

  • Для установки:

    • возможность использовать внешнюю базу данных
    • возможность использовать внешний redis
    • возможность использовать внешний сервер syslog
    • возможность использовать внешнее трассирование
    • возможность открыть метрики
    • (и другие вещи, которые не настраиваются через переменные по умолчанию)
  • Для API:

    • Списки разрешенных уязвимостей (CVE)
    • Службы задания
    • Очистка
    • Репликации
    • Роботы
    • Группы пользователей
    • Вебхуки
    • Правила иммутабельных тегов
    • Предварительный разогрев
    • Внешние поставщики аутентификации
    • (и другие вещи, которые не настраиваются через переменные по умолчанию)

Использованные решения

Большое спасибо следующим проектам, которые помогли мне в реализации

robertdebock.harbor

one_mind.harbor_ansible_role

О проекте

Install and configure harbor on your system.

Установить
ansible-galaxy install kolesaev/ansible-role-harbor
Лицензия
mit
Загрузки
103
Владелец