uffizzi-cli 2.1.0 → 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8fc9021c07ec1fbbbd32baab4e37dcdf3eb9b7368843701e9c0a086da8eefefe
4
- data.tar.gz: ccf95b0bd9ae6fffa906a15012825a9c9d4b209263e0735ce200d5ba5ca953b8
3
+ metadata.gz: 53375ab753d707ea69a899c201838dcc0874a185185532b64f3a3cb8b07720fa
4
+ data.tar.gz: 177486674f4ba6f11935536cd538ddc6e587ba5a330b738196f082b8fff96c3a
5
5
  SHA512:
6
- metadata.gz: aeb135bb03097b24c39b408e10bc31fa995d3cd4da3284eacc07be126b04a5aaf18a02e5cf432e5e9f46a24bb842c79209d3100ec8d0b94efde7f8c9a5b43ae4
7
- data.tar.gz: 29d2160ec30fd61f9f5bf96ef24dea226b6388e9ab1bcf47b3c6a66a2b518df17bc9013d5d036dc5f3c6b517e30f2de0015a46d2ce933f8332113943e84a9b54
6
+ metadata.gz: 7278e21c0ce0a61da3403a874d7ce1e1d9771fd9f45867e4fdf126840fb4ddbc0e86c037be58a3bd9d0311631a819081361c4626c78cf11fdab3e6c89380fee6
7
+ data.tar.gz: 3d09264798892e9c97074d073940922bb2e7703941496bc5a77c6ba555ba6de3e275c3151b7dbd480d9e7b6be6f350ea1e939898c33b2bcfc8e64b8f562d6193
@@ -11,8 +11,6 @@ require 'uffizzi/services/cluster_service'
11
11
  require 'uffizzi/services/kubeconfig_service'
12
12
  require 'uffizzi/services/cluster/disconnect_service'
13
13
 
14
- MANUAL = 'manual'
15
-
16
14
  module Uffizzi
17
15
  class Cli::Cluster < Thor
18
16
  class Error < StandardError; end
@@ -115,7 +113,7 @@ module Uffizzi
115
113
  end
116
114
 
117
115
  cluster_name = command_args[:name] || options[:name] || ClusterService.generate_name
118
- creation_source = options[:"creation-source"] || MANUAL
116
+ creation_source = options[:"creation-source"] || ClusterService::MANUAL_CREATION_SOURCE
119
117
 
120
118
  unless ClusterService.valid_name?(cluster_name)
121
119
  Uffizzi.ui.say_error_and_exit("Cluster name: #{cluster_name} is not valid.")
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'uffizzi/services/command_service'
4
4
  require 'uffizzi/services/cluster_service'
5
+ require 'uffizzi/services/dev_service'
5
6
  require 'uffizzi/services/kubeconfig_service'
6
7
 
7
8
  module Uffizzi
@@ -9,12 +10,22 @@ module Uffizzi
9
10
  include ApiClient
10
11
 
11
12
  desc 'start [CONFIG]', 'Start dev environment'
13
+ method_option :quiet, type: :boolean, aliases: :q
14
+ method_option :'default-repo', type: :string
15
+ method_option :kubeconfig, type: :string
12
16
  def start(config_path = 'skaffold.yaml')
13
- check_skaffold_existence
17
+ DevService.check_skaffold_existence
18
+ DevService.check_running_daemon if options[:quiet]
19
+ DevService.check_skaffold_config_existence(config_path)
14
20
  check_login
15
21
  cluster_id, cluster_name = start_create_cluster
16
22
  kubeconfig = wait_cluster_creation(cluster_name)
17
- launch_scaffold(config_path)
23
+
24
+ if options[:quiet]
25
+ launch_demonise_skaffold(config_path)
26
+ else
27
+ DevService.start_basic_skaffold(config_path, options)
28
+ end
18
29
  ensure
19
30
  if defined?(cluster_name).present? && defined?(cluster_id).present?
20
31
  kubeconfig = defined?(kubeconfig).present? ? kubeconfig : nil
@@ -22,6 +33,20 @@ module Uffizzi
22
33
  end
23
34
  end
24
35
 
36
+ desc 'stop', 'Stop dev environment'
37
+ def stop
38
+ return Uffizzi.ui.say('Uffizzi dev is not running') unless File.exist?(DevService.pid_path)
39
+
40
+ pid = File.read(DevService.pid_path).to_i
41
+ File.delete(DevService.pid_path)
42
+
43
+ Uffizzi.process.kill('QUIT', pid)
44
+ Uffizzi.ui.say('Uffizzi dev was stopped')
45
+ rescue Errno::ESRCH
46
+ Uffizzi.ui.say('Uffizzi dev is not running')
47
+ File.delete(DevService.pid_path)
48
+ end
49
+
25
50
  private
