kolesaev.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

# Harborをデプロイする対象ホストのIPアドレスまたは完全修飾ドメイン名を指定します。
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

# トリビを有効にするかどうか
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: []
  # - registry-name

# メンバーリストを削除
harbor_members_to_remove: []
  # - project: project-name
  #   member_id: member-id
  ##################################################
  ##### API経由でメンバーIDを取得できますが #####
  ##### UIを使って削除する方が簡単です    #####
  ##################################################

# プロジェクトリストを削除
harbor_projects_to_remove: []
  # - project-name

# ユーザーリストを削除
harbor_users_to_remove: []
  # - user-name

# プロジェクトリストを作成
harbor_projects: []
  # - name: "project-name"
  #   public: no
  #   auto_scan: false
  #   proxy_registry: registry-name
  #   # タグ保持ポリシー
  #   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: false
  ####################################################
  #####                                          #####
  ##### 保持ルールのマッピング                 #####
  #####                                          #####
  ##### rule_types:                              #####
  #####   pushed_by_count: "latestPushedK"       #####
  #####   pulled_by_count: "latestPulledN"       #####
  #####   pushed_by_days:  "nDaysSinceLastPush"  #####
  #####   pulled_by_days:  "nDaysSinceLastPull"  #####
  #####   always:          "always"              #####
  ##### repositories_mask_types:                 #####
  #####   matching: "repoMatches"                #####
  #####   excluding: "repoExcludes"              #####
  ##### tags_mask_types:                         #####
  #####   matching: "matches"                    #####
  #####   excluding: "excludes"                  #####
  #####                                          #####
  ####################################################

# ユーザーリストを作成
harbor_users: []
  # - name: "user"
  #   email: "[email protected]"
  #   password: "Harbor12345" # パスワードはこのロールを使って一度設定でき、その後更新されません
  #   realname: "user"
  #   comment: "comment"

# プロジェクトメンバーを作成
harbor_members: []
  # - project: "project-name"
  #   name: "user-name"
  #   role_id: 1
  #############################
  ##### ロールID:         #####
  #####                   #####
  ##### プロジェクト管理者 = 1 #####
  ##### 開発者          = 2 #####
  ##### ゲスト          = 3 #####
  ##### メンテイナー    = 4 #####
  ##### 制限付きゲスト  = 5 #####
  #############################

# ミラーリングレジストリを作成
harbor_registries: []
  # - url: "https://hub.docker.com"
  #   insecure: false
  #   name: "Docker Hub"
  #   type: "docker-hub"
  #   auth_type: basic
  #   access_key: name
  #   access_secret: password

# ガーベジコレクタの設定
harbor_gc: {}
  # type: Custom # 空でなければカスタム
  # schedule: 0 0 1 * * *
  # delete_untagged: false
  # workers: 2
  #######################################
  #####                             #####
  ##### デフォルトでは以下になります  #####
  #####                             #####
  ##### type: Custom                #####
  ##### schedule: 0 0 0 * * *       #####
  ##### worker: 1                   #####
  ##### delete_untagged: false      #####
  #####                             #####
  ##### 無効にするにはtypeをNoneに #####
  #####                             #####
  ##### 利用可能なタイプ:            #####
  #####  - None                     #####
  #####  - Weekly                   #####
  #####  - Daily                    #####
  #####  - Hourly                   #####
  #####                             #####
  #######################################

再インストール

このロールはインジケータファイルを作成するため、既にこのロールが使用された後に再度インストールおよび設定されることはありません。Harborを再インストールするには、harborディレクトリ内のinstalled-indicatorファイルを削除するか、harbor_force_install変数にtrueの値を設定することができます。

APIアクションはこのロールを使用するたびに実行され、インジケータファイルが存在しても影響しません。

機能

  • Harborのインストール

  • APIを介した作成/更新/構成:

    • プロジェクト
    • レジストリ
    • ユーザー
    • メンバー
    • 保持ポリシー
    • ガーベジコレクタ
  • API関連機能:

    • 各オブジェクトは関連する作成リストにあるたびに更新されます
    • 関連する作成リストにある場合はオブジェクトを削除しません。再作成するには、最初に関連する作成リストから削除し、再度追加します。

要件

リモートOSパッケージ

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.harbor
ライセンス
mit
ダウンロード
124
所有者