Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 25 additions & 6 deletions plugins/modules/lke_cluster.py
Original file line number Diff line number Diff line change
Expand Up @@ -417,11 +417,21 @@ def _create_cluster(self) -> Optional[LKECluster]:
self.register_action("Created LKE cluster {0}".format(label))

# This is necessary to use fields not yet supported by linode_api4
nodepools = []
if "node_pools" in params:
nodepools = params.pop("node_pools")

if not nodepools and tier == "standard":
# throw error if no node pools specified for standard clusters
self.fail(
msg="At least one node pool must be specified when creating standard LKE clusters."
)

result = self.client.lke.cluster_create(
params.pop("region"),
label,
params.pop("node_pools"),
params.pop("k8s_version"),
region=params.pop("region"),
label=label,
node_pools=nodepools,
kube_version=params.pop("k8s_version"),
**params,
)

Expand Down Expand Up @@ -515,7 +525,14 @@ def _update_cluster(self, cluster: LKECluster) -> None:
)
new_params = {k: v for k, v in new_params.items() if k in CREATE_FIELDS}

pools = new_params.pop("node_pools")
pools = []
if "node_pools" in new_params:
pools = new_params.pop("node_pools")

if not pools and cluster.tier == "standard":
self.fail(
msg="At least one node pool must be specified when creating a standard LKE cluster."
)

# This is handled separately
new_params.pop("k8s_version")
Expand Down Expand Up @@ -803,7 +820,9 @@ def _populate_results(self, cluster: LKECluster) -> None:
return

self._populate_kubeconfig_poll(cluster)
self._populate_dashboard_url_poll(cluster)
# enterprise clusters don't have dashboards.
if cluster.tier != "enterprise":
self._populate_dashboard_url_poll(cluster)

def _handle_present(self) -> None:
params = self.module.params
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
- name: lke_cluster_enterprise
block:
- set_fact:
r: "{{ 1000000000 | random }}"

- name: Resolve an enterprise K8s version
linode.cloud.lke_version_list:
api_version: v4beta
tier: "enterprise"
register: get_lke_versions_enterprise

- set_fact:
lke_versions: '{{ get_lke_versions_enterprise.lke_versions|sort(attribute="id", reverse=True) }}'

- set_fact:
kube_version: '{{ lke_versions[0].id }}'

- name: List regions that support LKE Enterprise
linode.cloud.region_list:
register: all_regions

- set_fact:
lke_e_region: '{{ ( all_regions.regions | selectattr("site_type", "equalto", "core") | selectattr("capabilities", "search", "Kubernetes Enterprise") | list)[1].id }}'

- name: Create a Linode LKE Enterprise cluster without node pools
linode.cloud.lke_cluster:
api_version: v4beta
tier: 'enterprise'
label: 'ansible-test-{{ r }}'
region: '{{ lke_e_region }}'
k8s_version: '{{ kube_version }}'
skip_polling: true
state: present
register: create_enterprise_cluster

- name: Assert LKE cluster is created
assert:
that:
- create_enterprise_cluster.cluster.k8s_version == kube_version
- create_enterprise_cluster.cluster.region == lke_e_region
- create_enterprise_cluster.cluster.tier == 'enterprise'

always:
- ignore_errors: yes
block:
- name: Delete the LKE cluster
linode.cloud.lke_cluster:
label: '{{ create_enterprise_cluster.cluster.label }}'
state: absent

environment:
LINODE_UA_PREFIX: '{{ ua_prefix }}'
LINODE_API_TOKEN: '{{ api_token }}'
LINODE_API_URL: '{{ api_url }}'
LINODE_API_VERSION: '{{ api_version }}'
LINODE_CA: '{{ ca_file or "" }}'
Loading