|
@@ -1001,6 +1001,67 @@
|
|
|
</span>
|
|
</span>
|
|
|
</a>
|
|
</a>
|
|
|
|
|
|
|
|
|
|
+</li>
|
|
|
|
|
+
|
|
|
|
|
+ <li class="md-nav__item">
|
|
|
|
|
+ <a href="#syncwindows" class="md-nav__link">
|
|
|
|
|
+ <span class="md-ellipsis">
|
|
|
|
|
+
|
|
|
|
|
+ SyncWindows
|
|
|
|
|
+
|
|
|
|
|
+ </span>
|
|
|
|
|
+ </a>
|
|
|
|
|
+
|
|
|
|
|
+ <nav class="md-nav" aria-label="SyncWindows">
|
|
|
|
|
+ <ul class="md-nav__list">
|
|
|
|
|
+
|
|
|
|
|
+ <li class="md-nav__item">
|
|
|
|
|
+ <a href="#example-allow-syncs-only-during-business-hours-mon-fri-0900-1700-utc" class="md-nav__link">
|
|
|
|
|
+ <span class="md-ellipsis">
|
|
|
|
|
+
|
|
|
|
|
+ Example: allow syncs only during business hours (Mon-Fri 09:00-17:00 UTC)
|
|
|
|
|
+
|
|
|
|
|
+ </span>
|
|
|
|
|
+ </a>
|
|
|
|
|
+
|
|
|
|
|
+</li>
|
|
|
|
|
+
|
|
|
|
|
+ <li class="md-nav__item">
|
|
|
|
|
+ <a href="#example-block-syncs-during-a-saturday-maintenance-window-0200-0400-utc" class="md-nav__link">
|
|
|
|
|
+ <span class="md-ellipsis">
|
|
|
|
|
+
|
|
|
|
|
+ Example: block syncs during a Saturday maintenance window (02:00-04:00 UTC)
|
|
|
|
|
+
|
|
|
|
|
+ </span>
|
|
|
|
|
+ </a>
|
|
|
|
|
+
|
|
|
|
|
+</li>
|
|
|
|
|
+
|
|
|
|
|
+ <li class="md-nav__item">
|
|
|
|
|
+ <a href="#multiple-windows" class="md-nav__link">
|
|
|
|
|
+ <span class="md-ellipsis">
|
|
|
|
|
+
|
|
|
|
|
+ Multiple windows
|
|
|
|
|
+
|
|
|
|
|
+ </span>
|
|
|
|
|
+ </a>
|
|
|
|
|
+
|
|
|
|
|
+</li>
|
|
|
|
|
+
|
|
|
|
|
+ <li class="md-nav__item">
|
|
|
|
|
+ <a href="#interaction-with-refreshinterval" class="md-nav__link">
|
|
|
|
|
+ <span class="md-ellipsis">
|
|
|
|
|
+
|
|
|
|
|
+ Interaction with refreshInterval
|
|
|
|
|
+
|
|
|
|
|
+ </span>
|
|
|
|
|
+ </a>
|
|
|
|
|
+
|
|
|
|
|
+</li>
|
|
|
|
|
+
|
|
|
|
|
+ </ul>
|
|
|
|
|
+ </nav>
|
|
|
|
|
+
|
|
|
</li>
|
|
</li>
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<li class="md-nav__item">
|
|
@@ -5048,6 +5109,67 @@
|
|
|
</span>
|
|
</span>
|
|
|
</a>
|
|
</a>
|
|
|
|
|
|
|
|
|
|
+</li>
|
|
|
|
|
+
|
|
|
|
|
+ <li class="md-nav__item">
|
|
|
|
|
+ <a href="#syncwindows" class="md-nav__link">
|
|
|
|
|
+ <span class="md-ellipsis">
|
|
|
|
|
+
|
|
|
|
|
+ SyncWindows
|
|
|
|
|
+
|
|
|
|
|
+ </span>
|
|
|
|
|
+ </a>
|
|
|
|
|
+
|
|
|
|
|
+ <nav class="md-nav" aria-label="SyncWindows">
|
|
|
|
|
+ <ul class="md-nav__list">
|
|
|
|
|
+
|
|
|
|
|
+ <li class="md-nav__item">
|
|
|
|
|
+ <a href="#example-allow-syncs-only-during-business-hours-mon-fri-0900-1700-utc" class="md-nav__link">
|
|
|
|
|
+ <span class="md-ellipsis">
|
|
|
|
|
+
|
|
|
|
|
+ Example: allow syncs only during business hours (Mon-Fri 09:00-17:00 UTC)
|
|
|
|
|
+
|
|
|
|
|
+ </span>
|
|
|
|
|
+ </a>
|
|
|
|
|
+
|
|
|
|
|
+</li>
|
|
|
|
|
+
|
|
|
|
|
+ <li class="md-nav__item">
|
|
|
|
|
+ <a href="#example-block-syncs-during-a-saturday-maintenance-window-0200-0400-utc" class="md-nav__link">
|
|
|
|
|
+ <span class="md-ellipsis">
|
|
|
|
|
+
|
|
|
|
|
+ Example: block syncs during a Saturday maintenance window (02:00-04:00 UTC)
|
|
|
|
|
+
|
|
|
|
|
+ </span>
|
|
|
|
|
+ </a>
|
|
|
|
|
+
|
|
|
|
|
+</li>
|
|
|
|
|
+
|
|
|
|
|
+ <li class="md-nav__item">
|
|
|
|
|
+ <a href="#multiple-windows" class="md-nav__link">
|
|
|
|
|
+ <span class="md-ellipsis">
|
|
|
|
|
+
|
|
|
|
|
+ Multiple windows
|
|
|
|
|
+
|
|
|
|
|
+ </span>
|
|
|
|
|
+ </a>
|
|
|
|
|
+
|
|
|
|
|
+</li>
|
|
|
|
|
+
|
|
|
|
|
+ <li class="md-nav__item">
|
|
|
|
|
+ <a href="#interaction-with-refreshinterval" class="md-nav__link">
|
|
|
|
|
+ <span class="md-ellipsis">
|
|
|
|
|
+
|
|
|
|
|
+ Interaction with refreshInterval
|
|
|
|
|
+
|
|
|
|
|
+ </span>
|
|
|
|
|
+ </a>
|
|
|
|
|
+
|
|
|
|
|
+</li>
|
|
|
|
|
+
|
|
|
|
|
+ </ul>
|
|
|
|
|
+ </nav>
|
|
|
|
|
+
|
|
|
</li>
|
|
</li>
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<li class="md-nav__item">
|
|
@@ -5163,6 +5285,44 @@ be transformed and saved as a <code>Kind=Secret</code>:</p>
|
|
|
<p>If supported by the configured <code>refreshPolicy</code>, you can manually trigger a refresh of the <code>Kind=Secret</code> by updating the annotations of the <code>ExternalSecret</code>:</p>
|
|
<p>If supported by the configured <code>refreshPolicy</code>, you can manually trigger a refresh of the <code>Kind=Secret</code> by updating the annotations of the <code>ExternalSecret</code>:</p>
|
|
|
<div class="highlight"><pre><span></span><code>kubectl annotate es my-es force-sync=$(date +%s) --overwrite
|
|
<div class="highlight"><pre><span></span><code>kubectl annotate es my-es force-sync=$(date +%s) --overwrite
|
|
|
</code></pre></div>
|
|
</code></pre></div>
|
|
|
|
|
+<h2 id="syncwindows">SyncWindows</h2>
|
|
|
|
|
+<p><code>syncWindows</code> restricts <strong>when</strong> periodic refreshes may occur. It is evaluated in UTC and applies only to the <code>Periodic</code> refresh policy (or when <code>refreshPolicy</code> is unset). <code>OnChange</code> and <code>CreatedOnce</code> policies are unaffected.</p>
|
|
|
|
|
+<p>A sync-windows block carries a shared <code>kind</code> and a list of <code>schedule + duration</code> entries:</p>
|
|
|
|
|
+<ul>
|
|
|
|
|
+<li><code>kind: allow</code> -- periodic syncs are permitted <strong>only</strong> while at least one window is active; all other times are blocked.</li>
|
|
|
|
|
+<li><code>kind: deny</code> -- periodic syncs are <strong>blocked</strong> while any window is active; all other times proceed normally.</li>
|
|
|
|
|
+</ul>
|
|
|
|
|
+<p>Each entry in <code>windows</code> uses a standard 5-field cron <code>schedule</code> (UTC) and a <code>duration</code> string (e.g. <code>8h</code>, <code>30m</code>). The window stays open for <code>duration</code> after each schedule firing. A window entry with an unparseable <code>schedule</code> is silently ignored and treated as inactive, so a typo does not permanently block syncs.</p>
|
|
|
|
|
+<h3 id="example-allow-syncs-only-during-business-hours-mon-fri-0900-1700-utc">Example: allow syncs only during business hours (Mon-Fri 09:00-17:00 UTC)</h3>
|
|
|
|
|
+<div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1</span>
|
|
|
|
|
+<span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
|
|
|
|
|
+<span class="nt">metadata</span><span class="p">:</span>
|
|
|
|
|
+<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">example</span>
|
|
|
|
|
+<span class="nt">spec</span><span class="p">:</span>
|
|
|
|
|
+<span class="w"> </span><span class="nt">refreshInterval</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">1h</span>
|
|
|
|
|
+<span class="w"> </span><span class="nt">syncWindows</span><span class="p">:</span>
|
|
|
|
|
+<span class="w"> </span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">allow</span>
|
|
|
|
|
+<span class="w"> </span><span class="nt">windows</span><span class="p">:</span>
|
|
|
|
|
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">schedule</span><span class="p">:</span><span class="w"> </span><span class="s">"0</span><span class="nv"> </span><span class="s">9</span><span class="nv"> </span><span class="s">*</span><span class="nv"> </span><span class="s">*</span><span class="nv"> </span><span class="s">1-5"</span><span class="w"> </span><span class="c1"># weekdays at 09:00 UTC</span>
|
|
|
|
|
+<span class="w"> </span><span class="nt">duration</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">8h</span><span class="w"> </span><span class="c1"># window open until 17:00 UTC</span>
|
|
|
|
|
+</code></pre></div>
|
|
|
|
|
+<h3 id="example-block-syncs-during-a-saturday-maintenance-window-0200-0400-utc">Example: block syncs during a Saturday maintenance window (02:00-04:00 UTC)</h3>
|
|
|
|
|
+<div class="highlight"><pre><span></span><code><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">external-secrets.io/v1</span>
|
|
|
|
|
+<span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalSecret</span>
|
|
|
|
|
+<span class="nt">metadata</span><span class="p">:</span>
|
|
|
|
|
+<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">example</span>
|
|
|
|
|
+<span class="nt">spec</span><span class="p">:</span>
|
|
|
|
|
+<span class="w"> </span><span class="nt">refreshInterval</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">30m</span>
|
|
|
|
|
+<span class="w"> </span><span class="nt">syncWindows</span><span class="p">:</span>
|
|
|
|
|
+<span class="w"> </span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">deny</span>
|
|
|
|
|
+<span class="w"> </span><span class="nt">windows</span><span class="p">:</span>
|
|
|
|
|
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">schedule</span><span class="p">:</span><span class="w"> </span><span class="s">"0</span><span class="nv"> </span><span class="s">2</span><span class="nv"> </span><span class="s">*</span><span class="nv"> </span><span class="s">*</span><span class="nv"> </span><span class="s">6"</span><span class="w"> </span><span class="c1"># Saturdays at 02:00 UTC</span>
|
|
|
|
|
+<span class="w"> </span><span class="nt">duration</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">2h</span><span class="w"> </span><span class="c1"># block until 04:00 UTC</span>
|
|
|
|
|
+</code></pre></div>
|
|
|
|
|
+<h3 id="multiple-windows">Multiple windows</h3>
|
|
|
|
|
+<p>You can list several entries under <code>windows</code>. For <code>kind: allow</code>, the sync is permitted when <strong>any</strong> window is active. For <code>kind: deny</code>, the sync is blocked when <strong>any</strong> window is active.</p>
|
|
|
|
|
+<h3 id="interaction-with-refreshinterval">Interaction with refreshInterval</h3>
|
|
|
|
|
+<p><code>syncWindows</code> only suppresses sync operations -- it does not change how often the controller checks. The controller still requeues at <code>refreshInterval</code> regardless of whether a sync was blocked. This means that if <code>refreshInterval</code> is longer than <code>window.duration</code>, a window could open and close entirely between two consecutive checks and the sync would be missed for that occurrence. This is by design: <code>refreshInterval</code> is the primary driver; <code>syncWindows</code> is a gate on top of it. To ensure no window occurrence is missed, set <code>refreshInterval</code> to a value shorter than the smallest <code>window.duration</code>.</p>
|
|
|
<h2 id="features">Features</h2>
|
|
<h2 id="features">Features</h2>
|
|
|
<p>Individual features are described in the <a href="../../guides/introduction/">Guides section</a>:</p>
|
|
<p>Individual features are described in the <a href="../../guides/introduction/">Guides section</a>:</p>
|
|
|
<ul>
|
|
<ul>
|
|
@@ -5206,6 +5366,16 @@ be transformed and saved as a <code>Kind=Secret</code>:</p>
|
|
|
<span class="w"> </span><span class="c1"># May be set to zero to fetch and create it once</span>
|
|
<span class="w"> </span><span class="c1"># May be set to zero to fetch and create it once</span>
|
|
|
<span class="w"> </span><span class="nt">refreshInterval</span><span class="p">:</span><span class="w"> </span><span class="s">"1h0m0s"</span>
|
|
<span class="w"> </span><span class="nt">refreshInterval</span><span class="p">:</span><span class="w"> </span><span class="s">"1h0m0s"</span>
|
|
|
|
|
|
|
|
|
|
+<span class="w"> </span><span class="c1"># SyncWindows optionally restricts when periodic refreshes may occur (UTC, Periodic policy only).</span>
|
|
|
|
|
+<span class="w"> </span><span class="c1"># kind: allow -- syncs are permitted only while at least one window is active.</span>
|
|
|
|
|
+<span class="w"> </span><span class="c1"># kind: deny -- syncs are blocked while any window is active.</span>
|
|
|
|
|
+<span class="w"> </span><span class="c1"># Each window entry uses a standard 5-field cron schedule and a duration.</span>
|
|
|
|
|
+<span class="w"> </span><span class="nt">syncWindows</span><span class="p">:</span>
|
|
|
|
|
+<span class="w"> </span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">allow</span>
|
|
|
|
|
+<span class="w"> </span><span class="nt">windows</span><span class="p">:</span>
|
|
|
|
|
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">schedule</span><span class="p">:</span><span class="w"> </span><span class="s">"0</span><span class="nv"> </span><span class="s">9</span><span class="nv"> </span><span class="s">*</span><span class="nv"> </span><span class="s">*</span><span class="nv"> </span><span class="s">1-5"</span><span class="w"> </span><span class="c1"># weekdays at 09:00 UTC</span>
|
|
|
|
|
+<span class="w"> </span><span class="nt">duration</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">8h</span><span class="w"> </span><span class="c1"># window open until 17:00 UTC</span>
|
|
|
|
|
+
|
|
|
<span class="w"> </span><span class="c1"># the target describes the secret that shall be created</span>
|
|
<span class="w"> </span><span class="c1"># the target describes the secret that shall be created</span>
|
|
|
<span class="w"> </span><span class="c1"># there can only be one target per ExternalSecret</span>
|
|
<span class="w"> </span><span class="c1"># there can only be one target per ExternalSecret</span>
|
|
|
<span class="w"> </span><span class="nt">target</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="nt">target</span><span class="p">:</span>
|