cpl 2.0.0 → 2.0.1

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: c304577e2c02b5778a463b82ec9a72792bd10b727687402d66a504d390673fae
4
- data.tar.gz: dc28bb00740914362abba26bc61cee999f7ac2d955218dca0ea6dbeef58d465e
3
+ metadata.gz: 7601f22a541072ea22c5745496d77ee63409d8975903f14582e2681963e9e0ff
4
+ data.tar.gz: e3a189dbb1506571133924f9640bd144c6c1a7d1a7233096b9fbd13bef8b0a82
5
5
  SHA512:
6
- metadata.gz: 4812e651d14114d8d7bccf893cf50107dc9ba24b35679d633fc36d37589dfbae9d93eb8e8dc172bc66e4feb6039d6ab7c2093c0f35b1a544acab01b55c722c68
7
- data.tar.gz: 53013a61c2bcedc3ad10664f8d4a8874731013bb740abdb42fdac34dd82c3dc960b2643e9dea8227335040d2c2730eff6ed0cf47973d9344ddf5c5fc1bba7a99
6
+ metadata.gz: f0e2603b1e9d29e2f23deb2620edb94a51e13763a48985064facfd9ce2f9a61731267176766ad037e826430283c253300334e35514c9de60a5cda59a97c8b81a
7
+ data.tar.gz: 8c97ac2b7d5f349d90a41bf1acb8dea6e72d107cb275361792547ca9faa4b1bca66bc2566558a05fb336e1bee39d577c9c5cc0e3602971037cd2d44d5f975ed8
data/CHANGELOG.md CHANGED
@@ -14,7 +14,11 @@ Changes since the last non-beta release.
14
14
 
15
15
  _Please add entries here for your pull requests that are not yet released._
16
16
 
17
- ## [2.0.0.rc.1] - 2024-05-11
17
+ ### Fixed
18
+
19
+ - Fixed issue where `cleanup-stale-apps` command fails to delete apps with volumesets. [PR 175](https://github.com/shakacode/heroku-to-control-plane/pull/175) by [Rafael Gomes](https://github.com/rafaelgomesxyz).
20
+
21
+ ## [2.0.0] - 2024-05-14
18
22
 
19
23
  ### BREAKING CHANGES
20
24
 
@@ -186,8 +190,8 @@ _Please add entries here for your pull requests that are not yet released._
186
190
 
187
191
  - Initial release
188
192
 
189
- [Unreleased]: https://github.com/shakacode/heroku-to-control-plane/compare/v2.0.0.rc.1...HEAD
190
- [2.0.0.rc.1]: https://github.com/shakacode/heroku-to-control-plane/compare/v1.4.0...v2.0.0.rc.1
193
+ [Unreleased]: https://github.com/shakacode/heroku-to-control-plane/compare/v2.0.0...HEAD
194
+ [2.0.0]: https://github.com/shakacode/heroku-to-control-plane/compare/v1.4.0...v2.0.0
191
195
  [1.4.0]: https://github.com/shakacode/heroku-to-control-plane/compare/v1.3.0...v1.4.0
192
196
  [1.3.0]: https://github.com/shakacode/heroku-to-control-plane/compare/v1.2.0...v1.3.0
193
197
  [1.2.0]: https://github.com/shakacode/heroku-to-control-plane/compare/v1.1.2...v1.2.0
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cpl (2.0.0)
4
+ cpl (2.0.1)
5
5
  debug (~> 1.7.1)
6
6
  dotenv (~> 2.8.1)
7
7
  jwt (~> 2.8.1)
data/docs/commands.md CHANGED
@@ -66,7 +66,8 @@ cpl cleanup-images -a $APP_NAME
66
66
 
67
67
  ### `cleanup-stale-apps`
68
68
 
69
- - Deletes the whole app (GVC with all workloads and all images) for all stale apps
69
+ - Deletes the whole app (GVC with all workloads, all volumesets and all images) for all stale apps
70
+ - Also unbinds the app from the secrets policy, as long as both the identity and the policy exist (and are bound)
70
71
  - Stale apps are identified based on the creation date of the latest image
71
72
  - Specify the amount of days after an app should be considered stale through `stale_app_image_deployed_days` in the `.controlplane/controlplane.yml` file
72
73
  - If `match_if_app_name_starts_with` is `true` in the `.controlplane/controlplane.yml` file, it will delete all stale apps that start with the name
@@ -7,9 +7,10 @@ module Command
7
7
  app_option(required: true),
8
8
  skip_confirm_option
9
9
  ].freeze
10
- DESCRIPTION = "Deletes the whole app (GVC with all workloads and all images) for all stale apps"
10
+ DESCRIPTION = "Deletes the whole app (GVC with all workloads, all volumesets and all images) for all stale apps"
11
11
  LONG_DESCRIPTION = <<~DESC
12
- - Deletes the whole app (GVC with all workloads and all images) for all stale apps
12
+ - Deletes the whole app (GVC with all workloads, all volumesets and all images) for all stale apps
13
+ - Also unbinds the app from the secrets policy, as long as both the identity and the policy exist (and are bound)
13
14
  - Stale apps are identified based on the creation date of the latest image
14
15
  - Specify the amount of days after an app should be considered stale through `stale_app_image_deployed_days` in the `.controlplane/controlplane.yml` file