26
51
 
27
52
  def check_login
@@ -31,7 +56,7 @@ module Uffizzi
31
56
 
32
57
  def start_create_cluster
33
58
  cluster_name = ClusterService.generate_name
34
- creation_source = MANUAL
59
+ creation_source = ClusterService::MANUAL_CREATION_SOURCE
35
60
  params = cluster_creation_params(cluster_name, creation_source)
36
61
  Uffizzi.ui.say('Start creating a cluster')
37
62
  response = create_cluster(ConfigFile.read_option(:server), project_slug, params)
@@ -56,7 +81,7 @@ module Uffizzi
56
81
  end
57
82
 
58
83
  def handle_succeed_cluster_creation(cluster_data)
59
- kubeconfig_path = KubeconfigService.default_path
84
+ kubeconfig_path = options[:kubeconfig] || KubeconfigService.default_path
60
85
  parsed_kubeconfig = parse_kubeconfig(cluster_data[:kubeconfig])
61
86
 
62
87
  Uffizzi.ui.say("Cluster with name: #{cluster_data[:name]} was created.")
@@ -99,6 +124,8 @@ module Uffizzi
99
124
  end
100
125
 
101
126
  def handle_delete_cluster(cluster_id, cluster_name, kubeconfig)
127
+ return if cluster_id.nil? || cluster_name.nil?
128
+
102
129
  exclude_kubeconfig(cluster_id, kubeconfig) if kubeconfig.present?
103
130
 
