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
ansible-galaxy collection install community.general
ansible-galaxy collection install community.crypto
ansible-galaxy collection install community.docker
Не реализовано
Для установки:
- возможность использовать внешнюю базу данных
- возможность использовать внешний redis
- возможность использовать внешний сервер syslog
- возможность использовать внешнее трассирование
- возможность открыть метрики
- (и другие вещи, которые не настраиваются через переменные по умолчанию)
Для API:
- Списки разрешенных уязвимостей (CVE)
- Службы задания
- Очистка
- Репликации
- Роботы
- Группы пользователей
- Вебхуки
- Правила иммутабельных тегов
- Предварительный разогрев
- Внешние поставщики аутентификации
- (и другие вещи, которые не настраиваются через переменные по умолчанию)
Использованные решения
Большое спасибо следующим проектам, которые помогли мне в реализации
ansible-galaxy install kolesaev/ansible-role-harbor