15
16
  - If `match_if_app_name_starts_with` is `true` in the `.controlplane/controlplane.yml` file, it will delete all stale apps that start with the name
@@ -28,8 +29,8 @@ module Command
28
29
 
29
30
  progress.puts
30
31
  stale_apps.each do |app|
31
- delete_gvc(app)
32
- delete_images(app)
32
+ delete_app(app[:name])
33
+ progress.puts
33
34
  end
34
35
  end
35
36
 
@@ -57,8 +58,7 @@ module Command
57
58
 
58
59
  apps.push({
59
60
  name: app_name,
60
- date: created_date,
61
- images: images.map { |current_image| current_image["name"] }
61
+ date: created_date
62
62
  })
63
63
  end
64
64
 
@@ -72,18 +72,8 @@ module Command
72
72
  Shell.confirm("\nAre you sure you want to delete these #{stale_apps.length} apps?")
73
73
  end
74
74
 
75
- def delete_gvc(app)
76
- step("Deleting app '#{app[:name]}'") do
77
- cp.gvc_delete(app[:name])
78
- end
79
- end
80
-
81
- def delete_images(app)
82
- app[:images].each do |image|
83
- step("Deleting image '#{image}'") do
84
- cp.image_delete(image)
85
- end
86
- end
75
+ def delete_app(app)
76
+ Cpl::Cli.start(["delete", "-a", app, "--yes"])
87
77
  end
88
78
  end
89
79
  end
@@ -36,7 +36,9 @@ module Command
36
36
  private
37
37
 
38
38
  def delete_single_workload(workload)
39
- return progress.puts("Workload '#{workload}' does not exist.") if cp.fetch_workload(workload).nil?
39
+ if cp.fetch_workload(workload).nil?
40
+ return progress.puts("Workload '#{workload}' does not exist in app '#{config.app}'.")
41
+ end
40
42
  return unless confirm_delete(workload)
41
43
 
42
44
  delete_workload(workload)
@@ -57,9 +59,9 @@ module Command
57
59
 
58
60
  def check_volumesets
59
61
  @volumesets = cp.fetch_volumesets["items"]
60
- return progress.puts("No volumesets to delete.") unless @volumesets.any?
62
+ return progress.puts("No volumesets to delete from app '#{config.app}'.") unless @volumesets.any?
61
63
 
62
- message = "The following volumesets will be deleted along with the app:"
64
+ message = "The following volumesets will be deleted along with the app '#{config.app}':"
63
65
  volumesets_list = @volumesets.map { |volumeset| "- #{volumeset['name']}" }.join("\n")
64
66
  progress.puts("#{Shell.color(message, :red)}\n#{volumesets_list}\n\n")
65
67
  end
@@ -67,9 +69,9 @@ module Command
67
69
  def check_images
68
70
  @images = cp.query_images["items"]
69
71
  .select { |image| image["name"].start_with?("#{config.app}:") }
70
- return progress.puts("No images to delete.") unless @images.any?
72
+ return progress.puts("No images to delete from app '#{config.app}'.") unless @images.any?
71
73
 
72
- message = "The following images will be deleted along with the app:"
74
+ message = "The following images will be deleted along with the app '#{config.app}':"
73
75
  images_list = @images.map { |image| "- #{image['name']}" }.join("\n")
74
76
  progress.puts("#{Shell.color(message, :red)}\n#{images_list}\n\n")
75
77
  end
@@ -91,14 +93,14 @@ module Command
91
93
  end
92
94
 
93
95
  def delete_workload(workload)
94
- step("Deleting workload '#{workload}'") do
96
+ step("Deleting workload '#{workload}' from app '#{config.app}'") do
95
97
  cp.delete_workload(workload)
96
98
  end
97
99
  end
98
100
 
99
101
  def delete_volumesets
100
102
  @volumesets.each do |volumeset|
101
- step("Deleting volumeset '#{volumeset['name']}'") do
103
+ step("Deleting volumeset '#{volumeset['name']}' from app '#{config.app}'") do
102
104
  # If the volumeset is attached to a workload, we need to delete the workload first
103
105
  workload = volumeset.dig("status", "usedByWorkload")&.split("/")&.last
104
106
  cp.delete_workload(workload) if workload
@@ -110,7 +112,7 @@ module Command
110
112
 
111
113
  def delete_images
112
114
  @images.each do |image|
113
- step("Deleting image '#{image['name']}'") do
115
+ step("Deleting image '#{image['name']}' from app '#{config.app}'") do
114
116
  cp.image_delete(image["name"])
115
117
  end
116
118
  end
@@ -127,7 +129,7 @@ module Command
127
129
  end
128
130
  return unless is_bound
129
131
 
130
- step("Unbinding identity from policy") do
132
+ step("Unbinding identity from policy for app '#{config.app}'") do
131
133
  cp.unbind_identity_from_policy(app_identity_link, app_secrets_policy)
132
134
  end
133
135
  end
data/lib/cpl/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cpl
4
- VERSION = "2.0.0"
4
+ VERSION = "2.0.1"
5
5
  MIN_CPLN_VERSION = "2.0.1"
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cpl
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Gordon
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-05-15 00:00:00.000000000 Z
12
+ date: 2024-05-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: debug