6.2. Open VSX をオンプレミスで実行
OpenShift Dev Spaces および OpenShift 環境と完全に統合されたオンプレミスの Eclipse Open VSX 拡張レジストリーをデプロイおよび設定するには、以下の手順に従います。セキュアな内部 Open VSX インスタンスをセットアップするには、OpenShift Dev Spaces ワークスペースまたは OpenShift CLI (oc) を使用する 2 つのセットアップパスのいずれかを選択します。これには、必要な OpenShift プロジェクトの作成、Open VSX コンポーネントのデプロイ、拡張機能の公開、レジストリーと OpenShift Dev Spaces の統合が含まれます。
6.2.1. OpenShift Dev Spaces インスタンスの使用 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- クラスター管理者としてログインしている。
手順
Open VSX リポジトリーを使用してワークスペースを開始します。
次の Eclipse Open VSX リポジトリー を使用してワークスペースを作成します。
警告.devfile.yaml には、IBM Power (ppc64le) または IBM Z (s390x) アーキテクチャーに対応していない
elasticsearchコンポーネントが含まれています。これらのアーキテクチャーでワークスペースを正常に起動するには、このコンポーネントを devfile から削除するしかありません。または、ワークスペースを起動せずに Open VSX を個別に実行する方法を説明している OpenShift CLI ツールの使用に関する ドキュメントを参照することもできます。ヒント必要なすべてのコマンドを含む環境は、
.devfile.yamlファイルで定義されます。Open VSX 用の新しい OpenShift プロジェクトを作成します。
2.1.Create Namespace for OpenVSXタスクをワークスペースで実行します (Terminal)。クラスター上にRun Task… devfile 2.1.Create Namespace for OpenVSX openvsxという名前の新しいプロジェクトを作成する必要があります。Open VSX をデプロイします。
2.4.1.Deploy Custom OpenVSXタスクをワークスペースで実行します (Terminal)。このタスクは、Open VSX サーバーイメージを提供するように要求します。端末にRun Task… devfile 2.4.1Deploy Custom OpenVSX registry.redhat.io/devspaces/openvsx-rhel9:3.23と入力します。その結果、OpenShift コンソールには、PostgreSQL データベースとOpen VSX サーバーの 2 つのコンポーネントを含むopenvsxプロジェクトが表示されます。さらに、Open VSX UI には、OpenShift クラスターの公開されているルート経由でアクセスできる必要があります。ヒントすべてのデプロイメント情報は、
OVSX_PAT_BASE64などの一部のデフォルト値を持つdeploy/openshift/openvsx-deployment-no-es.ymlファイルで説明されています。PAT を使用する Open VSX ユーザーをデータベースに追加します。
2.5.Add OpenVSX user with PAT to the DBタスクをワークスペースで実行します (Terminal)。このコマンドは、Open VSX ユーザー名とユーザー PAT を要求します。Enter をクリックしてデフォルト値を使用できます。Run Task… devfile 2.5.Add OpenVSX user with PAT to the DB 重要ユーザー PAT は、デプロイメントファイルで指定された
OVSX_PAT_BASE64のデコードされた値と一致する必要があります。OVSX_PAT_BASE64が更新されている場合は、新しいトークンのデコードされた値をユーザー PAT として使用します。内部 Open VSX を使用するように OpenShift Dev Spaces を設定します。
2.6.Configure Che to use the internal Open VSX registryタスクをワークスペースで実行します (Terminal)。Run Task… devfile 2.6。Configure Che to use the internal OpenVSX registry CheClusterカスタムリソースにパッチを適用し、拡張レジストリーに指定された Open VSX URL を使用するように設定を更新します。.vsixファイルから拡張を公開します。最初は、Open VSX レジストリーは拡張機能を提供しません。
openvsx-serverPod が実行され、Ready 状態になると、拡張機能をレジストリーに公開できます。2.8Publish a Visual Studio Code Extension from a VSIX fileコマンドは、.vsixファイルからローカルの Open VSX レジストリーに拡張機能を直接公開します。拡張の名前namespace名と.vsixファイルへのパスを指定するように求められます。エクステンションの一覧を公開します。
2.9.Publish list of Visual Studio Code Extensionsコマンドは、ダウンロード URL に基づいて、Microsoft Visual Studio Code 拡張機能の定義済みリストを内部 Open VSX レジストリーに公開するプロセスを自動化します。ヒントこのコマンドは、公開される各拡張機能の
.vsixファイルの URL をリストするdeploy/openshift/extensions.txtファイルから読み取ります。拡張機能を Open VSX に公開するには、必要に応じてextensions.txtファイルを更新してから、2.9.Publish list of Visual Studio Code Extensions タスクをワークスペースから実行します (Terminal)。Run Task… devfile 2.9.Publish list of Visual Studio Code Extensions OpenShift Dev Spaces が内部 Open VSX を使用していることを確認します。
任意のワークスペースを起動し、ワークスペース IDE の拡張機能ビューで、または OpenVSX OpenShift プロジェクトで
internalルートを開いて、使用可能な拡張機能を確認します。
6.2.2. OpenShift CLI (oc) ツールの使用 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
-
ocツールがインストールされている。 OpenShift Dev Spaces がデプロイされている OpenShift クラスターにクラスター管理者としてログインします。
ヒント$ oc login https://<openshift_dev_spaces_fqdn> --username=<my_user>
手順
Open VSX 用の新しい OpenShift プロジェクトを作成します。
oc new-project openvsx
oc new-project openvsxCopy to Clipboard Copied! Toggle word wrap Toggle overflow Open VSX をデプロイします。
openvsx-deployment-no-es.yml ファイルをファイルシステムに保存し、そのディレクトリーに移動してコマンドを実行して Open VSX をデプロイします。
oc process -f openvsx-deployment-no-es.yml \ -p OPENVSX_SERVER_IMAGE=registry.redhat.io/devspaces/openvsx-rhel9:3.23 \ | oc apply -f -
oc process -f openvsx-deployment-no-es.yml \ -p OPENVSX_SERVER_IMAGE=registry.redhat.io/devspaces/openvsx-rhel9:3.23 \ | oc apply -f -Copy to Clipboard Copied! Toggle word wrap Toggle overflow openvsx名前空間内のすべての Pod が実行中で準備ができていることを確認します。すべての Pod が準備状態になるまでに数分かかる場合があります。以下のコマンドを実行します。oc get pods -n openvsx \ -o jsonpath='{range .items[*]}{@.metadata.name}{"\t"}{@.status.phase}{"\t"}{.status.containerStatuses[*].ready}{"\n"}{end}'oc get pods -n openvsx \ -o jsonpath='{range .items[*]}{@.metadata.name}{"\t"}{@.status.phase}{"\t"}{.status.containerStatuses[*].ready}{"\n"}{end}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow PAT を使用する Open VSX ユーザーをデータベースに追加します。
PostgreSQL Pod を見つけます。
export POSTGRESQL_POD_NAME=$(oc get pods -n openvsx \ -o jsonpath="{.items[*].metadata.name}" | tr ' ' '\n' | grep '^postgresql' | head -n 1)export POSTGRESQL_POD_NAME=$(oc get pods -n openvsx \ -o jsonpath="{.items[*].metadata.name}" | tr ' ' '\n' | grep '^postgresql' | head -n 1)Copy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザー名を OpenVSX データベースに挿入します。
oc exec -n openvsx "$POSTGRESQL_POD_NAME" -- bash -c \ "psql -d openvsx -c \"INSERT INTO user_data (id, login_name, role) VALUES (1001, 'eclipse-che', 'privileged');\""
oc exec -n openvsx "$POSTGRESQL_POD_NAME" -- bash -c \ "psql -d openvsx -c \"INSERT INTO user_data (id, login_name, role) VALUES (1001, 'eclipse-che', 'privileged');\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザー PAT を OpenVSX データベースに挿入します。
oc exec -n openvsx "$POSTGRESQL_POD_NAME" -- bash -c \ "psql -d openvsx -c \"INSERT INTO personal_access_token (id, user_data, value, active, created_timestamp, accessed_timestamp, description) VALUES (1001, 1001, 'eclipse_che_token', true, current_timestamp, current_timestamp, 'extensions publisher');\""
oc exec -n openvsx "$POSTGRESQL_POD_NAME" -- bash -c \ "psql -d openvsx -c \"INSERT INTO personal_access_token (id, user_data, value, active, created_timestamp, accessed_timestamp, description) VALUES (1001, 1001, 'eclipse_che_token', true, current_timestamp, current_timestamp, 'extensions publisher');\""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 内部 Open VSX を使用するように OpenShift Dev Spaces を設定します。
export CHECLUSTER_NAME="$(oc get checluster --all-namespaces -o json | jq -r '.items[0].metadata.name')" && export CHECLUSTER_NAMESPACE="$(oc get checluster --all-namespaces -o json | jq -r '.items[0].metadata.namespace')" && export OPENVSX_ROUTE_URL="$(oc get route internal -n openvsx -o jsonpath='{.spec.host}')" && export PATCH='{"spec":{"components":{"pluginRegistry":{"openVSXURL":"https://'"$OPENVSX_ROUTE_URL"'"}}}}' && oc patch checluster "${CHECLUSTER_NAME}" --type=merge --patch "${PATCH}" -n "${CHECLUSTER_NAMESPACE}"export CHECLUSTER_NAME="$(oc get checluster --all-namespaces -o json | jq -r '.items[0].metadata.name')" && export CHECLUSTER_NAMESPACE="$(oc get checluster --all-namespaces -o json | jq -r '.items[0].metadata.namespace')" && export OPENVSX_ROUTE_URL="$(oc get route internal -n openvsx -o jsonpath='{.spec.host}')" && export PATCH='{"spec":{"components":{"pluginRegistry":{"openVSXURL":"https://'"$OPENVSX_ROUTE_URL"'"}}}}' && oc patch checluster "${CHECLUSTER_NAME}" --type=merge --patch "${PATCH}" -n "${CHECLUSTER_NAMESPACE}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ヒントOpenShift Dev Spaces での Open VSX レジストリー URL の設定に関する詳細な手順は、「Open VSX レジストリー URL」 を参照してください。
ovsxコマンドで Visual Studio Code 拡張機能を公開します。注記最初は、Open VSX レジストリーは拡張機能を提供しません。
すべての設定が完了したら、次のステップとして openvsx-server コンテナー内から Visual Studio Code 拡張機能を公開します。これを行うには、拡張機能の
namespace名 (公開に使用) と .vsix 拡張機能パッケージのダウンロード URL の 2 つの情報が必要です。この情報を取得したら、次のコマンドを実行してエクステンションを公開します。Open VSX サーバーを実行している Pod の名前を取得します。
export OVSX_POD_NAME=$(oc get pods -n openvsx -o jsonpath="{.items[*].metadata.name}" | tr ' ' '\n' | grep ^openvsx-server)export OVSX_POD_NAME=$(oc get pods -n openvsx -o jsonpath="{.items[*].metadata.name}" | tr ' ' '\n' | grep ^openvsx-server)Copy to Clipboard Copied! Toggle word wrap Toggle overflow .vsix 拡張機能をダウンロードします。
oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "wget -O /tmp/extension.vsix EXTENSION_DOWNLOAD_URL "oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "wget -O /tmp/extension.vsix EXTENSION_DOWNLOAD_URL "Copy to Clipboard Copied! Toggle word wrap Toggle overflow 拡張機能 namespace を作成します。
oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "ovsx create-namespace EXTENSION_NAMESPACE_NAME" || trueoc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "ovsx create-namespace EXTENSION_NAMESPACE_NAME" || trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 拡張機能を公開します。
oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "ovsx publish /tmp/extension.vsix"oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "ovsx publish /tmp/extension.vsix"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ダウンロードした拡張機能ファイルを削除します。
oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "rm /tmp/extension.vsix"oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "rm /tmp/extension.vsix"Copy to Clipboard Copied! Toggle word wrap Toggle overflow ヒント例:
redhat.vscode-yaml拡張機能バージョン 1.18.0 を公開します。oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "wget -O /tmp/extension.vsix https://open-vsx.org/api/redhat/vscode-yaml/1.18.0/file/redhat.vscode-yaml-1.18.0.vsix " && oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "ovsx create-namespace redhat" || true && oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "ovsx publish /tmp/extension.vsix" && oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "rm /tmp/extension.vsix"oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "wget -O /tmp/extension.vsix https://open-vsx.org/api/redhat/vscode-yaml/1.18.0/file/redhat.vscode-yaml-1.18.0.vsix " && oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "ovsx create-namespace redhat" || true && oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "ovsx publish /tmp/extension.vsix" && oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "rm /tmp/extension.vsix"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Open VSX 拡張機能レジストリーを確認します。
OPENVSX_ROUTE_URL 環境変数で定義されている URL に移動して、公開されている拡張機能のリストを確認します。
6.2.3. Open VSX サービスへの内部アクセスの設定 リンクのコピーリンクがクリップボードにコピーされました!
パブリックルートを使用して Open VSX レジストリーを参照するだけでなく、OpenShift Dev Spaces を設定して内部クラスターサービスルーティングを設定することもできます。この方法では、トラフィックをクラスター内に限定して公開を回避することで、セキュリティーが強化されます。
手順
内部サービスルーティングの手順:
パブリックルートを削除します。
外部アクセスを制限するには、Open VSX レジストリーに関連付けられたパブリックルートを削除します。
oc delete route internal -n openvsx
oc delete route internal -n openvsxCopy to Clipboard Copied! Toggle word wrap Toggle overflow 内部 Open VSX サービス URL を設定します。
内部クラスターサービス DNS を使用するように CheCluster カスタムリソースを更新します。
export CHECLUSTER_NAME="$(oc get checluster --all-namespaces -o json | jq -r '.items[0].metadata.name')" && export CHECLUSTER_NAMESPACE="$(oc get checluster --all-namespaces -o json | jq -r '.items[0].metadata.namespace')" && export PATCH='{"spec":{"components":{"pluginRegistry":{"openVSXURL":"http://openvsx-server.openvsx.svc:8080"}}}}' && oc patch checluster "${CHECLUSTER_NAME}" --type=merge --patch "${PATCH}" -n "${CHECLUSTER_NAMESPACE}"export CHECLUSTER_NAME="$(oc get checluster --all-namespaces -o json | jq -r '.items[0].metadata.name')" && export CHECLUSTER_NAMESPACE="$(oc get checluster --all-namespaces -o json | jq -r '.items[0].metadata.namespace')" && export PATCH='{"spec":{"components":{"pluginRegistry":{"openVSXURL":"http://openvsx-server.openvsx.svc:8080"}}}}' && oc patch checluster "${CHECLUSTER_NAME}" --type=merge --patch "${PATCH}" -n "${CHECLUSTER_NAMESPACE}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow