
# keenauth config promote ile yapılandırmayı taşıma

`keenauth config promote`, bir ortamın yapılandırmasını başka bir ortama kopyalar; örneğin `staging` ortamından `production` ortamına. Belgeyi bir dosyaya yazmadan, `config export`, `config plan` ve `config apply` ile elle çalıştıracağınız adımların aynısını çalıştırır:

1. `--from` ortamının yapılandırma belgesini dışa aktarır.
2. Bu belge için `--to` ortamında bir plan oluşturur.
3. Farkı yazdırır: `+` oluşturma, `~` güncelleme, `-` silme; değişmeyen kaynaklar yalnızca sayılır.
4. Onaylamanızdan sonra planı uygular.

İki ortam farklı bölgelerde olabilir. Bölgeler birbirini asla çağırmaz: belge yalnızca bellekte, makinenizden geçer.

## Başlamadan önce

Komut, her iki ortama erişmesi gerektiğinden kontrol paneli oturum açmanızı kullanır. `keenauth login` ile giriş yapın ([keenauth login ile giriş yapma](/docs/cli/login) bölümüne bakın); her iki ortamda, kaynağın yapılandırmasını okumaya ve hedefin yapılandırmasını yazmaya izin veren bir kontrol paneli rolüne sahip olmanız gerekir. Bir API anahtarı tek bir ortama aittir; bu nedenle `KEENAUTH_API_KEY` ayarlıyken komut çalışmayı reddeder ve 2 çıkış koduyla sonlanır.

## Kullanım

```sh
keenauth config promote --from env_01j9z3k4m5n6p7q8r9s0t1stg0 --to env_01j9z3k4m5n6p7q8r9s0t1prd0
```

| Bayrak | Açıklama |
|---|---|
| `--from` | Kaynak ortamın kimliği (`env_…`); yapılandırması dışa aktarılır (zorunlu). |
| `--to` | Hedef ortamın kimliği (`env_…`); plan burada oluşturulur ve uygulanır (zorunlu). |
| `--kinds` | Taşınacak türler, virgülle ayrılmış veya tekrarlanmış, `config export` için olduğu gibi. Varsayılan: tüm türler. |
| `--prune` | Taşınan türlerin yalnızca hedefte bulunan kaynaklarını da siler. Bu bayrak olmadan bunlar korunur. |
| `--secrets-from-env` | Planın ihtiyaç duyduğu istemci gizli anahtarlarını yerel ortam değişkenlerinden okur (aşağıya bakın). |
| `--confirm-deletion` | Korumalı bir silmeyi `<kind>/<key>` olarak onaylar; `config apply` için olduğu gibi. |
| `--sp-host` | Hedef ortamın hizmet sağlayıcı ana makinesi, örneğin `login.example.com`. Yalnızca plan hedefte bir kurumsal bağlantının OIDC materyalini oluşturuyorsa gerekir (aşağıya bakın); aksi halde bırakın. |
| `--yes`, `-y` | Sormadan uygular. Standart girdi bir terminal değilse gereklidir. |
| `--output`, `-o` | `table`, `json` veya `yaml`. Bayrak yoksa CLI bir terminalde tablo, aksi halde JSON yazdırır. |

Bir terminalde (`table`), fark standart çıktıya, soru standart hataya yazdırılır; uygulamadan sonra plan kimliği, durumu ve değişiklik sayısını içeren tek bir satır yazdırılır. `json` veya `yaml` ile fark standart hataya gider ve standart çıktı yalnızca uygulanan planı içerir; böylece bir betik onu okuyabilir. Hedef zaten kaynakla eşleşiyorsa komut `nothing to promote` yazdırır ve hiçbir şey uygulamaz.

Standart girdi bir terminal değilse ve `--yes` eksikse, komut herhangi bir istek göndermeden önce 2 çıkış koduyla sonlanır.

## Gizli anahtarlar asla taşınmaz

Dışa aktarılan belge asla gizli bir değer tutmaz: bir bağlantının istemci gizli anahtarı `secret_ref` yer tutucusu olarak görünür (örneğin `KEENAUTH_CONNECTION_GOOGLE_CLIENT_SECRET`). Hedefte gizli anahtar gerektiren bir değişiklik `[needs a client secret]` ile gösterilir.

Böyle bir plan, gizli anahtarı siz kendiniz vermedikçe uygulanmaz: hatanın adını verdiği ortam değişkenini ayarlayın ve komutu `--secrets-from-env` ile yeniden çalıştırın. Değer yerel ortamınızdan okunur ve yalnızca uygulama isteğinin gövdesinde gönderilir. Asla yazdırılmaz, asla bir dosyaya yazılmaz ve asla kaynak ortamdan okunmaz.

```sh
export KEENAUTH_CONNECTION_GOOGLE_CLIENT_SECRET=...   # the production client secret
keenauth config promote --from env_01j9z3k4m5n6p7q8r9s0t1stg0 --to env_01j9z3k4m5n6p7q8r9s0t1prd0 --secrets-from-env
```

## Kurumsal OIDC ve sosyal bağlantılar

Bir kurumsal bağlantının OIDC ayarları (`spec.oidc`: veren, istemci kimliği, istemci kimlik doğrulama yöntemi ve sağlayıcı profili) bağlantıyla birlikte taşınır. Hedefte bu ayarlar henüz yoksa, uygulama bunları oluşturur ve geri çağırma URL'sini hedefin ana makinesinden sabitler; bu nedenle kullanıcılarınızın hedef ortamda giriş yaptığı ana makineyle birlikte `--sp-host` değerini verin. Ana makine belgenin parçası değildir, çünkü ortamlar arasında farklılık gösterir.

Bir sosyal bağlantının istemci gizli anahtarı henüz bir plandan uygulanamaz: plan bir tane gerektirdiğinde, `--secrets-from-env` ile bile uygulama `501 not_implemented` hatasıyla reddedilir ve hiçbir şey değiştirilmez. Diğer türleri `--kinds` ile taşıyın veya destek verilene kadar sosyal bağlantıyı kaynaktan çıkarın.

## Hatalar

Plan bir saat geçerlidir. Plan ile uygulama arasında hedefteki bir kaynak değişirse, uygulama `409 config_conflict` ile reddedilir ve hiçbir şey değiştirilmez; komutu yeniden çalıştırın. Diğer uygulama hataları `config apply` için olanlarla aynıdır.

## Çıkış kodları

| Kod | Anlam |
|---|---|
| `0` | Plan uygulandı ya da taşınacak bir şey yoktu. |
| `1` | Sunucu hatası ya da onayı reddettiniz (`aborted`). |
| `2` | Kullanım hatası: geçersiz veya aynı ortam kimliği, etkileşimli olmayan bir terminalde `--yes` eksik, `KEENAUTH_API_KEY` ayarlı ya da plan için gereken bir gizli anahtar eksik. Hiçbir şey uygulanmadı. |
| `3` | Oturum açmadınız ya da sunucu `401` veya `403` yanıtı verdi. |
| `4` | Plan bu özelliği içermiyor (`403` ile `plan_feature_unavailable`). |
