Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2b17088fae | ||
|
|
13cb27a5ec |
@@ -3,11 +3,17 @@
|
||||
# secret-manager 用のチャート公開ワークフロー。
|
||||
#
|
||||
# 他リポジトリの「毎 push で無条件公開」する共通版とは異なり、この版は
|
||||
# 「Chart.yaml の version が Package Registry に未公開のときだけリリースする」。
|
||||
# 既に同じバージョンが公開済みなら何もしない(README や examples だけの
|
||||
# 変更で push してもリリースは発生しない)。
|
||||
# 3 つのリリース成果物を **それぞれ独立に冪等チェック** する:
|
||||
#
|
||||
# リリース = Package Registry への発行 + Git タグ + Gitea リリース(tgz 添付)。
|
||||
# 1. Package Registry ... `Chart.yaml` の version が未登録なら発行
|
||||
# 2. Git タグ v<version> ... リモートに無ければ作成して push
|
||||
# 3. Gitea リリース ... 同名リリースが無ければ作成(tgz 添付)
|
||||
#
|
||||
# 独立チェックにしている理由: いずれかのステップだけ失敗しても、次の push で
|
||||
# 不足分だけが再実行されて自己修復する(例: registry 発行は成功したがタグ
|
||||
# push が権限エラーで失敗 → 次回 push でタグだけ作成される)。
|
||||
# どれも不要なら全ステップが no-op(README や examples だけの変更で発火しても
|
||||
# リリースは発生しない)。
|
||||
# -------------------------------------------------------------------------
|
||||
name: Helm Chart Release
|
||||
|
||||
@@ -60,31 +66,42 @@ jobs:
|
||||
- name: Validate chart
|
||||
run: helm lint --strict .
|
||||
|
||||
- name: Check whether this version is already released
|
||||
- name: Decide what is missing (registry / tag / release)
|
||||
id: check
|
||||
env:
|
||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||
run: |
|
||||
set -e
|
||||
NAME="${{ steps.info.outputs.name }}"
|
||||
VERSION="${{ steps.info.outputs.version }}"
|
||||
TAG="v${VERSION}"
|
||||
|
||||
# --- 1. Package Registry ---
|
||||
helm repo add cafepieters "${REGISTRY_URL}/api/packages/${OWNER}/helm" \
|
||||
--username "${{ secrets.REGISTRY_USER }}" \
|
||||
--password "${{ secrets.REGISTRY_TOKEN }}" >/dev/null 2>&1 || true
|
||||
helm repo update cafepieters >/dev/null 2>&1 || true
|
||||
|
||||
FOUND=$(helm search repo "cafepieters/${NAME}" --version "${VERSION}" --output json 2>/dev/null | jq 'length' 2>/dev/null || echo 0)
|
||||
echo "Registry entries for ${NAME} ${VERSION}: ${FOUND}"
|
||||
if [ "${FOUND:-0}" -gt 0 ]; then REG=false; else REG=true; fi
|
||||
|
||||
if [ "${FOUND:-0}" -gt 0 ]; then
|
||||
echo "release_needed=false" >> $GITHUB_OUTPUT
|
||||
echo "✅ v${VERSION} は既にリリース済み。処理をスキップします。"
|
||||
else
|
||||
echo "release_needed=true" >> $GITHUB_OUTPUT
|
||||
echo "🆕 v${VERSION} は未リリース。リリースを実行します。"
|
||||
fi
|
||||
# --- 2. Git タグ(リモート基準)---
|
||||
if [ -n "$(git ls-remote --tags origin "refs/tags/${TAG}" 2>/dev/null)" ]; then TAG_NEEDED=false; else TAG_NEEDED=true; fi
|
||||
|
||||
# --- 3. Gitea リリース ---
|
||||
REL_ID=$(curl -s -H "Authorization: token ${GITEA_TOKEN}" \
|
||||
"${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases/tags/${TAG}" | jq -r '.id // empty')
|
||||
if [ -n "${REL_ID}" ]; then REL=false; else REL=true; fi
|
||||
|
||||
if [ "$REG" = "true" ] || [ "$TAG_NEEDED" = "true" ] || [ "$REL" = "true" ]; then ANY=true; else ANY=false; fi
|
||||
|
||||
echo "registry_needed=${REG}" >> $GITHUB_OUTPUT
|
||||
echo "tag_needed=${TAG_NEEDED}" >> $GITHUB_OUTPUT
|
||||
echo "release_needed=${REL}" >> $GITHUB_OUTPUT
|
||||
echo "any_needed=${ANY}" >> $GITHUB_OUTPUT
|
||||
echo "registry=${REG} / tag=${TAG_NEEDED} / release=${REL} (${NAME} ${TAG})"
|
||||
|
||||
- name: Package chart
|
||||
if: steps.check.outputs.release_needed == 'true'
|
||||
if: steps.check.outputs.any_needed == 'true'
|
||||
run: |
|
||||
set -e
|
||||
helm package .
|
||||
@@ -92,8 +109,19 @@ jobs:
|
||||
echo "CHART_FILE=${CHART_FILE}" >> $GITHUB_ENV
|
||||
echo "Packaged: ${CHART_FILE}"
|
||||
|
||||
- name: Create Git tag
|
||||
if: steps.check.outputs.tag_needed == 'true'
|
||||
run: |
|
||||
set -e
|
||||
VERSION="${{ steps.info.outputs.version }}"
|
||||
git config user.name "Claude"
|
||||
git config user.email "claude@cafepieters.com"
|
||||
git tag -a "v${VERSION}" -m "Release ${VERSION}" || true
|
||||
git push origin "v${VERSION}"
|
||||
echo "Git tag v${VERSION} pushed"
|
||||
|
||||
- name: Publish to Gitea Package Registry
|
||||
if: steps.check.outputs.release_needed == 'true'
|
||||
if: steps.check.outputs.registry_needed == 'true'
|
||||
run: |
|
||||
set -e
|
||||
curl --fail-with-body \
|
||||
@@ -103,21 +131,6 @@ jobs:
|
||||
"${REGISTRY_URL}/api/packages/${OWNER}/helm/api/charts"
|
||||
echo "✅ Published ${CHART_FILE} to Package Registry"
|
||||
|
||||
- name: Create Git tag
|
||||
if: steps.check.outputs.release_needed == 'true'
|
||||
run: |
|
||||
set -e
|
||||
VERSION="${{ steps.info.outputs.version }}"
|
||||
git config user.name "Claude"
|
||||
git config user.email "claude@cafepieters.com"
|
||||
if git rev-parse "v${VERSION}" >/dev/null 2>&1; then
|
||||
echo "Tag v${VERSION} already exists, skipping"
|
||||
else
|
||||
git tag -a "v${VERSION}" -m "Release ${VERSION}"
|
||||
git push origin "v${VERSION}"
|
||||
echo "Git tag v${VERSION} created"
|
||||
fi
|
||||
|
||||
- name: Create Gitea Release
|
||||
if: steps.check.outputs.release_needed == 'true'
|
||||
env:
|
||||
@@ -128,18 +141,17 @@ jobs:
|
||||
NAME="${{ steps.info.outputs.name }}"
|
||||
PACKAGE_FILE="${NAME}-${VERSION}.tgz"
|
||||
|
||||
EXISTING=$(curl -s -H "Authorization: token ${GITEA_TOKEN}" \
|
||||
"${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases/tags/v${VERSION}" | jq -r '.id // empty')
|
||||
|
||||
if [ -n "${EXISTING}" ]; then
|
||||
echo "Release v${VERSION} already exists (id=${EXISTING}), skipping"
|
||||
else
|
||||
RELEASE_ID=$(curl -s -X POST \
|
||||
-H "Authorization: token ${GITEA_TOKEN}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"tag_name\":\"v${VERSION}\",\"name\":\"v${VERSION}\",\"body\":\"secret-manager Helm Chart v${VERSION}\"}" \
|
||||
"${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases" | jq -r '.id')
|
||||
|
||||
if [ -z "${RELEASE_ID}" ] || [ "${RELEASE_ID}" = "null" ]; then
|
||||
echo "❌ リリース作成に失敗しました" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
curl -s -X POST \
|
||||
-H "Authorization: token ${GITEA_TOKEN}" \
|
||||
-H "Content-Type: application/gzip" \
|
||||
@@ -147,18 +159,16 @@ jobs:
|
||||
"${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=${PACKAGE_FILE}"
|
||||
|
||||
echo "Gitea release v${VERSION} created with asset ${PACKAGE_FILE}"
|
||||
fi
|
||||
|
||||
- name: Summary
|
||||
run: |
|
||||
if [ "${{ steps.check.outputs.release_needed }}" = "true" ]; then
|
||||
echo "================================"
|
||||
echo "✅ Released secret-manager v${{ steps.info.outputs.version }}"
|
||||
echo "================================"
|
||||
echo "helm repo add cafepieters ${REGISTRY_URL}/api/packages/${OWNER}/helm"
|
||||
echo "helm repo update"
|
||||
echo "helm upgrade --install secrets cafepieters/secret-manager"
|
||||
REG="${{ steps.check.outputs.registry_needed }}"
|
||||
TAG="${{ steps.check.outputs.tag_needed }}"
|
||||
REL="${{ steps.check.outputs.release_needed }}"
|
||||
V="${{ steps.info.outputs.version }}"
|
||||
if [ "$REG" = "true" ] || [ "$TAG" = "true" ] || [ "$REL" = "true" ]; then
|
||||
echo "✅ secret-manager v${V} — registry:${REG} tag:${TAG} release:${REL} を処理しました"
|
||||
else
|
||||
echo "ℹ️ No release: v${{ steps.info.outputs.version }} is already published."
|
||||
echo " バージョンを上げたい場合は Chart.yaml の version / appVersion を更新して push してください。"
|
||||
echo "ℹ️ v${V} は registry / タグ / リリース すべて揃っています。処理なし。"
|
||||
echo " 新バージョンを出すには Chart.yaml の version / appVersion を上げて push。"
|
||||
fi
|
||||
|
||||
@@ -61,6 +61,54 @@
|
||||
|
||||
## チャート改修履歴
|
||||
|
||||
### renderMsmtprc を既定 true 化 + SMTP メタ項目の拡充(2026-09-08, v0.1.2)
|
||||
|
||||
**症状**: phpfpm 側で `smtp.existingMsmtprcSecret: cred-<名前>` を指定したら
|
||||
`MountVolume.SetUp failed ... references non-existent secret key: msmtprc`。
|
||||
配布された `cred-*` Secret に `msmtprc` キーが無かった。
|
||||
|
||||
**原因**: `mail.providers.<名前>.renderMsmtprc` が opt-in(既定で出力しない)で、
|
||||
`values.yaml` 上もコメント例にしか無かったため、指定を忘れると `msmtprc` キーが
|
||||
生成されない。`mail` カテゴリは「完成済み msmtprc も含めて一元管理する」のが目的なので
|
||||
opt-out にすべきだった。
|
||||
|
||||
**修正内容**(`templates/mail-secrets.yaml`):
|
||||
- `renderMsmtprc` を既定 `true` に(`hasKey` で明示 `false` のときだけ抑止)。
|
||||
- `smtp.tlsVerify`(既定 `true`)を追加。`false` で `msmtprc` に `tls_certcheck off` を挿入。
|
||||
`values.schema.json` の `smtp`(`additionalProperties: false`)にも `tlsVerify` を追加。
|
||||
- 派生キーを Secret に追加: `SMTP_TLS`(starttls か)/ `SMTP_SSL`(暗黙TLSか)/
|
||||
`SMTP_TLS_VERIFY` / `SMTP_AUTH`(username 有無)。すべて `"true"`/`"false"` の文字列。
|
||||
`smtp.env` にもこれらが入る(msmtprc 生成より前に env を組み立てているため)。
|
||||
- `values.yaml` のキー一覧コメント / プロバイダ例、`examples/mail-providers.values.yaml`
|
||||
(`tlsVerify: false` の社内リレー例を追加)、README を更新。
|
||||
|
||||
**対象ファイル**: `templates/mail-secrets.yaml`, `values.schema.json`, `values.yaml`,
|
||||
`examples/mail-providers.values.yaml`, `Chart.yaml`, `README.md`, `CLAUDE.md`
|
||||
|
||||
### helm-release.yaml のリリース判定を3系統に分離 + v0.1.0 タグ補完(2026-09-08)
|
||||
|
||||
**症状**: Git タグ `v0.1.0` がリモートに存在しなかった(Registry には
|
||||
`secret-manager-0.1.0.tgz` は発行済み)。
|
||||
|
||||
**原因**: 初回リリース(run #1 / `f374cd2`)時点の `helm-release.yaml` は
|
||||
共通版のコピー(タグ作成ステップ無し)だった。タグ作成ステップを持つ現行版に
|
||||
差し替えたのは run #2 だが、その時点で `0.1.0` は既に Registry 登録済みのため
|
||||
`release_needed=false` となり、タグ作成を含む全ステップがスキップされていた。
|
||||
= 「Registry 発行済み」と「タグ/リリース作成」が同一フラグに束ねられており、
|
||||
一方だけ欠けた状態を回復できない構造だった。
|
||||
|
||||
**修正内容**:
|
||||
- `helm-release.yaml` の判定を `registry_needed` / `tag_needed` / `release_needed`
|
||||
の3独立フラグに分離。各成果物を個別に冪等チェックし、不足分だけを作る。
|
||||
途中のステップだけ失敗しても次の push で自己修復する。
|
||||
- タグ有無は `git ls-remote --tags` でリモート基準に確認。
|
||||
- 欠けていた `v0.1.0` タグを `f374cd2`(Registry の 0.1.0 tgz と同じツリー)に
|
||||
対して手動で作成・push(過去分の履歴補完。Gitea リリースは 0.1.0 が既知不具合
|
||||
バージョンのため作らない)。
|
||||
|
||||
**対象ファイル**: `.gitea/workflows/helm-release.yaml`, `README.md`, `CLAUDE.md`
|
||||
(+ リモートタグ `v0.1.0` を追加)
|
||||
|
||||
### values.schema.json の $schema 行を削除(2026-09-08, v0.1.1)
|
||||
|
||||
**症状**: 一部のデプロイ環境(新しめの JSON Schema バリデータを内蔵する Helm / Argo CD /
|
||||
|
||||
+2
-2
@@ -4,8 +4,8 @@ description: >-
|
||||
クラスター横断で使う認証情報(外部メールのSMTP/IMAP設定・APIキー・汎用資格情報)を
|
||||
一元管理し、複数ネームスペースへ同一Secretとして配布するHelmチャート。
|
||||
type: application
|
||||
version: 0.1.1
|
||||
appVersion: "0.1.1"
|
||||
version: 0.1.2
|
||||
appVersion: "0.1.2"
|
||||
keywords:
|
||||
- secrets
|
||||
- credentials
|
||||
|
||||
@@ -152,9 +152,10 @@ SMTP/IMAP/POP3 のサーバ情報も一元管理** できます。
|
||||
| `smtp.fromName` | `string` | | 送信者表示名。 |
|
||||
| `smtp.replyTo` | `string` | | Reply-To アドレス。 |
|
||||
| `smtp.authMethod` | `string` | | `plain`(既定) / `login` / `cram-md5`。 |
|
||||
| `smtp.tlsVerify` | `bool` | | 既定 `true`。`false` で TLS 証明書検証を無効化(社内リレー・自己署名向け。生成される `msmtprc` に `tls_certcheck off` が入る)。 |
|
||||
| `imap.host` ほか | | | 受信 (IMAP) 情報。`host` があれば `IMAP_*` キーを追加。`username`/`password` 省略時は SMTP の値を流用。既定ポート `993`。 |
|
||||
| `pop3.host` ほか | | | 受信 (POP3) 情報。同上。既定ポート `995`。 |
|
||||
| `renderMsmtprc` | `bool` | | `true` で Secret に `msmtprc`(msmtp / PHP sendmail 用設定)を含める。 |
|
||||
| `renderMsmtprc` | `bool` | | **既定 `true`**。Secret に完成済み `msmtprc`(msmtp / PHP sendmail 用)を含める。IMAP だけ使う等で不要なら `false`。 |
|
||||
| `namespacesOverride` | `[]string` | | このエントリだけ別のネームスペースへ配布する。 |
|
||||
| `annotations` | `map` | | このエントリの Secret だけに付ける追加アノテーション。 |
|
||||
|
||||
@@ -192,8 +193,12 @@ SMTP/IMAP/POP3 のサーバ情報も一元管理** できます。
|
||||
SMTP_HOST=smtp.gmail.com
|
||||
SMTP_PORT=587
|
||||
SMTP_SECURITY=starttls
|
||||
SMTP_TLS=true # security=starttls のとき true(派生フラグ)
|
||||
SMTP_SSL=false # security=tls(暗黙TLS)のとき true
|
||||
SMTP_TLS_VERIFY=true # smtp.tlsVerify の値
|
||||
SMTP_USERNAME=no-reply@example.com
|
||||
SMTP_PASSWORD=********
|
||||
SMTP_AUTH=true # username があれば true
|
||||
SMTP_FROM=no-reply@example.com
|
||||
SMTP_FROM_NAME=Example
|
||||
SMTP_REPLY_TO=
|
||||
@@ -203,11 +208,10 @@ IMAP_PORT=993
|
||||
IMAP_SECURITY=tls
|
||||
IMAP_USERNAME=no-reply@example.com
|
||||
IMAP_PASSWORD=********
|
||||
smtp.env # ↓ source して使える env ファイル
|
||||
smtp.env # ↑ 全キーを `export KEY="value"` にした source 可能なファイル
|
||||
export SMTP_HOST="smtp.gmail.com"
|
||||
export SMTP_PORT="587"
|
||||
...
|
||||
msmtprc # renderMsmtprc: true のとき。msmtp / PHP sendmail 用
|
||||
msmtprc # 完成済み msmtp 設定(既定で常に含む。renderMsmtprc: false で抑止)
|
||||
```
|
||||
|
||||
### api / generic エントリ
|
||||
@@ -312,10 +316,16 @@ Secret 更新時に自動でローリング再起動されます。
|
||||
|
||||
`.gitea/workflows/helm-release.yaml` の 1 本のみ。`main` への push(`Chart.yaml` /
|
||||
`values.yaml` / `values.schema.json` / `templates/**` 変更時)と手動実行で発火し、
|
||||
`helm lint --strict` → **現在の `version` が Package Registry に未公開のときだけ**
|
||||
リリースする(公開済みなら何もしない。README・examples だけの変更ではリリースされない)。
|
||||
リリース内容は **Package Registry への発行 + Git タグ `v<version>` + Gitea リリース
|
||||
(`.tgz` 添付)**。
|
||||
`helm lint --strict` のあと、次の 3 つの成果物を **それぞれ独立に冪等チェック**して、
|
||||
不足しているものだけを作る:
|
||||
|
||||
1. **Package Registry** — `Chart.yaml` の `version` が未登録なら `.tgz` を発行
|
||||
2. **Git タグ `v<version>`** — リモートに無ければ作成して push
|
||||
3. **Gitea リリース** — 同名リリースが無ければ作成(`.tgz` 添付)
|
||||
|
||||
3 つすべて揃っていれば何もしない(README・examples だけの変更ではリリースされない)。
|
||||
独立チェックなので、いずれかのステップだけ失敗しても次の push で不足分だけが
|
||||
再実行されて自己修復する。
|
||||
|
||||
> **上流イメージの週次自動追従は行わない** — 他チャート(phpfpm・n8n 等)は
|
||||
> `image-update-and-release.yaml` で Docker Hub の最新イメージを毎週チェックしバージョンを
|
||||
@@ -345,6 +355,16 @@ Secret 更新時に自動でローリング再起動されます。
|
||||
|
||||
各リリースの詳細は `CLAUDE.md` の「チャート改修履歴」を参照。
|
||||
|
||||
### v0.1.2(2026-09-08)
|
||||
|
||||
- **`renderMsmtprc` の既定を `true` に変更**。`mail.providers.<名前>` を定義すれば
|
||||
`msmtprc` キーが常に生成されるようになった(従来は明示 `true` が必要で、忘れると
|
||||
phpfpm 等の `smtp.existingMsmtprcSecret` が `references non-existent secret key: msmtprc`
|
||||
でマウント失敗した)。不要なら `renderMsmtprc: false`。
|
||||
- `smtp.tlsVerify`(既定 `true`)を追加。`false` で `msmtprc` に `tls_certcheck off` を出力。
|
||||
- 派生キー `SMTP_TLS` / `SMTP_SSL` / `SMTP_TLS_VERIFY` / `SMTP_AUTH` を Secret に追加
|
||||
(フレームワーク側が 3 値 enum を解釈しなくて済むよう真偽値文字列で提供)。
|
||||
|
||||
### v0.1.1(2026-09-08)
|
||||
|
||||
- `values.schema.json` の `$schema` 行を削除。新しめの JSON Schema バリデータを内蔵する
|
||||
|
||||
@@ -41,7 +41,7 @@ mail:
|
||||
host: "imap.gmail.com"
|
||||
port: 993
|
||||
security: "tls"
|
||||
renderMsmtprc: true
|
||||
renderMsmtprc: true # 既定値なので本来は省略可
|
||||
|
||||
# ---- Microsoft 365 / Exchange Online ---------------------------------
|
||||
m365:
|
||||
@@ -58,7 +58,7 @@ mail:
|
||||
host: "outlook.office365.com"
|
||||
port: 993
|
||||
security: "tls"
|
||||
renderMsmtprc: true
|
||||
renderMsmtprc: true # 既定値なので本来は省略可
|
||||
|
||||
# ---- SendGrid -------------------------------------------------------
|
||||
# username は固定文字列 "apikey"、password が API キー本体。
|
||||
@@ -73,7 +73,7 @@ mail:
|
||||
from: "no-reply@your-domain.com"
|
||||
fromName: "Your Service"
|
||||
authMethod: "plain"
|
||||
renderMsmtprc: true
|
||||
renderMsmtprc: true # 既定値なので本来は省略可
|
||||
|
||||
# ---- Amazon SES ---------------------------------------------------
|
||||
# SES SMTP 認証情報(IAM のアクセスキーとは別物)を使う。リージョンをホスト名に反映。
|
||||
@@ -87,7 +87,7 @@ mail:
|
||||
password: "REPLACE_VIA_--set"
|
||||
from: "no-reply@your-domain.com"
|
||||
authMethod: "login"
|
||||
renderMsmtprc: true
|
||||
renderMsmtprc: true # 既定値なので本来は省略可
|
||||
|
||||
# ---- Mailgun -----------------------------------------------------
|
||||
mailgun:
|
||||
@@ -100,7 +100,7 @@ mail:
|
||||
password: "REPLACE_VIA_--set"
|
||||
from: "no-reply@your-domain.com"
|
||||
authMethod: "plain"
|
||||
renderMsmtprc: true
|
||||
renderMsmtprc: true # 既定値なので本来は省略可
|
||||
|
||||
# ---- 汎用 / 社内 SMTP リレー(認証なし・TLSなし)--------------------
|
||||
internal-relay:
|
||||
@@ -110,4 +110,15 @@ mail:
|
||||
port: 25
|
||||
security: "none"
|
||||
from: "no-reply@your-domain.com"
|
||||
renderMsmtprc: true
|
||||
|
||||
# ---- 社内 SMTP(自己署名証明書。STARTTLS だが証明書検証はしない)------
|
||||
internal-tls-relay:
|
||||
enabled: false
|
||||
smtp:
|
||||
host: "mail.internal.example"
|
||||
port: 587
|
||||
security: "starttls"
|
||||
username: "app"
|
||||
password: "REPLACE_VIA_--set"
|
||||
from: "no-reply@your-domain.com"
|
||||
tlsVerify: false # 自己署名のため証明書検証を無効化(msmtprc に tls_certcheck off)
|
||||
|
||||
@@ -13,12 +13,22 @@ mail.providers.<name> ごとに 1 つの Secret を生成し、配布先ネー
|
||||
{{- $username := $smtp.username | default "" }}
|
||||
{{- $password := $smtp.password | default "" }}
|
||||
{{- $from := $smtp.from | default $username }}
|
||||
{{- /* tlsVerify は既定 true。明示 false で証明書検証を無効化(社内リレー等) */ -}}
|
||||
{{- $tlsVerify := true }}
|
||||
{{- if hasKey $smtp "tlsVerify" }}{{- $tlsVerify = $smtp.tlsVerify }}{{- end }}
|
||||
{{- /* renderMsmtprc は既定 true。明示 false で msmtprc キーを出力しない */ -}}
|
||||
{{- $renderMsmtprc := true }}
|
||||
{{- if hasKey $p "renderMsmtprc" }}{{- $renderMsmtprc = $p.renderMsmtprc }}{{- end }}
|
||||
{{- $sd := dict }}
|
||||
{{- $_ := set $sd "SMTP_HOST" (printf "%v" $smtp.host) }}
|
||||
{{- $_ := set $sd "SMTP_PORT" (printf "%v" ($smtp.port | default 587)) }}
|
||||
{{- $_ := set $sd "SMTP_SECURITY" (printf "%v" $security) }}
|
||||
{{- $_ := set $sd "SMTP_TLS" (ternary "true" "false" (eq $security "starttls")) }}
|
||||
{{- $_ := set $sd "SMTP_SSL" (ternary "true" "false" (eq $security "tls")) }}
|
||||
{{- $_ := set $sd "SMTP_TLS_VERIFY" (ternary "true" "false" $tlsVerify) }}
|
||||
{{- $_ := set $sd "SMTP_USERNAME" (printf "%v" $username) }}
|
||||
{{- $_ := set $sd "SMTP_PASSWORD" (printf "%v" $password) }}
|
||||
{{- $_ := set $sd "SMTP_AUTH" (ternary "true" "false" (ne $username "")) }}
|
||||
{{- $_ := set $sd "SMTP_FROM" (printf "%v" $from) }}
|
||||
{{- $_ := set $sd "SMTP_FROM_NAME" (printf "%v" ($smtp.fromName | default "")) }}
|
||||
{{- $_ := set $sd "SMTP_REPLY_TO" (printf "%v" ($smtp.replyTo | default "")) }}
|
||||
@@ -41,21 +51,25 @@ mail.providers.<name> ごとに 1 つの Secret を生成し、配布先ネー
|
||||
{{- $_ := set $sd "POP3_USERNAME" (printf "%v" ($pop3.username | default $username)) }}
|
||||
{{- $_ := set $sd "POP3_PASSWORD" (printf "%v" ($pop3.password | default $password)) }}
|
||||
{{- end }}
|
||||
{{- /* source 可能な env ファイル */ -}}
|
||||
{{- /* source 可能な env ファイル(msmtprc 追加より前に生成する) */ -}}
|
||||
{{- $lines := list }}
|
||||
{{- range $k, $v := $sd }}
|
||||
{{- $lines = append $lines (printf "export %s=%s" $k (quote $v)) }}
|
||||
{{- end }}
|
||||
{{- $_ := set $sd "smtp.env" (printf "%s\n" (join "\n" (sortAlpha $lines))) }}
|
||||
{{- /* msmtprc スニペット(任意) */ -}}
|
||||
{{- if $p.renderMsmtprc }}
|
||||
{{- /* msmtprc スニペット(既定で含む。renderMsmtprc: false で抑止) */ -}}
|
||||
{{- if $renderMsmtprc }}
|
||||
{{- $tls := "tls on" }}
|
||||
{{- $starttls := "tls_starttls on" }}
|
||||
{{- if eq $security "tls" }}{{- $starttls = "tls_starttls off" }}{{- end }}
|
||||
{{- if eq $security "none" }}{{- $tls = "tls off" }}{{- $starttls = "tls_starttls off" }}{{- end }}
|
||||
{{- $certcheck := "" }}
|
||||
{{- if not $tlsVerify }}{{- $certcheck = "tls_certcheck off\n" }}{{- end }}
|
||||
{{- $auth := "auth off" }}
|
||||
{{- if $username }}{{- $auth = printf "auth on\nuser %s\npassword %s" $username $password }}{{- end }}
|
||||
{{- $msmtprc := printf "# secret-manager が生成 (%s)\ndefaults\n%s\n%s\ntls_trust_file /etc/ssl/certs/ca-certificates.crt\nlogfile -\naccount default\nhost %s\nport %v\nfrom %s\n%s\n" $name $tls $starttls $smtp.host ($smtp.port | default 587) $from $auth }}
|
||||
{{- $fromLine := "" }}
|
||||
{{- if $from }}{{- $fromLine = printf "from %s\n" $from }}{{- end }}
|
||||
{{- $msmtprc := printf "# secret-manager が生成 (%s)\ndefaults\n%s\n%s\n%stls_trust_file /etc/ssl/certs/ca-certificates.crt\nlogfile -\naccount default\nhost %s\nport %v\n%s%s\n" $name $tls $starttls $certcheck $smtp.host ($smtp.port | default 587) $fromLine $auth }}
|
||||
{{- $_ := set $sd "msmtprc" $msmtprc }}
|
||||
{{- end }}
|
||||
{{- include "secret-manager.secret" (dict "ctx" $ "name" $name "stringData" $sd "type" "Opaque" "annotations" ($p.annotations | default dict) "namespacesOverride" ($p.namespacesOverride | default list)) }}
|
||||
|
||||
+2
-1
@@ -74,7 +74,8 @@
|
||||
"from": { "type": "string" },
|
||||
"fromName": { "type": "string" },
|
||||
"replyTo": { "type": "string" },
|
||||
"authMethod": { "type": "string", "enum": ["plain", "login", "cram-md5"] }
|
||||
"authMethod": { "type": "string", "enum": ["plain", "login", "cram-md5"] },
|
||||
"tlsVerify": { "type": "boolean" }
|
||||
}
|
||||
},
|
||||
"imap": {
|
||||
|
||||
+12
-4
@@ -65,20 +65,28 @@ common:
|
||||
# mail: 外部メールの接続情報(パスワード + サーバ情報)
|
||||
# --------------------------------------------------------------------------
|
||||
# providers.<キー> ごとに 1 つの Secret を生成する。Secret には以下が入る:
|
||||
# 個別キー:
|
||||
# SMTP_HOST / SMTP_PORT / SMTP_SECURITY / SMTP_USERNAME / SMTP_PASSWORD
|
||||
# 個別キー(送信 SMTP):
|
||||
# SMTP_HOST / SMTP_PORT / SMTP_SECURITY (none|starttls|tls)
|
||||
# SMTP_TLS ... "true" if starttls (フレームワーク互換の派生フラグ)
|
||||
# SMTP_SSL ... "true" if 暗黙TLS(tls) (同上)
|
||||
# SMTP_TLS_VERIFY ... 証明書検証 "true"/"false"
|
||||
# SMTP_USERNAME / SMTP_PASSWORD / SMTP_AUTH ("true" if username あり)
|
||||
# SMTP_FROM / SMTP_FROM_NAME / SMTP_REPLY_TO / SMTP_AUTH_METHOD
|
||||
# 個別キー(受信・任意):
|
||||
# IMAP_HOST / IMAP_PORT / IMAP_SECURITY / IMAP_USERNAME / IMAP_PASSWORD (imap 定義時)
|
||||
# POP3_HOST / POP3_PORT / POP3_SECURITY / POP3_USERNAME / POP3_PASSWORD (pop3 定義時)
|
||||
# まとめ:
|
||||
# smtp.env ... `export KEY=VALUE` 形式。コンテナ内で `source` して利用可能
|
||||
# msmtprc ... msmtp / PHP sendmail 用設定(renderMsmtprc: true のとき)
|
||||
# msmtprc ... msmtp / PHP sendmail 用の完成済み設定ファイル
|
||||
# ★ 既定で常に含まれる。抑止したい場合のみ renderMsmtprc: false
|
||||
#
|
||||
# 代表的なプロバイダの設定値は examples/ および README.md の一覧表を参照。
|
||||
mail:
|
||||
providers: {}
|
||||
# gmail:
|
||||
# enabled: true
|
||||
# # msmtprc キーを出力するか(既定 true)。IMAP だけ使いたい等で不要なら false
|
||||
# renderMsmtprc: true
|
||||
# smtp:
|
||||
# host: "smtp.gmail.com"
|
||||
# port: 587
|
||||
@@ -89,6 +97,7 @@ mail:
|
||||
# fromName: "Example"
|
||||
# replyTo: ""
|
||||
# authMethod: "plain" # plain | login | cram-md5
|
||||
# tlsVerify: true # false で証明書検証を無効化(社内リレー等)
|
||||
# imap:
|
||||
# host: "imap.gmail.com"
|
||||
# port: 993
|
||||
@@ -99,7 +108,6 @@ mail:
|
||||
# # host: "pop.gmail.com"
|
||||
# # port: 995
|
||||
# # security: "tls"
|
||||
# renderMsmtprc: true
|
||||
# # このプロバイダだけ別ネームスペースへ配る場合(省略時は distribution 準拠)
|
||||
# namespacesOverride: []
|
||||
# # このプロバイダ Secret だけに付ける追加アノテーション
|
||||
|
||||
Reference in New Issue
Block a user