mirror of
https://github.com/ansible-collections/kubernetes.core.git
synced 2026-07-28 18:34:42 +00:00
Add skip_crds option to helm (#349)
This adds an option to skip the installation of CRDs when installing or upgrading a chart. Closes: #296
This commit is contained in:
2
changelogs/fragments/349-skip-crds.yaml
Normal file
2
changelogs/fragments/349-skip-crds.yaml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
minor_changes:
|
||||||
|
- helm - add a ``skip_crds`` option to skip the installation of CRDs when installing or upgrading a chart (https://github.com/ansible-collections/community.kubernetes/issues/296).
|
||||||
5
molecule/default/roles/helm/files/test-crds/Chart.yaml
Normal file
5
molecule/default/roles/helm/files/test-crds/Chart.yaml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: test-crds
|
||||||
|
description: A chart with CRDs
|
||||||
|
type: application
|
||||||
|
version: 0.1.0
|
||||||
21
molecule/default/roles/helm/files/test-crds/crds/crd.yaml
Normal file
21
molecule/default/roles/helm/files/test-crds/crds/crd.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
name: foos.example.com
|
||||||
|
spec:
|
||||||
|
group: example.com
|
||||||
|
versions:
|
||||||
|
- name: v1
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
foobar:
|
||||||
|
type: string
|
||||||
|
scope: Namespaced
|
||||||
|
names:
|
||||||
|
plural: foos
|
||||||
|
singular: foo
|
||||||
|
kind: Foo
|
||||||
@@ -33,6 +33,10 @@
|
|||||||
- name: Test helm diff
|
- name: Test helm diff
|
||||||
include_tasks: tests_helm_diff.yml
|
include_tasks: tests_helm_diff.yml
|
||||||
|
|
||||||
|
# https://github.com/ansible-collections/community.kubernetes/issues/296
|
||||||
|
- name: Test Skip CRDS feature in helm chart install
|
||||||
|
include_tasks: test_crds.yml
|
||||||
|
|
||||||
- name: Clean helm install
|
- name: Clean helm install
|
||||||
file:
|
file:
|
||||||
path: "{{ item }}"
|
path: "{{ item }}"
|
||||||
|
|||||||
97
molecule/default/roles/helm/tasks/test_crds.yml
Normal file
97
molecule/default/roles/helm/tasks/test_crds.yml
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
---
|
||||||
|
- name: Test CRDs
|
||||||
|
vars:
|
||||||
|
test_chart: "test-crds"
|
||||||
|
block:
|
||||||
|
- name: Create namespace
|
||||||
|
k8s:
|
||||||
|
kind: Namespace
|
||||||
|
name: "{{ helm_namespace }}"
|
||||||
|
|
||||||
|
- name: Copy test chart
|
||||||
|
copy:
|
||||||
|
src: "{{ test_chart }}"
|
||||||
|
dest: "/tmp/helm_test_crds/"
|
||||||
|
|
||||||
|
- name: Install chart while skipping CRDs
|
||||||
|
helm:
|
||||||
|
chart_ref: "/tmp/helm_test_crds/{{ test_chart }}"
|
||||||
|
namespace: "{{ helm_namespace }}"
|
||||||
|
name: test-crds
|
||||||
|
skip_crds: true
|
||||||
|
register: install
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- install is changed
|
||||||
|
- install.status.name == "test-crds"
|
||||||
|
|
||||||
|
- name: Fail to create custom resource
|
||||||
|
k8s:
|
||||||
|
definition:
|
||||||
|
apiVersion: example.com/v1
|
||||||
|
kind: Foo
|
||||||
|
metadata:
|
||||||
|
namespace: "{{ helm_namespace }}"
|
||||||
|
name: test-foo
|
||||||
|
foobar: footest
|
||||||
|
ignore_errors: true
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- result is failed
|
||||||
|
- "result.msg.startswith('Failed to find exact match for example.com/v1.Foo')"
|
||||||
|
|
||||||
|
# Helm won't install CRDs into an existing release, so we need to delete this, first
|
||||||
|
- name: Uninstall chart
|
||||||
|
helm:
|
||||||
|
namespace: "{{ helm_namespace }}"
|
||||||
|
name: test-crds
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: Install chart with CRDs
|
||||||
|
helm:
|
||||||
|
chart_ref: "/tmp/helm_test_crds/{{ test_chart }}"
|
||||||
|
namespace: "{{ helm_namespace }}"
|
||||||
|
name: test-crds
|
||||||
|
|
||||||
|
- name: Create custom resource
|
||||||
|
k8s:
|
||||||
|
definition:
|
||||||
|
apiVersion: example.com/v1
|
||||||
|
kind: Foo
|
||||||
|
metadata:
|
||||||
|
namespace: "{{ helm_namespace }}"
|
||||||
|
name: test-foo
|
||||||
|
foobar: footest
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- result is changed
|
||||||
|
- result.result.foobar == "footest"
|
||||||
|
|
||||||
|
always:
|
||||||
|
- name: Remove chart
|
||||||
|
file:
|
||||||
|
path: "/tmp/helm_test_crds"
|
||||||
|
state: absent
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- name: Remove namespace
|
||||||
|
k8s:
|
||||||
|
kind: Namespace
|
||||||
|
name: "{{ helm_namespace }}"
|
||||||
|
state: absent
|
||||||
|
wait: true
|
||||||
|
wait_timeout: 180
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
# CRDs aren't deleted with a namespace, so we need to manually delete it
|
||||||
|
- name: Remove CRD
|
||||||
|
k8s:
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
name: foos.example.com
|
||||||
|
state: absent
|
||||||
|
ignore_errors: true
|
||||||
@@ -133,6 +133,12 @@ options:
|
|||||||
type: bool
|
type: bool
|
||||||
default: False
|
default: False
|
||||||
version_added: "1.11.0"
|
version_added: "1.11.0"
|
||||||
|
skip_crds:
|
||||||
|
description:
|
||||||
|
- Skip custom resource definitions when installing or upgrading.
|
||||||
|
type: bool
|
||||||
|
default: False
|
||||||
|
version_added: "1.2.0"
|
||||||
extends_documentation_fragment:
|
extends_documentation_fragment:
|
||||||
- community.kubernetes.helm_common_options
|
- community.kubernetes.helm_common_options
|
||||||
'''
|
'''
|
||||||
@@ -321,7 +327,7 @@ def fetch_chart_info(module, command, chart_ref):
|
|||||||
|
|
||||||
def deploy(command, release_name, release_values, chart_name, wait,
|
def deploy(command, release_name, release_values, chart_name, wait,
|
||||||
wait_timeout, disable_hook, force, values_files, atomic=False,
|
wait_timeout, disable_hook, force, values_files, atomic=False,
|
||||||
create_namespace=False, replace=False):
|
create_namespace=False, replace=False, skip_crds=False):
|
||||||
"""
|
"""
|
||||||
Install/upgrade/rollback release chart
|
Install/upgrade/rollback release chart
|
||||||
"""
|
"""
|
||||||
@@ -364,6 +370,9 @@ def deploy(command, release_name, release_values, chart_name, wait,
|
|||||||
yaml.dump(release_values, yaml_file, default_flow_style=False)
|
yaml.dump(release_values, yaml_file, default_flow_style=False)
|
||||||
deploy_command += " -f=" + path
|
deploy_command += " -f=" + path
|
||||||
|
|
||||||
|
if skip_crds:
|
||||||
|
deploy_command += " --skip-crds"
|
||||||
|
|
||||||
deploy_command += " " + release_name + " " + chart_name
|
deploy_command += " " + release_name + " " + chart_name
|
||||||
|
|
||||||
return deploy_command
|
return deploy_command
|
||||||
@@ -489,6 +498,7 @@ def main():
|
|||||||
atomic=dict(type='bool', default=False),
|
atomic=dict(type='bool', default=False),
|
||||||
create_namespace=dict(type='bool', default=False),
|
create_namespace=dict(type='bool', default=False),
|
||||||
replace=dict(type='bool', default=False),
|
replace=dict(type='bool', default=False),
|
||||||
|
skip_crds=dict(type='bool', default=False),
|
||||||
|
|
||||||
# Generic auth key
|
# Generic auth key
|
||||||
host=dict(type='str', fallback=(env_fallback, ['K8S_AUTH_HOST'])),
|
host=dict(type='str', fallback=(env_fallback, ['K8S_AUTH_HOST'])),
|
||||||
@@ -533,6 +543,7 @@ def main():
|
|||||||
atomic = module.params.get('atomic')
|
atomic = module.params.get('atomic')
|
||||||
create_namespace = module.params.get('create_namespace')
|
create_namespace = module.params.get('create_namespace')
|
||||||
replace = module.params.get('replace')
|
replace = module.params.get('replace')
|
||||||
|
skip_crds = module.params.get('skip_crds')
|
||||||
|
|
||||||
if bin_path is not None:
|
if bin_path is not None:
|
||||||
helm_cmd_common = bin_path
|
helm_cmd_common = bin_path
|
||||||
@@ -567,7 +578,8 @@ def main():
|
|||||||
if release_status is None: # Not installed
|
if release_status is None: # Not installed
|
||||||
helm_cmd = deploy(helm_cmd, release_name, release_values, chart_ref, wait, wait_timeout,
|
helm_cmd = deploy(helm_cmd, release_name, release_values, chart_ref, wait, wait_timeout,
|
||||||
disable_hook, False, values_files=values_files, atomic=atomic,
|
disable_hook, False, values_files=values_files, atomic=atomic,
|
||||||
create_namespace=create_namespace, replace=replace)
|
create_namespace=create_namespace, replace=replace,
|
||||||
|
skip_crds=skip_crds)
|
||||||
changed = True
|
changed = True
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -583,7 +595,8 @@ def main():
|
|||||||
if force or would_change:
|
if force or would_change:
|
||||||
helm_cmd = deploy(helm_cmd, release_name, release_values, chart_ref, wait, wait_timeout,
|
helm_cmd = deploy(helm_cmd, release_name, release_values, chart_ref, wait, wait_timeout,
|
||||||
disable_hook, force, values_files=values_files, atomic=atomic,
|
disable_hook, force, values_files=values_files, atomic=atomic,
|
||||||
create_namespace=create_namespace, replace=replace)
|
create_namespace=create_namespace, replace=replace,
|
||||||
|
skip_crds=skip_crds)
|
||||||
changed = True
|
changed = True
|
||||||
|
|
||||||
if module.check_mode:
|
if module.check_mode:
|
||||||
|
|||||||
Reference in New Issue
Block a user