104
131
  params = {
@@ -149,25 +176,19 @@ module Uffizzi
149
176
  Psych.safe_load(Base64.decode64(kubeconfig))
150
177
  end
151
178
 
152
- def launch_scaffold(config_path)
153
- Uffizzi.ui.say('Start skaffold')
154
- cmd = "skaffold dev --filename='#{config_path}'"
179
+ def launch_demonise_skaffold(config_path)
180
+ Uffizzi.process.daemon(true)
155
181
 
156
- Uffizzi.ui.popen2e(cmd) do |_stdin, stdout_and_stderr, wait_thr|
157
- stdout_and_stderr.each { |l| puts l }
158
- wait_thr.value
182
+ at_exit do
183
+ File.delete(DevService.pid_path) if File.exist?(DevService.pid_path)
159
184
  end
160
- end
161
-
162
- def check_skaffold_existence
163
- cmd = 'skaffold version'
164
- stdout_str, stderr_str = Uffizzi.ui.capture3(cmd)
165
-
166
- return if stdout_str.present? && stderr_str.blank?
167
185
 
168
- Uffizzi.ui.say_error_and_exit(stderr_str)
186
+ File.delete(DevService.logs_path) if File.exist?(DevService.logs_path)
187
+ File.write(DevService.pid_path, Uffizzi.process.pid)
188
+ DevService.start_check_pid_file_existence
189
+ DevService.start_demonised_skaffold(config_path, options)
169
190
  rescue StandardError => e
170
- Uffizzi.ui.say_error_and_exit(e.message)
191
+ File.open(DevService.logs_path, 'a') { |f| f.puts(e.message) }
171
192
  end
172
193
 
173
194
  def project_slug
@@ -5,6 +5,7 @@ require 'uffizzi/helpers/file_helper'
5
5
 
6
6
  module Uffizzi
7
7
  class ConfigFile
8
+ CONFIG_DIR = "#{Dir.home}/.config/uffizzi"
8
9
  CONFIG_PATH = "#{Dir.home}/.config/uffizzi/config_default.json"
9
10
 
10
11
  class << self
@@ -9,6 +9,7 @@ class ClusterService
9
9
  CLUSTER_STATE_FAILED_DEPLOY_NAMESPACE = 'failed_deploy_namespace'
10
10
  CLUSTER_STATE_FAILED = 'failed'
11
11
  CLUSTER_NAME_MAX_LENGTH = 15
12
+ MANUAL_CREATION_SOURCE = 'manual'
12
13
 
13
14
  class << self
14
15
  include ApiClient
@@ -0,0 +1,108 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'uffizzi/clients/api/api_client'
4
+
5
+ class DevService
6
+ class << self
7
+ include ApiClient
8
+
9
+ DEFAULT_REGISTRY_REPO = 'registry.uffizzi.com'
10
+
11
+ def check_running_daemon
12
+ return unless File.exist?(pid_path)
13
+
14
+ pid = File.read(pid_path)
15
+ File.delete(pid_path) if pid.blank?
16
+ Uffizzi.process.kill(0, pid.to_i)
17
+
18
+ Uffizzi.ui.say_error_and_exit("You have already started uffizzi dev as daemon. To stop the process do 'uffizzi dev stop'")
19
+ rescue Errno::ESRCH
20
+ File.delete(pid_path)
21
+ end
22
+
23
+ def start_check_pid_file_existence
24
+ Thread.new do
25
+ loop do
26
+ Uffizzi.process.kill('QUIT', Uffizzi.process.pid) unless File.exist?(pid_path)
27
+ sleep(1)
28
+ end
29
+ end
30
+ end
31
+
32
+ def start_basic_skaffold(config_path, options)
33
+ Uffizzi.ui.say('Start skaffold')
34
+ cmd = build_skaffold_dev_command(config_path, options)
35
+
36
+ Uffizzi.ui.popen2e(cmd) do |_stdin, stdout_and_stderr, wait_thr|
37
+ stdout_and_stderr.each { |l| Uffizzi.ui.say(l) }
38
+ wait_thr.value
39
+ end
40
+ end
41
+
42
+ def start_demonised_skaffold(config_path, options)
43
+ File.write(logs_path, "Start skaffold\n")
44
+ cmd = build_skaffold_dev_command(config_path, options)
45
+
46
+ Uffizzi.ui.popen2e(cmd) do |_stdin, stdout_and_stderr, wait_thr|
47
+ File.open(logs_path, 'a') do |f|
48
+ stdout_and_stderr.each do |line|
49
+ f.puts(line)
50
+ f.flush
51
+ end
52
+ end
53
+
54
+ wait_thr.value
55
+ end
56
+ end
57
+
58
+ def check_skaffold_existence
59
+ cmd = 'skaffold version'
60
+ stdout_str, stderr_str = Uffizzi.ui.capture3(cmd)
61
+
62
+ return if stdout_str.present? && stderr_str.blank?
63
+
64
+ Uffizzi.ui.say_error_and_exit(stderr_str)
65
+ rescue StandardError => e
66
+ Uffizzi.ui.say_error_and_exit(e.message)
67
+ end
68
+
69
+ def check_skaffold_config_existence(config_path)
70
+ msg = 'A valid dev environment configuration is required. Please provide a valid config,'\
71
+ "\r\n"\
72
+ 'or run `skaffold init` to generate a skaffold.yaml configuration.'\
73
+ "\r\n"\
74
+ 'See the `uffizzi dev start --help` page for supported configs and usage details.'
75
+
76
+ Uffizzi.ui.say_error_and_exit(msg) unless File.exist?(config_path)
77
+ end
78
+
79
+ def pid_path
80
+ File.join(Uffizzi::ConfigFile::CONFIG_DIR, 'uffizzi_dev.pid')
81
+ end
82
+
83
+ def logs_path
84
+ File.join(Uffizzi::ConfigFile::CONFIG_DIR, 'uffizzi_dev.log')
85
+ end
86
+
87
+ def build_skaffold_dev_command(config_path, options)
88
+ cmd = [
89
+ 'skaffold dev',
90
+ "--filename='#{config_path}'",
91
+ "--default-repo='#{default_registry_repo(options[:'default-repo'])}'",
92
+ "--kubeconfig='#{default_kubeconfig_path(options[:kubeconfig])}'",
93
+ ]
94
+
95
+ cmd.join(' ')
96
+ end
97
+
98
+ def default_registry_repo(repo)
99
+ repo || DEFAULT_REGISTRY_REPO
100
+ end
101
+
102
+ def default_kubeconfig_path(kubeconfig_path)
103
+ path = kubeconfig_path || KubeconfigService.default_path
104
+
105
+ File.expand_path(path)
106
+ end
107
+ end
108
+ end
@@ -81,7 +81,9 @@ class KubeconfigService
81
81
  end
82
82
 
83
83
  def default_path
84
- kubeconfig_env_path || Uffizzi.configuration.default_kubeconfig_path
84
+ path = kubeconfig_env_path || Uffizzi.configuration.default_kubeconfig_path
85
+
86
+ File.expand_path(path)
85
87
  end
86
88
 
87
89
  def read_kubeconfig(filepath)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Uffizzi
4
- VERSION = '2.1.0'
4
+ VERSION = '2.1.2'
5
5
  end
data/lib/uffizzi.rb CHANGED
@@ -36,5 +36,9 @@ module Uffizzi
36
36
  def root
37
37
  @root ||= Pathname.new(File.expand_path('..', __dir__))
38
38
  end
39
+
40
+ def process
41
+ @process ||= Process
42
+ end
39
43
  end
40
44
  end
@@ -1,29 +1,99 @@
1
1
  .\" generated with Ronn-NG/v0.9.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.9.1
3
- .TH "UFFIZZI\-DEV\-START" "" "September 2023" ""
3
+ .TH "UFFIZZI\-DEV\-START" "" "October 2023" ""
4
4
  .SH "NAME"
5
- \fBuffizzi\-dev\-start\fR \- start development environment
5
+ \fBuffizzi\-dev\-start\fR \- start a development environment
6
6
  .SH "SYNOPSIS"
7
7
  .nf
8
- uffizzi dev start [SKAFFOLD_CONFIG_FILE_PATH]
8
+ uffizzi dev start [CONFIG_FILE] [FLAGS]
9
9
  .fi
10
10
  .SH "DESCRIPTION"
11
11
  .nf
12
- Creates a new cluster and start skaffold\. If no SKAFFOLD_CONFIG_FILE_PATH is specified,
13
- the default path will be used\.
14
- Default SKAFFOLD_CONFIG_FILE_PATH is \'skaffold\.yaml\'
12
+ Creates a Uffizzi cluster preconfigured for development
13
+ workflows, including building, pushing, and deploying
14
+ your changes every time project files are saved\.
15
+ current\-context is updated in kubeconfig file\.
16
+
17
+ This command watches for file changes in a given local
18
+ project directory, as specified in your configuration file\.
19
+ It then serializes those changes and redeploys them onto
20
+ a Uffizzi cluster\.
21
+
22
+ The command looks for a configuration at the specified
23
+ path CONFIG_FILE\. Skaffold configurations are currently
24
+ supported\. For help creating a skaffold\.yaml file, see:
25
+ https://skaffold\.dev/docs/init/
26
+
27
+ If a kubeconfig exists
15
28
 
16
29
  For more information on Uffizzi clusters, see:
17
30
  https://docs\.uffizzi\.com/references/cli/
18
31
  .fi
32
+ .SH "POSITIONAL ARGUMENTS"
33
+ .nf
34
+ [CONFIG_FILE]
35
+ Path to the development environment configuration file\.
36
+ Currently supports skaffold\.yaml files\.
37
+ .fi
38
+ .SH "FLAGS"
39
+ .nf
40
+ \-\-build="<local\-or\-remote>"
41
+ This option specifies whether to build images on the
42
+ local environment or on the remote Uffizzi cluster\.
43
+ Possible values are "local" or "remote"\.
44
+
45
+ \-\-default\-repo="<container\-registry\-domain>"
46
+ A public or private repo used to push/pull build
47
+ artifacts\. Overrides the global default image registry:
48
+ "registry\.uffizzi\.com"\. See `uffizzi connect \-h` for
49
+ adding private registry credentials\.
50
+
51
+ \-\-quiet, \-q
52
+ Run the development process in detached mode (i\.e\., in
53
+ the background)\. Without this option, logs are streamed
54
+ to the terminal in the foreground\. Run \'uffizzi dev stop`
55
+ to stop the detached process\.
56
+
57
+ \-\-help, \-h
58
+ Show this message and exit\.
59
+
60
+ \-\-kubeconfig="/path/to/your/kubeconfig"
61
+ Path to kubeconfig file\. If this option is not specified,
62
+ this command looks for the file at ~/\.kube/config\.
63
+ .fi
19
64
  .SH "EXAMPLES"
20
65
  .nf
21
- To start development environment, run:
66
+ If your configuration file is in the current working
67
+ directory and you want to use an auto\-generated name,
68
+ run:
22
69
 
23
70
  $ uffizzi dev start
24
71
 
25
- To start development environment with custom skaffold\.yaml file, run:
72
+ To start a dev environment using a skaffold\.yaml config
73
+ file in directory \'~/foo\', run:
74
+
75
+ $ uffizzi dev start ~/foo/skaffold\.yaml
76
+
77
+ To start a dev environment in quiet mode,
78
+ run:
79
+
80
+ $ uffizzi dev start \-\-quiet
81
+
82
+ To push your build artifacts to a private Docker Hub repo
83
+ called \'acme/foo\', first add your Docker Hub credentials:
84
+
85
+ $ uffizzi connect docker\-hub
86
+ (See `uffizzi connect \-h` for other registry options)
87
+
88
+ \|\.\|\.\|\.then override the default repo:
89
+
90
+ $ uffizzi dev start \e
91
+ \-\-default\-repo="hub\.docker\.com/acme/foo"
92
+
93
+ To start a dev environment using an alternate kubeconfig file,
94
+ run:
26
95
 
27
- $ uffizzi cluster create /path/to/skaffold\.yaml
96
+ $ uffizzi dev start \e
97
+ \-\-kubeconfig="/path/to/alternate/kubeconfig"
28
98
  .fi
29
99
 
@@ -1,22 +1,90 @@
1
- uffizzi-dev-start - start development environment
1
+ uffizzi-dev-start - start a development environment
2
2
  ================================================================
3
3
 
4
4
  ## SYNOPSIS
5
- uffizzi dev start [SKAFFOLD_CONFIG_FILE_PATH]
5
+ uffizzi dev start [CONFIG_FILE] [FLAGS]
6
6
 
7
7
  ## DESCRIPTION
8
- Creates a new cluster and start skaffold. If no SKAFFOLD_CONFIG_FILE_PATH is specified,
9
- the default path will be used.
10
- Default SKAFFOLD_CONFIG_FILE_PATH is 'skaffold.yaml'
8
+ Creates a Uffizzi cluster preconfigured for development
9
+ workflows, including building, pushing, and deploying
10
+ your changes every time project files are saved.
11
+ current-context is updated in kubeconfig file.
12
+
13
+ This command watches for file changes in a given local
14
+ project directory, as specified in your configuration file.
15
+ It then serializes those changes and redeploys them onto
16
+ a Uffizzi cluster.
17
+
18
+ The command looks for a configuration at the specified
19
+ path CONFIG_FILE. Skaffold configurations are currently
20
+ supported. For help creating a skaffold.yaml file, see:
21
+ https://skaffold.dev/docs/init/
22
+
23
+ If a kubeconfig exists
11
24
 
12
25
  For more information on Uffizzi clusters, see:
13
26
  https://docs.uffizzi.com/references/cli/
14
27
 
28
+ ## POSITIONAL ARGUMENTS
29
+ [CONFIG_FILE]
30
+ Path to the development environment configuration file.
31
+ Currently supports skaffold.yaml files.
32
+
33
+ ## FLAGS
34
+ --build="<local-or-remote>"
35
+ This option specifies whether to build images on the
36
+ local environment or on the remote Uffizzi cluster.
37
+ Possible values are "local" or "remote".
38
+
39
+ --default-repo="<container-registry-domain>"
40
+ A public or private repo used to push/pull build
41
+ artifacts. Overrides the global default image registry:
42
+ "registry.uffizzi.com". See `uffizzi connect -h` for
43
+ adding private registry credentials.
44
+
45
+ --quiet, -q
46
+ Run the development process in detached mode (i.e., in
47
+ the background). Without this option, logs are streamed
48
+ to the terminal in the foreground. Run 'uffizzi dev stop`
49
+ to stop the detached process.
50
+
51
+ --help, -h
52
+ Show this message and exit.
53
+
54
+ --kubeconfig="/path/to/your/kubeconfig"
55
+ Path to kubeconfig file. If this option is not specified,
56
+ this command looks for the file at ~/.kube/config.
57
+
15
58
  ## EXAMPLES
16
- To start development environment, run:
59
+ If your configuration file is in the current working
60
+ directory and you want to use an auto-generated name,
61
+ run:
17
62
 
18
63
  $ uffizzi dev start
19
64
 
20
- To start development environment with custom skaffold.yaml file, run:
65
+ To start a dev environment using a skaffold.yaml config
66
+ file in directory '~/foo', run:
67
+
68
+ $ uffizzi dev start ~/foo/skaffold.yaml
69
+
70
+ To start a dev environment in quiet mode,
71
+ run:
72
+
73
+ $ uffizzi dev start --quiet
74
+
75
+ To push your build artifacts to a private Docker Hub repo
76
+ called 'acme/foo', first add your Docker Hub credentials:
77
+
78
+ $ uffizzi connect docker-hub
79
+ (See `uffizzi connect -h` for other registry options)
80
+
81
+ ...then override the default repo:
82
+
83
+ $ uffizzi dev start \
84
+ --default-repo="hub.docker.com/acme/foo"
85
+
86
+ To start a dev environment using an alternate kubeconfig file,
87
+ run:
21
88
 
22
- $ uffizzi cluster create /path/to/skaffold.yaml
89
+ $ uffizzi dev start \
90
+ --kubeconfig="/path/to/alternate/kubeconfig"
@@ -0,0 +1,41 @@
1
+ .\" generated with Ronn-NG/v0.9.1
2
+ .\" http://github.com/apjanke/ronn-ng/tree/0.9.1
3
+ .TH "UFFIZZI\-DEV\-STOP" "" "October 2023" ""
4
+ .SH "NAME"
5
+ \fBuffizzi\-dev\-stop\fR \- stop a development environment
6
+ .SH "SYNOPSIS"
7
+ .nf
8
+ uffizzi dev stop
9
+ .fi
10
+ .SH "DESCRIPTION"
11
+ .nf
12
+ Stops a dev environment and deletes the backing
13
+ Uffizzi cluster resources, including any persistent
14
+ volumes, and the namespace itself\. The Uffizzi
15
+ cluster config is deleted from the kubeconfig file\.
16
+
17
+ This command watches for file changes in a given local
18
+ project directory, as specified in your configuration file\.
19
+ It then serializes those changes and redeploys them onto
20
+ a Uffizzi cluster\.
21
+
22
+ The command looks for a configuration at the specified
23
+ path CONFIG_FILE\. Skaffold configurations are currently
24
+ supported\. For help creating a skaffold\.yaml file, see:
25
+ https://skaffold\.dev/docs/init/
26
+
27
+ For more information on Uffizzi clusters, see:
28
+ https://docs\.uffizzi\.com/references/cli/
29
+ .fi
30
+ .SH "FLAGS"
31
+ .nf
32
+ \-\-help, \-h
33
+ Show this message and exit\.
34
+ .fi
35
+ .SH "EXAMPLES"
36
+ .nf
37
+ To stop a dev environment, run:
38
+
39
+ $ uffizzi dev stop
40
+ .fi
41
+
@@ -0,0 +1,33 @@
1
+ uffizzi-dev-stop - stop a development environment
2
+ ================================================================
3
+
4
+ ## SYNOPSIS
5
+ uffizzi dev stop
6
+
7
+ ## DESCRIPTION
8
+ Stops a dev environment and deletes the backing
9
+ Uffizzi cluster resources, including any persistent
10
+ volumes, and the namespace itself. The Uffizzi
11
+ cluster config is deleted from the kubeconfig file.
12
+
13
+ This command watches for file changes in a given local
14
+ project directory, as specified in your configuration file.
15
+ It then serializes those changes and redeploys them onto
16
+ a Uffizzi cluster.
17
+
18
+ The command looks for a configuration at the specified
19
+ path CONFIG_FILE. Skaffold configurations are currently
20
+ supported. For help creating a skaffold.yaml file, see:
21
+ https://skaffold.dev/docs/init/
22
+
23
+ For more information on Uffizzi clusters, see:
24
+ https://docs.uffizzi.com/references/cli/
25
+
26
+ ## FLAGS
27
+ --help, -h
28
+ Show this message and exit.
29
+
30
+ ## EXAMPLES
31
+ To stop a dev environment, run:
32
+
33
+ $ uffizzi dev stop
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uffizzi-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Thurman
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2023-09-29 00:00:00.000000000 Z
12
+ date: 2023-10-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -450,6 +450,7 @@ files:
450
450
  - lib/uffizzi/services/cluster_service.rb
451
451
  - lib/uffizzi/services/command_service.rb
452
452
  - lib/uffizzi/services/compose_file_service.rb
453
+ - lib/uffizzi/services/dev_service.rb
453
454
  - lib/uffizzi/services/env_variables_service.rb
454
455
  - lib/uffizzi/services/github_service.rb
455
456
  - lib/uffizzi/services/kubeconfig_service.rb
@@ -521,6 +522,8 @@ files:
521
522
  - man/uffizzi-connect.ronn
522
523
  - man/uffizzi-dev-start
523
524
  - man/uffizzi-dev-start.ronn
525
+ - man/uffizzi-dev-stop
526
+ - man/uffizzi-dev-stop.ronn
524
527
  - man/uffizzi-disconnect
525
528
  - man/uffizzi-disconnect.ronn
526
529
  - man/uffizzi-login