開発者ガイド

この開発者ガイドは、新しい開発者がこのプロジェクトに貢献するためにどのように環境をセットアップすればよいかを説明することを目的としています。

開発者の環境設定

オペレーターを開発するためのシステムをセットアップするには、以下の手順に従ってください:

  1. 環境にGoをインストールします。

    go version
    
  2. ダウンロードoperator-sdk.現在の operator-sdk リリースはプロジェクトリポジトリにあります。

    オペレータSDKのバージョンを確認するには、以下を実行してください、

    operator-sdk version
    

    現在のGitLab Operatorリリースにコードを貢献するには、少なくともoperator SDK v1.0.0が必要です。

  3. 公式のインストール手順に従ってtask をインストールしてください。このプロジェクトではmake](https://gitlab.com/gitlab-org/cloud-native/gitlab-operator/-/blob/master/doc/adr/0016-replace-makefile-with-taskfile.md) の代わりに[task を使用します。

  4. gitlab-operator リポジトリを GOPATH にクローンしてください。

    git clone git@gitlab.com:gitlab-org/cloud-native/gitlab-operator.git
    

プロジェクトの構成

GitLab OperatorはOperator SDK v1.0.0を使用してビルドされ、結果としてKubebuilder v2レイアウトフォーマットを使用しています。プロジェクトディレクトリとOperator SDKによって使用されるツールの一部に変更があったため、これは知っておく必要があります。

$ pwd
gitlab-operator
$ tree -dL 2 .
.
├── api
│   └── v1beta1
├── bundle
│   ├── manifests
│   ├── metadata
│   └── tests
├── config
│   ├── certmanager
│   ├── crd
│   ├── default
│   ├── deploy
│   ├── manager
│   ├── manifests
│   ├── prometheus
│   ├── rbac
│   ├── samples
│   ├── scorecard
|   ├── test
│   └── webhook
├── controllers
│   ├── backup
│   ├── gitlab
│   ├── helpers
│   ├── runner
│   ├── settings
│   ├── testdata
│   └── utils
├── doc
├── hack
│   └── assets
├── helm
│   └── testdata
└── scripts
    └── manifests
  • controllers ディレクトリには、GitLab と GitLab Backup コントローラのコンテナ実装が含まれています。
  • api ディレクトリには、オペレーターが所有する GitLab と GLBackup リソースの API リソース定義が含まれています。API 定義は API バージョンごとにグループ化されています。api/<api_version> 内部の*_types.go ファイルには、OLM によって使用されるカスタムリソース定義とクラスターサービスバージョンファイルを生成するために使用される仕様定義とマーカーが含まれています。
  • config/samples ディレクトリには、GitLab カスタムリソースのマニフェストの例が含まれています。
  • config/test ディレクトリには、インテグレーションテストを実行するために使用されるパラメータ化された GitLab 定義が含まれています。

    以下に例を示します:

    // +kubebuilder:rbac:groups=core,resources=configmaps,verbs=get;list;watch;create;update;patch;delete

    config/rbac/custom の内容は手動で作成されたもので、RBACマーカーの影響を受けません。

    configディレクトリの他のほとんどの内容は自動的に生成されますが、kustomize を使って変更することができます。

  • hack/assets パスには、コンテナイメージのビルド時にオペレータイメージ内部にプッシュする必要のあるリソースが含まれます。リリースファイルはここに置かれます。

追加リソース

タスクファイルは、これらの前提条件のインストールを管理するための便利なコマンドを提供します。リポジトリのルートからtask を実行すると、利用可能なコマンドが表示されます。

オペレーターのデプロイ

オペレータのデプロイについては、インストールドキュメントを参照してください。

デバッグ

controllers/gitlab/template_test.go には、機能開発やテスト作成を支援する機能がいくつか追加されています。

  • dumpTemplate(template)
  • dumpTemplateToFile(template, filename)
  • dumpHelmValues(values)
  • dumpHelmValuesToFile(values, filename)

dumpTemplate() 関数は GitLab アダプターからテンプレートオブジェクトを受け取り、レンダリングされた Helm チャートの YAML を文字列として返します。Go テストフレームワークは標準出力に書き込まれたものをすべて吸収するので、dumpTemplateToFile() は検査用に YAML をファイルに書き込みます。ファイル名だけを指定した場合、ファイルはテストが開始されたディレクトリではなくテストファイルが存在するサブディレクトリに書き出されることに注意してください。テストを開始したディレクトリにファイルを書き込みたい場合は、絶対パスを指定する必要があります。

同様に、dumpHelmValues() Helm の値の YAML 表現を文字列で返します dumpHelmValues()dumpHelmValues() これは、テストの開始時に意図した値が設定されているかどうかを確認するために使用します。この dumpHelmValues()関数は検査のために YAML をファイルに書き出すために使われ、 filename 引数にはdumpTemplateToFile()と同じ制限があります。