diff --git a/lib/uffizzi/cli/cluster.rb b/lib/uffizzi/cli/cluster.rb index 2b95e2cd..65902e83 100644 --- a/lib/uffizzi/cli/cluster.rb +++ b/lib/uffizzi/cli/cluster.rb @@ -29,6 +29,7 @@ def list method_option :'update-current-context', type: :boolean, required: false, default: true method_option :output, required: false, type: :string, aliases: '-o', enum: ['json', 'pretty-json'] method_option :'creation-source', required: false, type: :string + method_option :'k8s-version', required: false, type: :string def create(name = nil) run('create', { name: name }) end @@ -111,13 +112,15 @@ def handle_create_command(project_slug, command_args) cluster_name = command_args[:name] || options[:name] || ClusterService.generate_name creation_source = options[:"creation-source"] || ClusterService::MANUAL_CREATION_SOURCE - - unless ClusterService.valid_name?(cluster_name) - Uffizzi.ui.say_error_and_exit("Cluster name: #{cluster_name} is not valid.") - end - - manifest_file_path = options[:manifest] - params = cluster_creation_params(cluster_name, creation_source, manifest_file_path) + k8s_version = options[:"k8s-version"] + Uffizzi.ui.say_error_and_exit("Cluster name: #{cluster_name} is not valid.") unless ClusterService.valid_name?(cluster_name) + + params = cluster_creation_params( + name: cluster_name, + creation_source: creation_source, + manifest_file_path: options[:manifest], + k8s_version: k8s_version, + ) response = create_cluster(ConfigFile.read_option(:server), project_slug, params) return ResponseHelper.handle_failed_response(response) unless ResponseHelper.created?(response) @@ -236,7 +239,7 @@ def say_error_update_kubeconfig(cluster_data) end end - def cluster_creation_params(name, creation_source, manifest_file_path) + def cluster_creation_params(name:, creation_source:, manifest_file_path:, k8s_version:) manifest_content = load_manifest_file(manifest_file_path) oidc_token = Uffizzi::ConfigFile.read_option(:oidc_token) @@ -245,6 +248,7 @@ def cluster_creation_params(name, creation_source, manifest_file_path) name: name, manifest: manifest_content, creation_source: creation_source, + k8s_version: k8s_version, }, token: oidc_token, } @@ -300,6 +304,7 @@ def handle_succeed_describe(cluster_data) status: cluster_data[:state], created: Time.strptime(cluster_data[:created_at], '%Y-%m-%dT%H:%M:%S.%N').strftime('%a %b %d %H:%M:%S %Y'), url: cluster_data[:host], + k8s_version: cluster_data[:k8s_version], } rendered_cluster_data = if Uffizzi.ui.output_format.nil? diff --git a/lib/uffizzi/cli/dev.rb b/lib/uffizzi/cli/dev.rb index 2a5a577c..c815f448 100644 --- a/lib/uffizzi/cli/dev.rb +++ b/lib/uffizzi/cli/dev.rb @@ -13,6 +13,7 @@ class Cli::Dev < Thor method_option :quiet, type: :boolean, aliases: :q method_option :'default-repo', type: :string method_option :kubeconfig, type: :string + method_option :'k8s-version', required: false, type: :string def start(config_path = 'skaffold.yaml') Uffizzi::AuthHelper.check_login(options[:project]) DevService.check_skaffold_existence @@ -50,9 +51,11 @@ def stop private def start_create_cluster - cluster_name = ClusterService.generate_name - creation_source = ClusterService::MANUAL_CREATION_SOURCE - params = cluster_creation_params(cluster_name, creation_source) + params = cluster_creation_params( + name: ClusterService.generate_name, + creation_source: ClusterService::MANUAL_CREATION_SOURCE, + k8s_version: options[:"k8s-version"], + ) Uffizzi.ui.say('Start creating a cluster') response = create_cluster(ConfigFile.read_option(:server), project_slug, params) return ResponseHelper.handle_failed_response(response) unless ResponseHelper.created?(response) @@ -105,7 +108,7 @@ def update_clusters_config(id, params) ConfigFile.write_option(:clusters, clusters_config) end - def cluster_creation_params(name, creation_source) + def cluster_creation_params(name:, creation_source:, k8s_version:) oidc_token = Uffizzi::ConfigFile.read_option(:oidc_token) { @@ -113,6 +116,7 @@ def cluster_creation_params(name, creation_source) name: name, manifest: nil, creation_source: creation_source, + k8s_version: k8s_version, }, token: oidc_token, } diff --git a/man/uffizzi-cluster-create.ronn b/man/uffizzi-cluster-create.ronn index 0420fe82..bed1e943 100644 --- a/man/uffizzi-cluster-create.ronn +++ b/man/uffizzi-cluster-create.ronn @@ -1,3 +1,4 @@ +uffizzi cluster create -h uffizzi-cluster-create - create a cluster ================================================================ @@ -12,9 +13,17 @@ uffizzi-cluster-create - create a cluster https://docs.uffizzi.com/references/cli/ ## FLAGS + --name Option is deprecated and will be removed in the newer versions. - Please use a positional argument instead: uffizzi cluster create my-awesome-name. + Please use a positional argument instead: uffizzi cluster create + my-awesome-name. + + --k8s-version= + Specify which version of the Kubernetes API to use when creating + the cluster, formatted as [MAJOR].[MINOR]. Defaults to 1.27. + Minor versions point to the latest release of the corresponding k3s + minor version. See https://github.com/k3s-io/k3s/releases --kubeconfig="/path/to/your/kubeconfig" Path to kubeconfig file diff --git a/man/uffizzi-dev-start.ronn b/man/uffizzi-dev-start.ronn index 59e510c4..35b5c02a 100644 --- a/man/uffizzi-dev-start.ronn +++ b/man/uffizzi-dev-start.ronn @@ -31,10 +31,11 @@ uffizzi-dev-start - start a development environment Currently supports skaffold.yaml files. ## FLAGS - --build="" - This option specifies whether to build images on the - local environment or on the remote Uffizzi cluster. - Possible values are "local" or "remote". + --k8s-version= + Specify which version of the Kubernetes API to use when creating + the cluster, formatted as [MAJOR].[MINOR]. Defaults to 1.27. + Minor versions point to the latest release of the corresponding k3s + minor version. See https://github.com/k3s-io/k3s/releases --default-repo="" A public or private repo used to push/pull build