diff --git a/lib/kubernetes-deploy/deploy_task.rb b/lib/kubernetes-deploy/deploy_task.rb index 7c4ba7445..c81d69c25 100644 --- a/lib/kubernetes-deploy/deploy_task.rb +++ b/lib/kubernetes-deploy/deploy_task.rb @@ -82,6 +82,7 @@ def prune_whitelist extensions/v1beta1/Ingress apps/v1beta1/StatefulSet autoscaling/v1/HorizontalPodAutoscaler + policy/v1beta1/PodDisruptionBudget ) if server_version >= Gem::Version.new('1.8.0') wl << "batch/v1beta1/CronJob" @@ -359,6 +360,9 @@ def deploy_resources(resources, prune: false, verify:, record_summary: true) # Apply can be done in one large batch, the rest have to be done individually applyables, individuals = resources.partition { |r| r.deploy_method == :apply } + # Prunable resources should also applied so that they can be pruned + pruneable_types = prune_whitelist.map { |t| t.split("/").last } + applyables += individuals.select { |r| pruneable_types.include?(r.type) } individuals.each do |r| @logger.info("- #{r.id} (#{r.pretty_timeout_type})") if resources.length > 1 diff --git a/lib/kubernetes-deploy/kubernetes_resource/bucket.rb b/lib/kubernetes-deploy/kubernetes_resource/bucket.rb index 9dd2abdcd..aebc57e38 100644 --- a/lib/kubernetes-deploy/kubernetes_resource/bucket.rb +++ b/lib/kubernetes-deploy/kubernetes_resource/bucket.rb @@ -18,9 +18,5 @@ def status def deploy_failed? false end - - def deploy_method - :replace - end end end diff --git a/lib/kubernetes-deploy/kubernetes_resource/cloudsql.rb b/lib/kubernetes-deploy/kubernetes_resource/cloudsql.rb index 4b92d4073..0853645ae 100644 --- a/lib/kubernetes-deploy/kubernetes_resource/cloudsql.rb +++ b/lib/kubernetes-deploy/kubernetes_resource/cloudsql.rb @@ -22,10 +22,6 @@ def deploy_failed? false end - def deploy_method - :replace - end - private def proxy_deployment_ready? diff --git a/lib/kubernetes-deploy/kubernetes_resource/elasticsearch.rb b/lib/kubernetes-deploy/kubernetes_resource/elasticsearch.rb index 52caa9df3..06f6708e0 100644 --- a/lib/kubernetes-deploy/kubernetes_resource/elasticsearch.rb +++ b/lib/kubernetes-deploy/kubernetes_resource/elasticsearch.rb @@ -8,9 +8,5 @@ def deploy_succeeded? def deploy_failed? false end - - def deploy_method - :replace - end end end diff --git a/lib/kubernetes-deploy/kubernetes_resource/memcached.rb b/lib/kubernetes-deploy/kubernetes_resource/memcached.rb index 2a10ad1b5..3086995ee 100644 --- a/lib/kubernetes-deploy/kubernetes_resource/memcached.rb +++ b/lib/kubernetes-deploy/kubernetes_resource/memcached.rb @@ -24,10 +24,6 @@ def deploy_failed? false end - def deploy_method - :replace - end - private def deployment_ready? diff --git a/lib/kubernetes-deploy/kubernetes_resource/redis.rb b/lib/kubernetes-deploy/kubernetes_resource/redis.rb index cfc64d11d..651af05f4 100644 --- a/lib/kubernetes-deploy/kubernetes_resource/redis.rb +++ b/lib/kubernetes-deploy/kubernetes_resource/redis.rb @@ -27,10 +27,6 @@ def deploy_failed? false end - def deploy_method - :replace - end - private def deployment_ready? diff --git a/lib/kubernetes-deploy/kubernetes_resource/statefulservice.rb b/lib/kubernetes-deploy/kubernetes_resource/statefulservice.rb index 4971a175c..b07a1a7a5 100644 --- a/lib/kubernetes-deploy/kubernetes_resource/statefulservice.rb +++ b/lib/kubernetes-deploy/kubernetes_resource/statefulservice.rb @@ -8,9 +8,5 @@ def deploy_succeeded? def deploy_failed? false end - - def deploy_method - :replace - end end end diff --git a/lib/kubernetes-deploy/kubernetes_resource/topic.rb b/lib/kubernetes-deploy/kubernetes_resource/topic.rb index ced805018..f410c7426 100644 --- a/lib/kubernetes-deploy/kubernetes_resource/topic.rb +++ b/lib/kubernetes-deploy/kubernetes_resource/topic.rb @@ -8,9 +8,5 @@ def deploy_succeeded? def deploy_failed? false end - - def deploy_method - :replace - end end end diff --git a/test/fixtures/crd/mail_cr.yml b/test/fixtures/crd/mail_cr.yml index 5582f16ad..9e82aa84f 100644 --- a/test/fixtures/crd/mail_cr.yml +++ b/test/fixtures/crd/mail_cr.yml @@ -2,3 +2,5 @@ apiVersion: "stable.example.io/v1" kind: Mail metadata: name: my-first-mail +spec: + something: 7 diff --git a/test/integration-serial/run_serial_test.rb b/test/integration-serial/run_serial_test.rb index 14bac51f9..66cc553e2 100644 --- a/test/integration-serial/run_serial_test.rb +++ b/test/integration-serial/run_serial_test.rb @@ -119,6 +119,18 @@ def test_multiple_configuration_files ENV['KUBECONFIG'] = old_config end + def test_cr_merging + assert_deploy_success(deploy_fixtures("crd", subset: %w(mail.yml))) + assert_deploy_success(deploy_fixtures("crd", subset: %w(mail_cr.yml))) + result = deploy_fixtures("crd", subset: %w(mail_cr.yml)) do |f| + mail = f.dig("mail_cr.yml", "Mail").first + mail["spec"]["something"] = 5 + end + assert_deploy_success(result) + ensure + apiextensions_v1beta1_kubeclient.delete_custom_resource_definition("mail.stable.example.io") + end + def test_crd_can_fail result = deploy_fixtures("crd", subset: %w(mail.yml)) do |f| crd = f.dig("mail.yml", "CustomResourceDefinition").first diff --git a/test/integration/kubernetes_deploy_test.rb b/test/integration/kubernetes_deploy_test.rb index d90fee430..919907b81 100644 --- a/test/integration/kubernetes_deploy_test.rb +++ b/test/integration/kubernetes_deploy_test.rb @@ -73,8 +73,9 @@ def test_pruning_works 'daemonset(\.extensions)? "ds-app"', 'statefulset(\.apps)? "stateful-busybox"', 'job(\.batch)? "hello-job"', + 'poddisruptionbudget(.policy)? "test"', ] # not necessarily listed in this order - expected_msgs = [/Pruned 9 resources and successfully deployed 6 resources/] + expected_msgs = [/Pruned 10 resources and successfully deployed 6 resources/] expected_pruned.map do |resource| expected_msgs << /The following resources were pruned:.*#{resource}/ end @@ -1070,4 +1071,10 @@ def test_hpa_can_be_pruned assert_deploy_success(deploy_fixtures("hpa", subset: ["deployment.yml"])) assert_logs_match_all([/The following resources were pruned: horizontalpodautoscaler(.autoscaling)? "hello-hpa"/]) end + + def test_not_apply_resource_can_be_pruned + assert_deploy_success(deploy_fixtures("hello-cloud", subset: %w(disruption-budgets.yml configmap-data.yml))) + assert_deploy_success(deploy_fixtures("hello-cloud", subset: %w(configmap-data.yml))) + assert_logs_match_all([/The following resources were pruned: poddisruptionbudget(.policy)? "test"/]) + end end