From 9752ec66854e07cd2710fe433ce8639a4c5652b2 Mon Sep 17 00:00:00 2001 From: rsuplina Date: Thu, 23 Nov 2023 15:00:26 +0000 Subject: [PATCH 1/4] Add assemble template role Signed-off-by: rsuplina --- roles/assemble_template/defaults/main.yml | 17 ++++++++ roles/assemble_template/tasks/main.yml | 48 +++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 roles/assemble_template/defaults/main.yml create mode 100644 roles/assemble_template/tasks/main.yml diff --git a/roles/assemble_template/defaults/main.yml b/roles/assemble_template/defaults/main.yml new file mode 100644 index 00000000..b1166797 --- /dev/null +++ b/roles/assemble_template/defaults/main.yml @@ -0,0 +1,17 @@ +# Copyright 2023 Cloudera, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +--- + +json_regex_pattren : '.*\.json$' \ No newline at end of file diff --git a/roles/assemble_template/tasks/main.yml b/roles/assemble_template/tasks/main.yml new file mode 100644 index 00000000..321b30a5 --- /dev/null +++ b/roles/assemble_template/tasks/main.yml @@ -0,0 +1,48 @@ +# Copyright 2023 Cloudera, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +--- + +- name: Discover fragment files + ansible.builtin.find: + paths: "{{ cluster_template_fragments_directory | mandatory }}" + patterns: "{{ json_regex_pattren | default(omit) }}" + use_regex: yes + recurse: yes + register: fragments + +- name: Create a temporary directory + ansible.builtin.tempfile: + state: directory + register: fragments_temp_directory + +- name: Loop through fragment files and template them + ansible.builtin.template: + src: "{{ __fragment.path }}" + dest: "{{ fragments_temp_directory.path }}/{{ __fragment.path | basename }}" + loop: "{{ fragments.files }}" + loop_control: + loop_var: __fragment + label: "{{ __fragment.path | basename }}" + when: fragments.matched > 0 + +- name: Create cluster template + cloudera.cluster.assemble_cluster_template: + src: "{{ fragments_temp_directory.path }}" + dest: "{{ fragments_temp_directory.path }}/cluster-template.json" + +- name: Set fact for cluster template path + ansible.builtin.set_fact: + cluster_template_path: "{{ fragments_temp_directory.path }}/cluster-template.json" + From b2963f407c5a282bff7d25e51f94451d0103eb9b Mon Sep 17 00:00:00 2001 From: rsuplina Date: Tue, 28 Nov 2023 11:59:49 +0000 Subject: [PATCH 2/4] Add requested changes Signed-off-by: rsuplina --- roles/assemble_template/tasks/main.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/roles/assemble_template/tasks/main.yml b/roles/assemble_template/tasks/main.yml index 321b30a5..64110990 100644 --- a/roles/assemble_template/tasks/main.yml +++ b/roles/assemble_template/tasks/main.yml @@ -40,9 +40,9 @@ - name: Create cluster template cloudera.cluster.assemble_cluster_template: src: "{{ fragments_temp_directory.path }}" - dest: "{{ fragments_temp_directory.path }}/cluster-template.json" - -- name: Set fact for cluster template path - ansible.builtin.set_fact: - cluster_template_path: "{{ fragments_temp_directory.path }}/cluster-template.json" + dest: "{{ cluster_template_destination_directory | mandatory }}" +- name: Remove temporary directory + ansible.builtin.file: + path: "{{ fragments_temp_directory.path }}" + state: absent From 533fd770b925b32bd3d7f5a1de4182fdf97969c1 Mon Sep 17 00:00:00 2001 From: rsuplina Date: Fri, 1 Dec 2023 11:55:11 +0000 Subject: [PATCH 3/4] Add prefix and argument_specs Signed-off-by: rsuplina --- roles/assemble_template/defaults/main.yml | 2 +- roles/assemble_template/meta/main.yml | 40 +++++++++++++++++++++++ roles/assemble_template/tasks/main.yml | 2 +- 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 roles/assemble_template/meta/main.yml diff --git a/roles/assemble_template/defaults/main.yml b/roles/assemble_template/defaults/main.yml index b1166797..4e3d49b7 100644 --- a/roles/assemble_template/defaults/main.yml +++ b/roles/assemble_template/defaults/main.yml @@ -14,4 +14,4 @@ --- -json_regex_pattren : '.*\.json$' \ No newline at end of file +assemble_template_json_regex_pattren : '.*\.json$' \ No newline at end of file diff --git a/roles/assemble_template/meta/main.yml b/roles/assemble_template/meta/main.yml new file mode 100644 index 00000000..7d29ee1f --- /dev/null +++ b/roles/assemble_template/meta/main.yml @@ -0,0 +1,40 @@ +# Copyright 2023 Cloudera, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +--- + +argument_specs: + main: + short_description: "Discover fragment files, template them, and create a cluster template" + description: + - "This role performs the following tasks:" + - " Discovers fragment files in a specified directory, creates a temporary directory, loops through fragment files, templates them, and places them in the temporary directory," + - " assembles a cluster template from the templated files and then it removes the temporary directory" + + author: "Ronald Suplina" + options: + cluster_template_fragments_directory: + description: "Path to the directory containing fragment files for the cluster template" + type: "str" + required: true + + cluster_template_destination_directory: + description: "Destination directory for the assembled cluster template" + type: "str" + required: true + + assemble_template_json_regex_pattern: + description: "Regex pattern for filtering fragment files (optional)" + type: "str" + required: false \ No newline at end of file diff --git a/roles/assemble_template/tasks/main.yml b/roles/assemble_template/tasks/main.yml index 64110990..9f036e8b 100644 --- a/roles/assemble_template/tasks/main.yml +++ b/roles/assemble_template/tasks/main.yml @@ -17,7 +17,7 @@ - name: Discover fragment files ansible.builtin.find: paths: "{{ cluster_template_fragments_directory | mandatory }}" - patterns: "{{ json_regex_pattren | default(omit) }}" + patterns: "{{ assemble_template_json_regex_pattren | default(omit) }}" use_regex: yes recurse: yes register: fragments From b564b9a71910ef3699ae0c011c6f4a92aad565c9 Mon Sep 17 00:00:00 2001 From: rsuplina Date: Fri, 1 Dec 2023 14:36:19 +0000 Subject: [PATCH 4/4] Add requested changes Signed-off-by: rsuplina --- roles/assemble_template/defaults/main.yml | 4 ++- .../meta/{main.yml => argument_specs.yml} | 27 +++++++++---------- roles/assemble_template/tasks/main.yml | 6 ++--- 3 files changed, 18 insertions(+), 19 deletions(-) rename roles/assemble_template/meta/{main.yml => argument_specs.yml} (55%) diff --git a/roles/assemble_template/defaults/main.yml b/roles/assemble_template/defaults/main.yml index 4e3d49b7..59e0548b 100644 --- a/roles/assemble_template/defaults/main.yml +++ b/roles/assemble_template/defaults/main.yml @@ -14,4 +14,6 @@ --- -assemble_template_json_regex_pattren : '.*\.json$' \ No newline at end of file +# cluster_template_fragments_regex: '.*\.json$' +cluster_template_fragments_directory: "{{ mandatory }}" +cluster_template_file: "{{ mandatory }}" diff --git a/roles/assemble_template/meta/main.yml b/roles/assemble_template/meta/argument_specs.yml similarity index 55% rename from roles/assemble_template/meta/main.yml rename to roles/assemble_template/meta/argument_specs.yml index 7d29ee1f..ed12e794 100644 --- a/roles/assemble_template/meta/main.yml +++ b/roles/assemble_template/meta/argument_specs.yml @@ -16,25 +16,22 @@ argument_specs: main: - short_description: "Discover fragment files, template them, and create a cluster template" - description: - - "This role performs the following tasks:" - - " Discovers fragment files in a specified directory, creates a temporary directory, loops through fragment files, templates them, and places them in the temporary directory," - - " assembles a cluster template from the templated files and then it removes the temporary directory" - - author: "Ronald Suplina" + short_description: "Discover and render files into a cluster template" + description: | + Discovers fragment files in a specified directory, loops through fragment files + rendering them through M(ansible.builtin.template), places them in a temporary directory, + and then assembles a single, final cluster template. + author: "Ronald Suplina " options: cluster_template_fragments_directory: description: "Path to the directory containing fragment files for the cluster template" - type: "str" + type: "path" required: true - - cluster_template_destination_directory: - description: "Destination directory for the assembled cluster template" - type: "str" + cluster_template_file: + description: "Destination of the assembled cluster template" + type: "path" required: true - - assemble_template_json_regex_pattern: + cluster_template_fragments_regex: description: "Regex pattern for filtering fragment files (optional)" type: "str" - required: false \ No newline at end of file + required: false diff --git a/roles/assemble_template/tasks/main.yml b/roles/assemble_template/tasks/main.yml index 9f036e8b..28641881 100644 --- a/roles/assemble_template/tasks/main.yml +++ b/roles/assemble_template/tasks/main.yml @@ -16,8 +16,8 @@ - name: Discover fragment files ansible.builtin.find: - paths: "{{ cluster_template_fragments_directory | mandatory }}" - patterns: "{{ assemble_template_json_regex_pattren | default(omit) }}" + paths: "{{ cluster_template_fragments_directory }}" + patterns: "{{ cluster_template_fragments_regex | default(omit) }}" use_regex: yes recurse: yes register: fragments @@ -40,7 +40,7 @@ - name: Create cluster template cloudera.cluster.assemble_cluster_template: src: "{{ fragments_temp_directory.path }}" - dest: "{{ cluster_template_destination_directory | mandatory }}" + dest: "{{ cluster_template_file }}" - name: Remove temporary directory ansible.builtin.file: