You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by po...@apache.org on 2026/04/15 22:21:34 UTC
(airflow) branch main updated: Add breeze k8s deploy-cluster command (#65260)
This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 7da8a112935 Add breeze k8s deploy-cluster command (#65260)
7da8a112935 is described below
commit 7da8a11293586d9569f1f62dc58f748fbc9761ed
Author: Przemysław Mirowski <17...@users.noreply.github.com>
AuthorDate: Thu Apr 16 00:21:26 2026 +0200
Add breeze k8s deploy-cluster command (#65260)
* Add breeze k8s deploy-cluster
* Add outputs & skip flags
* Regenerate images
* Update test command docs
* Update k8s tests doc
---
contributing-docs/testing/k8s_tests.rst | 8 +-
dev/breeze/doc/05_test_commands.rst | 21 ++-
dev/breeze/doc/images/output_k8s.svg | 42 +++---
dev/breeze/doc/images/output_k8s.txt | 2 +-
.../doc/images/output_k8s_deploy-cluster.svg | 156 +++++++++++++++++++++
.../doc/images/output_k8s_deploy-cluster.txt | 1 +
.../output_setup_check-all-params-in-groups.svg | 20 +--
.../output_setup_check-all-params-in-groups.txt | 2 +-
.../output_setup_regenerate-command-images.svg | 10 +-
.../output_setup_regenerate-command-images.txt | 2 +-
.../airflow_breeze/commands/kubernetes_commands.py | 105 +++++++++++++-
.../commands/kubernetes_commands_config.py | 14 ++
12 files changed, 341 insertions(+), 42 deletions(-)
diff --git a/contributing-docs/testing/k8s_tests.rst b/contributing-docs/testing/k8s_tests.rst
index e4e08b32a6a..fc678db9506 100644
--- a/contributing-docs/testing/k8s_tests.rst
+++ b/contributing-docs/testing/k8s_tests.rst
@@ -227,8 +227,12 @@ You can exit k9s by pressing Ctrl-C.
Typical testing pattern for Kubernetes tests
--------------------------------------------
-The typical session for tests with Kubernetes looks like follows:
+.. note::
+ Steps 1-6 from below instruction can be done by using one command ``breeze k8s deploy-cluster``.
+ For details visit `Test commands <../../dev/breeze/doc/05_test_commands.rst>`__.
+
+The typical session for tests with Kubernetes looks like follows:
1. Prepare the environment:
@@ -431,7 +435,7 @@ Should show the status of current KinD cluster.
breeze k8s upload-k8s-image
-5. Upload the image to KinD cluster - this uploads your image to make it available for the KinD cluster.
+6. Upload the image to KinD cluster - this uploads your image to make it available for the KinD cluster.
.. code-block:: bash
diff --git a/dev/breeze/doc/05_test_commands.rst b/dev/breeze/doc/05_test_commands.rst
index 5ae0372978f..656e83cfb81 100644
--- a/dev/breeze/doc/05_test_commands.rst
+++ b/dev/breeze/doc/05_test_commands.rst
@@ -421,9 +421,9 @@ You can:
* Setup environment for k8s tests with ``breeze k8s setup-env``
* Build Airflow k8S images with ``breeze k8s build-k8s-image``
-* Manage KinD Kubernetes cluster and upload image and deploy Airflow to KinD cluster via
+* Manage KinD Kubernetes cluster, upload Airflow image, deploy Airflow to the cluster and check its status with
``breeze k8s create-cluster``, ``breeze k8s configure-cluster``, ``breeze k8s deploy-airflow``, ``breeze k8s status``,
- ``breeze k8s upload-k8s-image``, ``breeze k8s delete-cluster`` commands
+ ``breeze k8s upload-k8s-image``, ``breeze k8s delete-cluster`` and ``breeze k8s deploy-cluster`` commands
* Hot-reload DAGs and core sources (scheduler/triggerer/dag-processor) with ``breeze k8s dev`` (skaffold sync)
* Run Kubernetes tests specified with ``breeze k8s tests`` command
* Run complete test run with ``breeze k8s run-complete-tests`` - performing the full cycle of creating
@@ -531,6 +531,23 @@ All parameters of the command are here:
:width: 100%
:alt: Breeze k8s configure-cluster
+Prepare Kind Cluster with Airflow image build
+.............................................
+
+In order to not execute every KinD cluster-related command and building Airflow image separately, use
+``breeze k8s deploy-cluster`` command for running:
+1. Local environment setup for KinD cluster and Airflow deployment
+2. KinD cluster creation and configuration
+3. Airflow UI asset compilation
+4. Airflow image build and upload
+
+All parameters of the command are here:
+
+.. image:: ./images/output_k8s_deploy-cluster.svg
+ :target: https://raw.githubusercontent.com/apache/airflow/main/dev/breeze/images/output_k8s_deploy-cluster.svg
+ :width: 100%
+ :alt: Breeze k8s deploy-cluster
+
Deploying Airflow to the Cluster
................................
diff --git a/dev/breeze/doc/images/output_k8s.svg b/dev/breeze/doc/images/output_k8s.svg
index 30082c1981d..d2ec2c13c40 100644
--- a/dev/breeze/doc/images/output_k8s.svg
+++ b/dev/breeze/doc/images/output_k8s.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 830.8" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 855.1999999999999" xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@@ -43,7 +43,7 @@
<defs>
<clipPath id="breeze-k8s-clip-terminal">
- <rect x="0" y="0" width="1463.0" height="779.8" />
+ <rect x="0" y="0" width="1463.0" height="804.1999999999999" />
</clipPath>
<clipPath id="breeze-k8s-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -138,9 +138,12 @@
<clipPath id="breeze-k8s-line-30">
<rect x="0" y="733.5" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="breeze-k8s-line-31">
+ <rect x="0" y="757.9" width="1464" height="24.65"/>
+ </clipPath>
</defs>
- <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="828.8" rx="8"/><text class="breeze-k8s-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: k8s</text>
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="853.2" rx="8"/><text class="breeze-k8s-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: k8s</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -166,22 +169,23 @@
</text><text class="breeze-k8s-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-line-13)">│</text><text class="breeze-k8s-r1" x="256.2" y="337.2" textLength="1183.4" clip-path="url(#breeze-k8s-line-13)">all clusters in parallel).                                       [...]
</text><text class="breeze-k8s-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-line-14)">│</text><text class="breeze-k8s-r4" x="24.4" y="361.6" textLength="207.4" clip-path="url(#breeze-k8s-line-14)">build-k8s-image  </text><text class="breeze-k8s-r1" x="256.2" y="361.6" textLength="1183.4" clip-path="url(#breeze-k8s-line-14)">Build k8s-ready airflow image (optionally all images in parallel).      [...]
</text><text class="breeze-k8s-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-line-15)">│</text><text class="breeze-k8s-r4" x="24.4" y="386" textLength="207.4" clip-path="url(#breeze-k8s-line-15)">upload-k8s-image </text><text class="breeze-k8s-r1" x="256.2" y="386" textLength="1183.4" clip-path="url(#breeze-k8s-line-15)">Upload k8s-ready airflow image to the KinD cluster (optionally to all clusters in  [...]
-</text><text class="breeze-k8s-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-line-16)">│</text><text class="breeze-k8s-r4" x="24.4" y="410.4" textLength="207.4" clip-path="url(#breeze-k8s-line-16)">deploy-airflow   </text><text class="breeze-k8s-r1" x="256.2" y="410.4" textLength="1183.4" clip-path="url(#breeze-k8s-line-16)">Deploy airflow image to the current KinD cluster (or all clusters).  &# [...]
-</text><text class="breeze-k8s-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-line-17)">│</text><text class="breeze-k8s-r4" x="24.4" y="434.8" textLength="207.4" clip-path="url(#breeze-k8s-line-17)">dev              </text><text class="breeze-k8s-r1" x="256.2" y="434.8" textLength="1183.4" clip-path="url(#breeze-k8s-line-17)">Run skaffold dev loop to sync dags and [...]
-</text><text class="breeze-k8s-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-line-18)">│</text><text class="breeze-k8s-r1" x="256.2" y="459.2" textLength="1183.4" clip-path="url(#breeze-k8s-line-18)">(scheduler/triggerer/dag-processor/API Server hot-reload; UI auto-refresh not supported yet).    </text><text class="breeze-k8s-r5" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-line-18)">│</text><t [...]
-</text><text class="breeze-k8s-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-line-19)">│</text><text class="breeze-k8s-r4" x="24.4" y="483.6" textLength="207.4" clip-path="url(#breeze-k8s-line-19)">delete-cluster   </text><text class="breeze-k8s-r1" x="256.2" y="483.6" textLength="1183.4" clip-path="url(#breeze-k8s-line-19)">Delete the current KinD Cluster (optionally all clusters).      &# [...]
-</text><text class="breeze-k8s-r5" x="0" y="508" textLength="1464" clip-path="url(#breeze-k8s-line-20)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-k8s-line-20)">
-</text><text class="breeze-k8s-r5" x="0" y="532.4" textLength="24.4" clip-path="url(#breeze-k8s-line-21)">╭─</text><text class="breeze-k8s-r5" x="24.4" y="532.4" textLength="305" clip-path="url(#breeze-k8s-line-21)"> K8S inspection commands </text><text class="breeze-k8s-r5" x="329.4" y="532.4" textLength="1110.2" clip-path="url(#breeze-k8s-line-21)">───────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k [...]
-</text><text class="breeze-k8s-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-line-22)">│</text><text class="breeze-k8s-r4" x="24.4" y="556.8" textLength="97.6" clip-path="url(#breeze-k8s-line-22)">status  </text><text class="breeze-k8s-r1" x="146.4" y="556.8" textLength="1293.2" clip-path="url(#breeze-k8s-line-22)">Check status of the current cluster and airflow deployed to it (optionally all cl [...]
-</text><text class="breeze-k8s-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-line-23)">│</text><text class="breeze-k8s-r4" x="24.4" y="581.2" textLength="97.6" clip-path="url(#breeze-k8s-line-23)">logs    </text><text class="breeze-k8s-r1" x="146.4" y="581.2" textLength="463.6" clip-path="url(#breeze-k8s-line-23)">Dump k8s logs to ${TMP_DIR}/kind_logs_</text><text class="breeze-k8s-r7" x="610" y="581.2" textLength="170.8" clip-pa [...]
-</text><text class="breeze-k8s-r5" x="0" y="605.6" textLength="1464" clip-path="url(#breeze-k8s-line-24)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-line-24)">
-</text><text class="breeze-k8s-r5" x="0" y="630" textLength="24.4" clip-path="url(#breeze-k8s-line-25)">╭─</text><text class="breeze-k8s-r5" x="24.4" y="630" textLength="268.4" clip-path="url(#breeze-k8s-line-25)"> K8S testing commands </text><text class="breeze-k8s-r5" x="292.8" y="630" textLength="1146.8" clip-path="url(#breeze-k8s-line-25)">──────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k8s-r [...]
-</text><text class="breeze-k8s-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-line-26)">│</text><text class="breeze-k8s-r4" x="24.4" y="654.4" textLength="219.6" clip-path="url(#breeze-k8s-line-26)">tests             </text><text class="breeze-k8s-r1" x="268.4" y="654.4" textLength="1171.2" clip-path="url(#breeze-k8s-line-26)">Run tests against the current KinD cluster (o [...]
-</text><text class="breeze-k8s-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-line-27)">│</text><text class="breeze-k8s-r4" x="24.4" y="678.8" textLength="219.6" clip-path="url(#breeze-k8s-line-27)">run-complete-tests</text><text class="breeze-k8s-r1" x="268.4" y="678.8" textLength="1171.2" clip-path="url(#breeze-k8s-line-27)">Run complete k8s tests consisting of: creating cluster, building and uploading image,  [...]
-</text><text class="breeze-k8s-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-line-28)">│</text><text class="breeze-k8s-r1" x="268.4" y="703.2" textLength="1171.2" clip-path="url(#breeze-k8s-line-28)">airflow, running tests and deleting clusters (optionally for all clusters in parallel).         </text><text class="breeze-k8s-r5" x="1451.8" y="703.2" textLength="12.2" cli [...]
-</text><text class="breeze-k8s-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-line-29)">│</text><text class="breeze-k8s-r4" x="24.4" y="727.6" textLength="219.6" clip-path="url(#breeze-k8s-line-29)">shell             </text><text class="breeze-k8s-r1" x="268.4" y="727.6" textLength="1171.2" clip-path="url(#breeze-k8s-line-29)">Run shell environment for the current KinD cl [...]
-</text><text class="breeze-k8s-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-k8s-line-30)">│</text><text class="breeze-k8s-r4" x="24.4" y="752" textLength="219.6" clip-path="url(#breeze-k8s-line-30)">k9s               </text><text class="breeze-k8s-r1" x="268.4" y="752" textLength="1171.2" clip-path="url(#breeze-k8s-line-30)">Run k9s tool. You can pass any k9s a [...]
-</text><text class="breeze-k8s-r5" x="0" y="776.4" textLength="1464" clip-path="url(#breeze-k8s-line-31)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-line-31)">
+</text><text class="breeze-k8s-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-line-16)">│</text><text class="breeze-k8s-r4" x="24.4" y="410.4" textLength="207.4" clip-path="url(#breeze-k8s-line-16)">deploy-cluster   </text><text class="breeze-k8s-r1" x="256.2" y="410.4" textLength="1183.4" clip-path="url(#breeze-k8s-line-16)">Create, configure kind cluster and build Airflow image for Airflow Chart dep [...]
+</text><text class="breeze-k8s-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-line-17)">│</text><text class="breeze-k8s-r4" x="24.4" y="434.8" textLength="207.4" clip-path="url(#breeze-k8s-line-17)">deploy-airflow   </text><text class="breeze-k8s-r1" x="256.2" y="434.8" textLength="1183.4" clip-path="url(#breeze-k8s-line-17)">Deploy airflow image to the current KinD cluster (or all clusters).  &# [...]
+</text><text class="breeze-k8s-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-line-18)">│</text><text class="breeze-k8s-r4" x="24.4" y="459.2" textLength="207.4" clip-path="url(#breeze-k8s-line-18)">dev              </text><text class="breeze-k8s-r1" x="256.2" y="459.2" textLength="1183.4" clip-path="url(#breeze-k8s-line-18)">Run skaffold dev loop to sync dags and [...]
+</text><text class="breeze-k8s-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-line-19)">│</text><text class="breeze-k8s-r1" x="256.2" y="483.6" textLength="1183.4" clip-path="url(#breeze-k8s-line-19)">(scheduler/triggerer/dag-processor/API Server hot-reload; UI auto-refresh not supported yet).    </text><text class="breeze-k8s-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-line-19)">│</text><t [...]
+</text><text class="breeze-k8s-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-line-20)">│</text><text class="breeze-k8s-r4" x="24.4" y="508" textLength="207.4" clip-path="url(#breeze-k8s-line-20)">delete-cluster   </text><text class="breeze-k8s-r1" x="256.2" y="508" textLength="1183.4" clip-path="url(#breeze-k8s-line-20)">Delete the current KinD Cluster (optionally all clusters).       &# [...]
+</text><text class="breeze-k8s-r5" x="0" y="532.4" textLength="1464" clip-path="url(#breeze-k8s-line-21)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-line-21)">
+</text><text class="breeze-k8s-r5" x="0" y="556.8" textLength="24.4" clip-path="url(#breeze-k8s-line-22)">╭─</text><text class="breeze-k8s-r5" x="24.4" y="556.8" textLength="305" clip-path="url(#breeze-k8s-line-22)"> K8S inspection commands </text><text class="breeze-k8s-r5" x="329.4" y="556.8" textLength="1110.2" clip-path="url(#breeze-k8s-line-22)">───────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-k [...]
+</text><text class="breeze-k8s-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-line-23)">│</text><text class="breeze-k8s-r4" x="24.4" y="581.2" textLength="97.6" clip-path="url(#breeze-k8s-line-23)">status  </text><text class="breeze-k8s-r1" x="146.4" y="581.2" textLength="1293.2" clip-path="url(#breeze-k8s-line-23)">Check status of the current cluster and airflow deployed to it (optionally all cl [...]
+</text><text class="breeze-k8s-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-line-24)">│</text><text class="breeze-k8s-r4" x="24.4" y="605.6" textLength="97.6" clip-path="url(#breeze-k8s-line-24)">logs    </text><text class="breeze-k8s-r1" x="146.4" y="605.6" textLength="463.6" clip-path="url(#breeze-k8s-line-24)">Dump k8s logs to ${TMP_DIR}/kind_logs_</text><text class="breeze-k8s-r7" x="610" y="605.6" textLength="170.8" clip-pa [...]
+</text><text class="breeze-k8s-r5" x="0" y="630" textLength="1464" clip-path="url(#breeze-k8s-line-25)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-k8s-line-25)">
+</text><text class="breeze-k8s-r5" x="0" y="654.4" textLength="24.4" clip-path="url(#breeze-k8s-line-26)">╭─</text><text class="breeze-k8s-r5" x="24.4" y="654.4" textLength="268.4" clip-path="url(#breeze-k8s-line-26)"> K8S testing commands </text><text class="breeze-k8s-r5" x="292.8" y="654.4" textLength="1146.8" clip-path="url(#breeze-k8s-line-26)">──────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze [...]
+</text><text class="breeze-k8s-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-line-27)">│</text><text class="breeze-k8s-r4" x="24.4" y="678.8" textLength="219.6" clip-path="url(#breeze-k8s-line-27)">tests             </text><text class="breeze-k8s-r1" x="268.4" y="678.8" textLength="1171.2" clip-path="url(#breeze-k8s-line-27)">Run tests against the current KinD cluster (o [...]
+</text><text class="breeze-k8s-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-line-28)">│</text><text class="breeze-k8s-r4" x="24.4" y="703.2" textLength="219.6" clip-path="url(#breeze-k8s-line-28)">run-complete-tests</text><text class="breeze-k8s-r1" x="268.4" y="703.2" textLength="1171.2" clip-path="url(#breeze-k8s-line-28)">Run complete k8s tests consisting of: creating cluster, building and uploading image,  [...]
+</text><text class="breeze-k8s-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-line-29)">│</text><text class="breeze-k8s-r1" x="268.4" y="727.6" textLength="1171.2" clip-path="url(#breeze-k8s-line-29)">airflow, running tests and deleting clusters (optionally for all clusters in parallel).         </text><text class="breeze-k8s-r5" x="1451.8" y="727.6" textLength="12.2" cli [...]
+</text><text class="breeze-k8s-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-k8s-line-30)">│</text><text class="breeze-k8s-r4" x="24.4" y="752" textLength="219.6" clip-path="url(#breeze-k8s-line-30)">shell             </text><text class="breeze-k8s-r1" x="268.4" y="752" textLength="1171.2" clip-path="url(#breeze-k8s-line-30)">Run shell environment for the current KinD cluster. [...]
+</text><text class="breeze-k8s-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-line-31)">│</text><text class="breeze-k8s-r4" x="24.4" y="776.4" textLength="219.6" clip-path="url(#breeze-k8s-line-31)">k9s               </text><text class="breeze-k8s-r1" x="268.4" y="776.4" textLength="1171.2" clip-path="url(#breeze-k8s-line-31)">Run k9s tool. You can pass any k9s& [...]
+</text><text class="breeze-k8s-r5" x="0" y="800.8" textLength="1464" clip-path="url(#breeze-k8s-line-32)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-k8s-line-32)">
</text>
</g>
</g>
diff --git a/dev/breeze/doc/images/output_k8s.txt b/dev/breeze/doc/images/output_k8s.txt
index d601d2a74e7..fdbc1e0160d 100644
--- a/dev/breeze/doc/images/output_k8s.txt
+++ b/dev/breeze/doc/images/output_k8s.txt
@@ -1 +1 @@
-21941a0b62454979f5b84da7c1630768
+d311e591fd9e3e467bfcb3fe2f18df2b
diff --git a/dev/breeze/doc/images/output_k8s_deploy-cluster.svg b/dev/breeze/doc/images/output_k8s_deploy-cluster.svg
new file mode 100644
index 00000000000..35b4841a057
--- /dev/null
+++ b/dev/breeze/doc/images/output_k8s_deploy-cluster.svg
@@ -0,0 +1,156 @@
+<svg class="rich-terminal" viewBox="0 0 1482 635.5999999999999" xmlns="http://www.w3.org/2000/svg">
+ <!-- Generated with Rich https://www.textualize.io -->
+ <style>
+
+ @font-face {
+ font-family: "Fira Code";
+ src: local("FiraCode-Regular"),
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
+ font-style: normal;
+ font-weight: 400;
+ }
+ @font-face {
+ font-family: "Fira Code";
+ src: local("FiraCode-Bold"),
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
+ font-style: bold;
+ font-weight: 700;
+ }
+
+ .breeze-k8s-deploy-cluster-matrix {
+ font-family: Fira Code, monospace;
+ font-size: 20px;
+ line-height: 24.4px;
+ font-variant-east-asian: full-width;
+ }
+
+ .breeze-k8s-deploy-cluster-title {
+ font-size: 18px;
+ font-weight: bold;
+ font-family: arial;
+ }
+
+ .breeze-k8s-deploy-cluster-r1 { fill: #c5c8c6 }
+.breeze-k8s-deploy-cluster-r2 { fill: #d0b344 }
+.breeze-k8s-deploy-cluster-r3 { fill: #c5c8c6;font-weight: bold }
+.breeze-k8s-deploy-cluster-r4 { fill: #68a0b3;font-weight: bold }
+.breeze-k8s-deploy-cluster-r5 { fill: #868887 }
+.breeze-k8s-deploy-cluster-r6 { fill: #98a84b;font-weight: bold }
+.breeze-k8s-deploy-cluster-r7 { fill: #8d7b39 }
+ </style>
+
+ <defs>
+ <clipPath id="breeze-k8s-deploy-cluster-clip-terminal">
+ <rect x="0" y="0" width="1463.0" height="584.5999999999999" />
+ </clipPath>
+ <clipPath id="breeze-k8s-deploy-cluster-line-0">
+ <rect x="0" y="1.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-1">
+ <rect x="0" y="25.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-2">
+ <rect x="0" y="50.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-3">
+ <rect x="0" y="74.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-4">
+ <rect x="0" y="99.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-5">
+ <rect x="0" y="123.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-6">
+ <rect x="0" y="147.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-7">
+ <rect x="0" y="172.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-8">
+ <rect x="0" y="196.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-9">
+ <rect x="0" y="221.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-10">
+ <rect x="0" y="245.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-11">
+ <rect x="0" y="269.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-12">
+ <rect x="0" y="294.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-13">
+ <rect x="0" y="318.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-14">
+ <rect x="0" y="343.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-15">
+ <rect x="0" y="367.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-16">
+ <rect x="0" y="391.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-17">
+ <rect x="0" y="416.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-18">
+ <rect x="0" y="440.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-19">
+ <rect x="0" y="465.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-20">
+ <rect x="0" y="489.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-21">
+ <rect x="0" y="513.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-k8s-deploy-cluster-line-22">
+ <rect x="0" y="538.3" width="1464" height="24.65"/>
+ </clipPath>
+ </defs>
+
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="633.6" rx="8"/><text class="breeze-k8s-deploy-cluster-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: k8s deploy-cluster</text>
+ <g transform="translate(26,22)">
+ <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
+ <circle cx="22" cy="0" r="7" fill="#febc2e"/>
+ <circle cx="44" cy="0" r="7" fill="#28c840"/>
+ </g>
+
+ <g transform="translate(9, 41)" clip-path="url(#breeze-k8s-deploy-cluster-clip-terminal)">
+
+ <g class="breeze-k8s-deploy-cluster-matrix">
+ <text class="breeze-k8s-deploy-cluster-r1" x="1464" y="20" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-0)">
+</text><text class="breeze-k8s-deploy-cluster-r2" x="12.2" y="44.4" textLength="73.2" clip-path="url(#breeze-k8s-deploy-cluster-line-1)">Usage:</text><text class="breeze-k8s-deploy-cluster-r3" x="97.6" y="44.4" textLength="305" clip-path="url(#breeze-k8s-deploy-cluster-line-1)">breeze k8s deploy-cluster</text><text class="breeze-k8s-deploy-cluster-r1" x="414.8" y="44.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-1)">[</text><text class="breeze-k8s-deploy-c [...]
+</text><text class="breeze-k8s-deploy-cluster-r1" x="1464" y="68.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-2)">
+</text><text class="breeze-k8s-deploy-cluster-r1" x="12.2" y="93.2" textLength="1024.8" clip-path="url(#breeze-k8s-deploy-cluster-line-3)">Create, configure kind cluster and build Airflow image for Airflow Chart deployment.</text><text class="breeze-k8s-deploy-cluster-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-3)">
+</text><text class="breeze-k8s-deploy-cluster-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-4)">
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-deploy-cluster-line-5)">╭─</text><text class="breeze-k8s-deploy-cluster-r5" x="24.4" y="142" textLength="341.6" clip-path="url(#breeze-k8s-deploy-cluster-line-5)"> K8S cluster creation flags </text><text class="breeze-k8s-deploy-cluster-r5" x="366" y="142" textLength="1073.6" clip-path="url(#breeze-k8s-deploy-cluster-line-5)">────────────────────────────── [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-6)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="166.4" textLength="292.8" clip-path="url(#breeze-k8s-deploy-cluster-line-6)">--python                </text><text class="breeze-k8s-deploy-cluster-r6" x="341.6" y="166.4" textLength="24.4" clip-path="url(#breeze-k8 [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-7)">│</text><text class="breeze-k8s-deploy-cluster-r7" x="390.4" y="190.8" textLength="317.2" clip-path="url(#breeze-k8s-deploy-cluster-line-7)">3.11 | 3.12 | 3.13 | 3.14)</text><text class="breeze-k8s-deploy-cluster-r5" x="1451.8" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-7)">│</text><text class= [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-8)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="215.2" textLength="292.8" clip-path="url(#breeze-k8s-deploy-cluster-line-8)">--kubernetes-version    </text><text class="breeze-k8s-deploy-cluster-r1" x="390.4" y="215.2" textLength="671" clip-path="url(#breeze-k8s-deploy-cluster-line-8)">Kubernetes version used&# [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-9)">│</text><text class="breeze-k8s-deploy-cluster-r7" x="390.4" y="239.6" textLength="622.2" clip-path="url(#breeze-k8s-deploy-cluster-line-9)">| v1.31.12 | v1.32.8 | v1.33.4 | v1.34.0 | v1.35.0)</text><text class="breeze-k8s-deploy-cluster-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-depl [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-10)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="264" textLength="292.8" clip-path="url(#breeze-k8s-deploy-cluster-line-10)">--force-recreate-cluster</text><text class="breeze-k8s-deploy-cluster-r1" x="390.4" y="264" textLength="756.4" clip-path="url(#breeze-k8s-deploy-cluster-line-10)">Force recreation of the cluster  [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-11)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="288.4" textLength="292.8" clip-path="url(#breeze-k8s-deploy-cluster-line-11)">--force-venv-setup      </text><text class="breeze-k8s-deploy-cluster-r1" x="390.4" y="288.4" textLength="427" clip-path="url(#breeze-k8s-deploy-cluster-line-11)">Force recreation& [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="312.8" textLength="1464" clip-path="url(#breeze-k8s-deploy-cluster-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-cluster-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-12)">
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="337.2" textLength="24.4" clip-path="url(#breeze-k8s-deploy-cluster-line-13)">╭─</text><text class="breeze-k8s-deploy-cluster-r5" x="24.4" y="337.2" textLength="231.8" clip-path="url(#breeze-k8s-deploy-cluster-line-13)"> Build image flags </text><text class="breeze-k8s-deploy-cluster-r5" x="256.2" y="337.2" textLength="1183.4" clip-path="url(#breeze-k8s-deploy-cluster-line-13)">───────────────────────────────── [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-14)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="361.6" textLength="244" clip-path="url(#breeze-k8s-deploy-cluster-line-14)">--rebuild-base-image</text><text class="breeze-k8s-deploy-cluster-r1" x="292.8" y="361.6" textLength="658.8" clip-path="url(#breeze-k8s-deploy-cluster-line-14)">Rebuilds base Airflow image before&# [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-15)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="386" textLength="97.6" clip-path="url(#breeze-k8s-deploy-cluster-line-15)">--use-uv</text><text class="breeze-k8s-deploy-cluster-r1" x="122" y="386" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-15)">/</text><text class="breeze-k8s-deploy-cluster-r4" x="134.2" y="386" textLen [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-16)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="410.4" textLength="244" clip-path="url(#breeze-k8s-deploy-cluster-line-16)">--skip-image-build  </text><text class="breeze-k8s-deploy-cluster-r1" x="292.8" y="410.4" textLength="878.4" clip-path="url(#breeze-k8s-deploy-cluster-line-16)">Skips execution of breeze  [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="434.8" textLength="1464" clip-path="url(#breeze-k8s-deploy-cluster-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-cluster-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-17)">
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="459.2" textLength="24.4" clip-path="url(#breeze-k8s-deploy-cluster-line-18)">╭─</text><text class="breeze-k8s-deploy-cluster-r5" x="24.4" y="459.2" textLength="122" clip-path="url(#breeze-k8s-deploy-cluster-line-18)"> UI flags </text><text class="breeze-k8s-deploy-cluster-r5" x="146.4" y="459.2" textLength="1293.2" clip-path="url(#breeze-k8s-deploy-cluster-line-18)">───────────────────────────────────────────────── [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-19)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="483.6" textLength="292.8" clip-path="url(#breeze-k8s-deploy-cluster-line-19)">--skip-compile-ui-assets</text><text class="breeze-k8s-deploy-cluster-r1" x="341.6" y="483.6" textLength="854" clip-path="url(#breeze-k8s-deploy-cluster-line-19)">Skips execution of breeze ui [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="508" textLength="1464" clip-path="url(#breeze-k8s-deploy-cluster-line-20)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-cluster-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-20)">
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="532.4" textLength="24.4" clip-path="url(#breeze-k8s-deploy-cluster-line-21)">╭─</text><text class="breeze-k8s-deploy-cluster-r5" x="24.4" y="532.4" textLength="195.2" clip-path="url(#breeze-k8s-deploy-cluster-line-21)"> Common options </text><text class="breeze-k8s-deploy-cluster-r5" x="219.6" y="532.4" textLength="1220" clip-path="url(#breeze-k8s-deploy-cluster-line-21)">─────────────────────────────────────────── [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-22)">│</text><text class="breeze-k8s-deploy-cluster-r4" x="24.4" y="556.8" textLength="73.2" clip-path="url(#breeze-k8s-deploy-cluster-line-22)">--help</text><text class="breeze-k8s-deploy-cluster-r6" x="122" y="556.8" textLength="24.4" clip-path="url(#breeze-k8s-deploy-cluster-line-22)">-h</text><text class="breeze-k8s-deploy-cluster-r1" x="170.8" y="556.8" [...]
+</text><text class="breeze-k8s-deploy-cluster-r5" x="0" y="581.2" textLength="1464" clip-path="url(#breeze-k8s-deploy-cluster-line-23)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-deploy-cluster-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-cluster-line-23)">
+</text>
+ </g>
+ </g>
+</svg>
diff --git a/dev/breeze/doc/images/output_k8s_deploy-cluster.txt b/dev/breeze/doc/images/output_k8s_deploy-cluster.txt
new file mode 100644
index 00000000000..fa099647e20
--- /dev/null
+++ b/dev/breeze/doc/images/output_k8s_deploy-cluster.txt
@@ -0,0 +1 @@
+6b82815ccbac7e68a900d84d9b2be1cd
diff --git a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg
index 67830493589..93eeb3545d8 100644
--- a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg
+++ b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg
@@ -206,16 +206,16 @@
</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-8)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="215.2" textLength="1281" clip-path="url(#breeze-setup-check-all-params-in-groups-line-8)">ci-image:pull | ci-image:save | ci-image:verify | ci:fix-ownership | ci:free-space | ci:get-workflow-info</text [...]
</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-9)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="239.6" textLength="1281" clip-path="url(#breeze-setup-check-all-params-in-groups-line-9)">| ci:resource-check | ci:selective-check | ci:set-milestone | ci:upgrade | cleanup | doctor | do [...]
</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-10)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="264" textLength="1281" clip-path="url(#breeze-setup-check-all-params-in-groups-line-10)">| generate-migration-file | issues | issues:unassign | k8s | k8s:build-k8s-image | k8s:configure-cluster [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-11)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="288.4" textLength="1171.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-11)">| k8s:create-cluster | k8s:delete-cluster | k8s:deploy-airflow | k8s:dev | k8s:k9s | k8s:logs |&# [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-12)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="312.8" textLength="1281" clip-path="url(#breeze-setup-check-all-params-in-groups-line-12)">k8s:run-complete-tests | k8s:setup-env | k8s:shell | k8s:status | k8s:tests | k8s:upload-k8s-image | [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-13)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="337.2" textLength="1171.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-13)">pr:auto-triage | pr:stats | prod-image | prod-image:build | prod-image:load | prod-image:pull | < [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-14)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="361.6" textLength="1134.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-14)">prod-image:save | prod-image:verify | registry | registry:backfill | registry:extract-data | </text><text c [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-15)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="386" textLength="1098" clip-path="url(#breeze-setup-check-all-params-in-groups-line-15)">registry:publish-versions | release-management | release-management:add-back-references | </text><text class="breeze-setup-check-all- [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-16)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="410.4" textLength="1110.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-16)">release-management:check-release-files | release-management:clean-old-provider-artifacts | </text><text class="breeze-setup-check-all-par [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-17)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="434.8" textLength="1073.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-17)">release-management:constraints-version-check | release-management:create-minor-branch | </text><text class="breeze-setup-check-all-params [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-18)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="459.2" textLength="1134.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-18)">release-management:generate-airflowctl-changelog | release-management:generate-constraints | </text><text class="breeze-setup-check-all-p [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-19)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="483.6" textLength="1281" clip-path="url(#breeze-setup-check-all-params-in-groups-line-19)">release-management:generate-issue-content-airflow-ctl | release-management:generate-issue-content-core | </text><text class="breeze-setup-c [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-20)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="508" textLength="671" clip-path="url(#breeze-setup-check-all-params-in-groups-line-20)">release-management:generate-issue-content-helm-chart | </text><text class="breeze-setup-check-all-params-in-groups-r5" x="1451.8" y="508" textLength="12.2 [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-11)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="288.4" textLength="1281" clip-path="url(#breeze-setup-check-all-params-in-groups-line-11)">| k8s:create-cluster | k8s:delete-cluster | k8s:deploy-airflow | k8s:deploy-cluster | k8s:dev | k8s:k9s& [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-12)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="312.8" textLength="1085.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-12)">k8s:logs | k8s:run-complete-tests | k8s:setup-env | k8s:shell | k8s:status | k8s:tests | </text>< [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-13)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="337.2" textLength="1281" clip-path="url(#breeze-setup-check-all-params-in-groups-line-13)">k8s:upload-k8s-image | pr | pr:auto-triage | pr:stats | prod-image | prod-image:build | prod-image: [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-14)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="361.6" textLength="1061.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-14)">prod-image:pull | prod-image:save | prod-image:verify | registry | registry:backfill | </text><text class=" [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-15)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="386" textLength="890.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-15)">registry:extract-data | registry:publish-versions | release-management | </text><text class="breeze-setup-check-all-params-in-groups [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-16)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="410.4" textLength="1000.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-16)">release-management:add-back-references | release-management:check-release-files | </text><text class="breeze-setup-check-all-params-in-gr [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-17)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="434.8" textLength="1183.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-17)">release-management:clean-old-provider-artifacts | release-management:constraints-version-check | </text><text class="breeze-setup-check-a [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-18)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="459.2" textLength="1122.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-18)">release-management:create-minor-branch | release-management:generate-airflowctl-changelog | </text><text class="breeze-setup-check-all-pa [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-19)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="483.6" textLength="1195.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-19)">release-management:generate-constraints | release-management:generate-issue-content-airflow-ctl | </text><text class="breeze-setup-check- [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-20)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="508" textLength="1268.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-20)">release-management:generate-issue-content-core | release-management:generate-issue-content-helm-chart | </text><text class="breeze-setup-chec [...]
</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-21)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="532.4" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-21)">release-management:generate-issue-content-providers | release-management:generate-providers-metadata | </text><text class="breeze-setup-c [...]
</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-22)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="556.8" textLength="1110.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-22)">release-management:install-provider-distributions | release-management:merge-prod-images | </text><text class="breeze-setup-check-all-par [...]
</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-23)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="581.2" textLength="1281" clip-path="url(#breeze-setup-check-all-params-in-groups-line-23)">release-management:prepare-airflow-ctl-distributions | release-management:prepare-airflow-distributions |</text><text class="breeze-setup-check- [...]
diff --git a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
index ca70f9dbfed..1956792e47d 100644
--- a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
+++ b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
@@ -1 +1 @@
-84e48dec511d92250602531d6574ff5c
+6a605c405b9bd7f51d3ba9b294de9231
diff --git a/dev/breeze/doc/images/output_setup_regenerate-command-images.svg b/dev/breeze/doc/images/output_setup_regenerate-command-images.svg
index e2cb41ec5de..ddfe50c6819 100644
--- a/dev/breeze/doc/images/output_setup_regenerate-command-images.svg
+++ b/dev/breeze/doc/images/output_setup_regenerate-command-images.svg
@@ -223,11 +223,11 @@
</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-10)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="264" textLength="1171.2" clip-path="url(#breeze-setup-regenerate-command-images-line-10)">ci:get-workflow-info | ci:resource-check | ci:selective-check | ci:set-milestone | ci:upgrade | </text><text class= [...]
</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-11)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="288.4" textLength="1122.4" clip-path="url(#breeze-setup-regenerate-command-images-line-11)">cleanup | doctor | down | exec | generate-migration-file | issues | issues:unassign | k8s&# [...]
</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-12)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="312.8" textLength="1073.6" clip-path="url(#breeze-setup-regenerate-command-images-line-12)">k8s:build-k8s-image | k8s:configure-cluster | k8s:create-cluster | k8s:delete-cluster | </text><text class="breeze-setup- [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-13)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="337.2" textLength="1244.4" clip-path="url(#breeze-setup-regenerate-command-images-line-13)">k8s:deploy-airflow | k8s:dev | k8s:k9s | k8s:logs | k8s:run-complete-tests | k8s:setup-env | k8s:shel [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-14)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="361.6" textLength="1171.2" clip-path="url(#breeze-setup-regenerate-command-images-line-14)">| k8s:status | k8s:tests | k8s:upload-k8s-image | pr | pr:auto-triage | pr:stats | prod-image [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-15)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="386" textLength="1244.4" clip-path="url(#breeze-setup-regenerate-command-images-line-15)">prod-image:build | prod-image:load | prod-image:pull | prod-image:save | prod-image:verify | registry </text>< [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-16)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="410.4" textLength="1159" clip-path="url(#breeze-setup-regenerate-command-images-line-16)">| registry:backfill | registry:extract-data | registry:publish-versions | release-management | </text><text class="bre [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-17)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="434.8" textLength="1000.4" clip-path="url(#breeze-setup-regenerate-command-images-line-17)">release-management:add-back-references | release-management:check-release-files | </text><text class="breeze-setup-regenerate-command-images- [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-13)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="337.2" textLength="1195.6" clip-path="url(#breeze-setup-regenerate-command-images-line-13)">k8s:deploy-airflow | k8s:deploy-cluster | k8s:dev | k8s:k9s | k8s:logs | k8s:run-complete-tests | </t [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-14)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="361.6" textLength="1195.6" clip-path="url(#breeze-setup-regenerate-command-images-line-14)">k8s:setup-env | k8s:shell | k8s:status | k8s:tests | k8s:upload-k8s-image | pr | pr:auto-triage  [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-15)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="386" textLength="1183.4" clip-path="url(#breeze-setup-regenerate-command-images-line-15)">pr:stats | prod-image | prod-image:build | prod-image:load | prod-image:pull | prod-image:save | </text>< [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-16)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="410.4" textLength="1244.4" clip-path="url(#breeze-setup-regenerate-command-images-line-16)">prod-image:verify | registry | registry:backfill | registry:extract-data | registry:publish-versions |</text><text c [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-17)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="434.8" textLength="1244.4" clip-path="url(#breeze-setup-regenerate-command-images-line-17)">release-management | release-management:add-back-references | release-management:check-release-files |</text><text class="breeze-setup-r [...]
</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-18)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="459.2" textLength="1183.4" clip-path="url(#breeze-setup-regenerate-command-images-line-18)">release-management:clean-old-provider-artifacts | release-management:constraints-version-check | </text><text class="breeze-setup-regenerate- [...]
</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-19)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="483.6" textLength="1122.4" clip-path="url(#breeze-setup-regenerate-command-images-line-19)">release-management:create-minor-branch | release-management:generate-airflowctl-changelog | </text><text class="breeze-setup-regenerate-comma [...]
</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-20)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="508" textLength="1195.6" clip-path="url(#breeze-setup-regenerate-command-images-line-20)">release-management:generate-constraints | release-management:generate-issue-content-airflow-ctl | </text><text class="breeze-setup-regenerate-com [...]
diff --git a/dev/breeze/doc/images/output_setup_regenerate-command-images.txt b/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
index 2a4c8952872..8538e42bc7a 100644
--- a/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
+++ b/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
@@ -1 +1 @@
-58ee7b06908a1070135dc0ce3ff3b6d2
+842d090a8c3d4ea38e9eeedf15d1341e
diff --git a/dev/breeze/src/airflow_breeze/commands/kubernetes_commands.py b/dev/breeze/src/airflow_breeze/commands/kubernetes_commands.py
index 9b1506294b0..093cbeb960e 100644
--- a/dev/breeze/src/airflow_breeze/commands/kubernetes_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/kubernetes_commands.py
@@ -45,6 +45,7 @@ from airflow_breeze.commands.common_options import (
option_verbose,
)
from airflow_breeze.commands.production_image_commands import run_build_production_image
+from airflow_breeze.commands.ui_commands import run_compile_ui_assets
from airflow_breeze.global_constants import (
AIRFLOW_SOURCES_TO,
ALLOWED_EXECUTORS,
@@ -61,6 +62,7 @@ from airflow_breeze.utils.click_utils import BreezeGroup
from airflow_breeze.utils.confirm import confirm_action
from airflow_breeze.utils.console import Output, console_print, get_console
from airflow_breeze.utils.custom_param_types import CacheableChoice, CacheableDefault
+from airflow_breeze.utils.docker_command_utils import perform_environment_checks
from airflow_breeze.utils.kubernetes_utils import (
CHART_PATH,
K8S_CLUSTERS_PATH,
@@ -90,7 +92,12 @@ from airflow_breeze.utils.parallel import (
)
from airflow_breeze.utils.path_utils import AIRFLOW_ROOT_PATH
from airflow_breeze.utils.recording import generating_command_images
-from airflow_breeze.utils.run_utils import RunCommandResult, check_if_image_exists, run_command
+from airflow_breeze.utils.run_utils import (
+ RunCommandResult,
+ assert_prek_installed,
+ check_if_image_exists,
+ run_command,
+)
KUBERNETES_PYTEST_ARGS = [
"--strict-markers",
@@ -249,6 +256,18 @@ option_parallelism_cluster = click.option(
envvar="PARALLELISM",
show_default=True,
)
+option_skip_image_build = click.option(
+ "--skip-image-build",
+ help="Skips execution of breeze k8s build-k8s-image in deploy-cluster command.",
+ is_flag=True,
+ envvar="SKIP_IMAGE_BUILD",
+)
+option_skip_compile_ui_assets = click.option(
+ "--skip-compile-ui-assets",
+ help="Skips execution of breeze ui compile-assets in deploy-cluster command.",
+ is_flag=True,
+ envvar="SKIP_IMAGE_BUILD",
+)
option_all = click.option("--all", help="Apply it to all created clusters", is_flag=True, envvar="ALL")
K8S_CLUSTER_CREATE_PROGRESS_REGEXP = r".*airflow-python-[0-9.]+-v[0-9.].*|.*Connecting to localhost.*"
@@ -2231,3 +2250,87 @@ def run_complete_tests(
)
if result != 0:
sys.exit(result)
+
+
+@kubernetes_group.command(
+ name="deploy-cluster",
+ help="Create, configure kind cluster and build Airflow image for Airflow Chart deployment.",
+ context_settings=dict(
+ ignore_unknown_options=True,
+ ),
+)
+@option_force_venv_setup
+@option_force_recreate_cluster
+@option_python
+@option_kubernetes_version
+@option_rebuild_base_image
+@option_use_uv
+@option_skip_image_build
+@option_skip_compile_ui_assets
+def deploy_cluster(
+ force_venv_setup: bool,
+ force_recreate_cluster: bool,
+ python: str,
+ kubernetes_version: str,
+ rebuild_base_image: bool,
+ use_uv: bool,
+ skip_image_build: bool,
+ skip_compile_ui_assets: bool,
+):
+ console_print("[info]Syncing Virtual Environment[/]")
+ result = sync_virtualenv(force_venv_setup=force_venv_setup)
+ if result.returncode != 0:
+ sys.exit(result.returncode)
+ make_sure_kubernetes_tools_are_installed()
+
+ return_code, _ = _create_cluster(
+ python=python,
+ kubernetes_version=kubernetes_version,
+ output=None,
+ force_recreate_cluster=force_recreate_cluster,
+ num_tries=1,
+ show_hints=False,
+ )
+ if return_code != 0:
+ sys.exit(return_code)
+
+ return_code, _ = _configure_k8s_cluster(
+ python=python,
+ kubernetes_version=kubernetes_version,
+ output=None,
+ )
+ if return_code != 0:
+ sys.exit(return_code)
+
+ if skip_compile_ui_assets:
+ console_print("[info]Skipping compilation of Airflow UI assets[/]")
+ else:
+ console_print("[info]Compiling Airflow UI assets[/]")
+ perform_environment_checks()
+ assert_prek_installed()
+ result = run_compile_ui_assets(
+ dev=False, run_in_background=False, force_clean=False, additional_ui_hooks=[]
+ )
+ if result.returncode != 0:
+ sys.exit(result.returncode)
+
+ if skip_image_build:
+ console_print("[info]Skipping Airflow Image Build[/]")
+ else:
+ return_code, _ = _rebuild_k8s_image(
+ python=python,
+ rebuild_base_image=rebuild_base_image,
+ copy_local_sources=True,
+ use_uv=use_uv,
+ output=None,
+ )
+ if return_code != 0:
+ sys.exit(return_code)
+
+ return_code, _ = _upload_k8s_image(
+ python=python,
+ kubernetes_version=kubernetes_version,
+ output=None,
+ )
+ if return_code != 0:
+ sys.exit(return_code)
diff --git a/dev/breeze/src/airflow_breeze/commands/kubernetes_commands_config.py b/dev/breeze/src/airflow_breeze/commands/kubernetes_commands_config.py
index fcabbbcba93..274439111ea 100644
--- a/dev/breeze/src/airflow_breeze/commands/kubernetes_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/kubernetes_commands_config.py
@@ -24,6 +24,7 @@ KUBERNETES_CLUSTER_COMMANDS: dict[str, str | list[str]] = {
"configure-cluster",
"build-k8s-image",
"upload-k8s-image",
+ "deploy-cluster",
"deploy-airflow",
"dev",
"delete-cluster",
@@ -265,4 +266,17 @@ KUBERNETES_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
"options": ["--python", "--kubernetes-version", "--executor", "--force-venv-setup"],
}
],
+ "breeze k8s deploy-cluster": [
+ {
+ "name": "K8S cluster creation flags",
+ "options": [
+ "--python",
+ "--kubernetes-version",
+ "--force-recreate-cluster",
+ "--force-venv-setup",
+ ],
+ },
+ {"name": "Build image flags", "options": ["--rebuild-base-image", "--use-uv", "--skip-image-build"]},
+ {"name": "UI flags", "options": ["--skip-compile-ui-assets"]},
+ ],
}