Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Host Template Module #238

Merged
merged 9 commits into from
Jul 30, 2024
Merged
Changes from 1 commit
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
Prev Previous commit
Next Next commit
Add Linting
Signed-off-by: rsuplina <[email protected]>
rsuplina committed Jun 24, 2024
commit 68e732d1022de2369060be7cf2288353f399d3ee
82 changes: 55 additions & 27 deletions plugins/modules/host_template.py
Original file line number Diff line number Diff line change
@@ -15,7 +15,14 @@
from ansible_collections.cloudera.cluster.plugins.module_utils.cm_utils import (
ClouderaManagerModule,
)
from cm_client import HostTemplatesResourceApi,ClustersResourceApi,ApiHostTemplate,ApiRoleConfigGroupRef,ApiClusterRef,ApiHostTemplateList
from cm_client import (
HostTemplatesResourceApi,
ClustersResourceApi,
ApiHostTemplate,
ApiRoleConfigGroupRef,
ApiClusterRef,
ApiHostTemplateList,
)
from cm_client.rest import ApiException

ANSIBLE_METADATA = {
@@ -124,42 +131,63 @@ def process(self):
ClustersResourceApi(self.api_client).read_cluster(self.cluster_name)
except ApiException as ex:
if ex.status == 404:
self.module.fail_json(msg="Cluster does not exist: " + self.cluster_name)
self.module.fail_json(
msg="Cluster does not exist: " + self.cluster_name
)
else:
raise ex

if not self.module.check_mode:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This condition is too early in the module logic. We want to capture any potential changes to the host template and report them via the diff object.

try:
self.host_template = host_temp_api_instance.read_host_template(cluster_name=self.cluster_name,host_template_name=self.host_template_name)
except ApiException as ex:
if ex.status == 404:
pass
else:
raise ex

host_template = ApiHostTemplate(
cluster_ref=ApiClusterRef(cluster_name=self.cluster_name,display_name=self.cluster_name),
name=self.host_template_name,
role_config_group_refs=[ApiRoleConfigGroupRef(role_config_group_name=group) for group in self.role_configs_groups]
)
if self.host_template:
self.host_template_output = host_temp_api_instance.update_host_template(cluster_name=self.cluster_name,host_template_name=self.host_template_name,body=host_template)
self.changed = True
else:
body = ApiHostTemplateList(items=[host_template])
self.host_template_output = host_temp_api_instance.create_host_templates(cluster_name=self.cluster_name,body=body)
self.changed = True

self.host_template_output = host_temp_api_instance.read_host_template(cluster_name=self.cluster_name,host_template_name=self.host_template_name).to_dict()
try:
self.host_template = host_temp_api_instance.read_host_template(
cluster_name=self.cluster_name,
host_template_name=self.host_template_name,
)
except ApiException as ex:
if ex.status == 404:
pass
else:
raise ex

host_template = ApiHostTemplate(
rsuplina marked this conversation as resolved.
Show resolved Hide resolved
cluster_ref=ApiClusterRef(
cluster_name=self.cluster_name, display_name=self.cluster_name
),
name=self.host_template_name,
role_config_group_refs=[
ApiRoleConfigGroupRef(role_config_group_name=group)
for group in self.role_configs_groups
],
)
if self.host_template:
rsuplina marked this conversation as resolved.
Show resolved Hide resolved
self.host_template_output = host_temp_api_instance.update_host_template(
cluster_name=self.cluster_name,
host_template_name=self.host_template_name,
body=host_template,
)
self.changed = True
else:
body = ApiHostTemplateList(items=[host_template])
self.host_template_output = (
host_temp_api_instance.create_host_templates(
cluster_name=self.cluster_name, body=body
)
)
self.changed = True

self.host_template_output = host_temp_api_instance.read_host_template(
cluster_name=self.cluster_name,
host_template_name=self.host_template_name,
).to_dict()


def main():
module = ClouderaManagerModule.ansible_module(
argument_spec=dict(
name=dict(required=True, type="str", aliases=["cluster_name"]),
host_template_name=dict(required=True, type="str"),
role_configs_groups=dict(required=True, type="list")
),
role_configs_groups=dict(required=True, type="list"),
),
supports_check_mode=True,
)

@@ -178,4 +206,4 @@ def main():


if __name__ == "__main__":
main()
main()
34 changes: 21 additions & 13 deletions plugins/modules/host_template_info.py
Original file line number Diff line number Diff line change
@@ -114,31 +114,39 @@ def process(self):
ClustersResourceApi(self.api_client).read_cluster(self.cluster_name)
except ApiException as ex:
if ex.status == 404:
self.module.fail_json(msg="Cluster does not exist: " + self.cluster_name)
self.module.fail_json(
msg="Cluster does not exist: " + self.cluster_name
)
else:
raise ex

host_temp_api_instance = HostTemplatesResourceApi(self.api_client)
if self.host_template_name:
try:
self.host_templates_output = host_temp_api_instance.read_host_template(
cluster_name=self.cluster_name,
host_template_name=self.host_template_name,
).to_dict()
except ApiException as ex:
if ex.status == 404:
rsuplina marked this conversation as resolved.
Show resolved Hide resolved
self.module.fail_json(
msg="Host Template does not exist: " + self.host_template_name
)
else:
raise ex

try:
self.host_templates_output = host_temp_api_instance.read_host_template(cluster_name=self.cluster_name,host_template_name=self.host_template_name).to_dict()
except ApiException as ex:
if ex.status == 404:
self.module.fail_json(msg="Host Template does not exist: " + self.host_template_name)
else:
raise ex

else:
self.host_templates_output = host_temp_api_instance.read_host_templates(cluster_name=self.cluster_name).items
self.host_templates_output = host_temp_api_instance.read_host_templates(
cluster_name=self.cluster_name
).items


def main():
module = ClouderaManagerModule.ansible_module(
argument_spec=dict(
name=dict(required=True, type="str", aliases=["cluster_name"]),
host_template_name=dict(required=False, type="str")
),
host_template_name=dict(required=False, type="str"),
),
supports_check_mode=True,
)

11 changes: 8 additions & 3 deletions tests/unit/plugins/modules/host_template/test_host_template.py
Original file line number Diff line number Diff line change
@@ -56,7 +56,7 @@ def test_create_host_template(module_args, conn):
conn.update(
name="TestCluster",
host_template_name="MyTemplate",
role_configs_groups = ['atlas-ATLAS_SERVER-BASE', 'atlas-GATEWAY-BASE']
role_configs_groups=["atlas-ATLAS_SERVER-BASE", "atlas-GATEWAY-BASE"],
)

module_args(conn)
@@ -66,11 +66,17 @@ def test_create_host_template(module_args, conn):

LOG.info(str(e.value.host_template_output))


def test_update_host_template(module_args, conn):
conn.update(
name="TestCluster",
host_template_name="MyTemplate",
role_configs_groups = ['atlas-ATLAS_SERVER-BASE', 'atlas-GATEWAY-BASE','tez-GATEWAY-BASE','hdfs-NAMENODE-BASE']
role_configs_groups=[
"atlas-ATLAS_SERVER-BASE",
"atlas-GATEWAY-BASE",
"tez-GATEWAY-BASE",
"hdfs-NAMENODE-BASE",
],
)

module_args(conn)
@@ -79,4 +85,3 @@ def test_update_host_template(module_args, conn):
host_template.main()

LOG.info(str(e.value.host_template_output))

Original file line number Diff line number Diff line change
@@ -77,4 +77,3 @@ def test_single_host_template(module_args, conn):
host_template_info.main()

LOG.info(str(e.value.host_templates_output))