From 7965d95973c4c3a2dc5642b5a61f31f8cbb4eb3b Mon Sep 17 00:00:00 2001 From: Daniela Ebert Date: Mon, 11 Mar 2024 08:48:14 +0000 Subject: [PATCH 1/4] Add new LTS modules --- plugins/modules/lts_group.py | 141 +++++++++++++++++++++++++++++ plugins/modules/lts_stream.py | 164 ++++++++++++++++++++++++++++++++++ 2 files changed, 305 insertions(+) create mode 100644 plugins/modules/lts_group.py create mode 100644 plugins/modules/lts_stream.py diff --git a/plugins/modules/lts_group.py b/plugins/modules/lts_group.py new file mode 100644 index 00000000..0c8dd633 --- /dev/null +++ b/plugins/modules/lts_group.py @@ -0,0 +1,141 @@ +#!/usr/bin/python +# 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. + +DOCUMENTATION = ''' +module: lts_group +short_description: Manage LTS loggroup on Open Telekom Cloud +extends_documentation_fragment: opentelekomcloud.cloud.otc +version_added: "0.1.x" +author: "Daniela Ebert" +description: + - Manage LTS loggroup on Open Telekom Cloud +options: + name: + description: + - Name of the log group to be created + type: str + required: true + ttl_in_days: + description: + - Log retention duration, default 7 days + type: int + required: true +requirements: ["openstacksdk", "otcextensions"] +''' + +RETURN = ''' +log_group_id: + description: ID of the newly created log group + type: str + sample: { + { + "loggroup_id": "xxxxxxxx-8165-449a-9e7e-xxxxxxxxxxxx" + } + } +''' + +EXAMPLES = ''' +# Create LTS log group +- opentelekomcloud.cloud.lts_group: + name: 'lts-test' + ttl_in_days: '7' + +# Delete LTS log group +- opentelekomcloud.cloud.lts_group: + name: 'lts-test' + state: absent + +# Update LTS log group +- opentelekomcloud.cloud.lts_group: + name: 'lts-test' + ttl_in_days: 3 +''' + +from ansible_collections.opentelekomcloud.cloud.plugins.module_utils.otc import OTCModule + + +class LtsGroupModule(OTCModule): + argument_spec = dict( + name=dict(required=True), + ttl_in_days=dict(required=False, default='7'), + state=dict(type='str', choices=['present', 'absent'], default='present') + ) + module_kwargs = dict( + supports_check_mode=True + ) + + def run(self): + attrs = {} + group = "" + group_list = [] + groupid_list = [] + + # Get existing log groups with id's + for x in self.conn.lts.groups(): + group_list.append(x.name) + groupid_list.append(x.id) + + # Check if log group exists, get id + attrs['name'] = self.params['name'] + if attrs['name'] in group_list: + group = attrs['name'] + i = group_list.index(group) + groupid = groupid_list[i] + + if self.params['ttl_in_days']: + attrs['ttl_in_days'] = self.params['ttl_in_days'] + + if self.params['state'] == 'present': + + # Instance creation + if not group: + if self.ansible.check_mode: + self.exit(changed=True) + group = self.conn.lts.create_group(**attrs) + self.exit(changed=True, group=group.to_dict()) + + # Instance Modification + elif group: + if self.params['ttl_in_days']: + attrs['ttl_in_days'] = self.params['ttl_in_days'] + + if self.ansible.check_mode: + self.exit(changed=True) + group = self.conn.lts.update_group(group=groupid, **attrs) + self.exit(changed=True, group=group.to_dict()) + + if self.params['state'] == 'absent': + + # Instance Deletion + if group: + if self.ansible.check_mode: + self.exit(changed=True) + group = self.conn.lts.delete_group(group=groupid) + self.exit(changed=True, group=group) + + elif not group: + self.exit( + changed=False, + failed=True, + message=('No Group with name %s found') % (self.params['name']) + ) + + +def main(): + module = LtsGroupModule() + module() + + +if __name__ == "__main__": + main() + diff --git a/plugins/modules/lts_stream.py b/plugins/modules/lts_stream.py new file mode 100644 index 00000000..9579848f --- /dev/null +++ b/plugins/modules/lts_stream.py @@ -0,0 +1,164 @@ +#!/usr/bin/python +# 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. + +DOCUMENTATION = ''' +module: lts_stream +short_description: Manage LTS log steam on Open Telekom Cloud +extends_documentation_fragment: opentelekomcloud.cloud.otc +version_added: "0.1.x" +author: "Daniela Ebert" +description: + - Manage LTS log stream on Open Telekom Cloud +options: + log_group_name: + description: + - Name of the log group + type: str + required: true + log_stream_name: + description: + - Name of the log stream + type: str + required: true + ttl_in_days: + description: + - Log retention duration, default 7 days + type: int + required: true +requirements: ["openstacksdk", "otcextensions"] +''' + +RETURN = ''' +log_stream_id: + description: ID of the newly created log stream + type: str + sample: { + { + "log_stream_id": "xxxxxxxx-8165-449a-9e7e-xxxxxxxxxxxx" + } + } +''' + +EXAMPLES = ''' +# Create LTS log stream +- opentelekomcloud.cloud.lts_stream: + log_group_name: 'lts-test-group' + log_stream_name: 'lts-test-stream' + ttl_in_days: '5' + +# Delete LTS log stream +- opentelekomcloud.cloud.lts_stream: + log_group_name: 'lts-test-group' + log_stream_name: 'lts-test-stream' + state: absent + +''' + +from ansible_collections.opentelekomcloud.cloud.plugins.module_utils.otc import OTCModule + + +class LtsStreamModule(OTCModule): + argument_spec = dict( + log_group_name=dict(required=True), + log_stream_name=dict(required=True), + ttl_in_days=dict(required=False, default='7'), + state=dict(type='str', choices=['present', 'absent'], default='present') + ) + module_kwargs = dict( + supports_check_mode=True + ) + + def run(self): + group = "" + stream = "" + group_list = [] + groupid_list = [] + stream_list = [] + streamid_list = [] + + # Get existing log groups with id's + for x in self.conn.lts.groups(): + group_list.append(x.name) + groupid_list.append(x.id) + + # Check if log group exists, get id + if self.params['log_group_name'] in group_list: + group = self.params['log_group_name'] + i = group_list.index(group) + groupid = groupid_list[i] + + # Exit, if log group not existing + if not group: + self.exit( + changed=False, + failed=True, + message=('No Group with name %s found') % (self.params['log_group_name']) + ) + # Get existing streams + for x in self.conn.lts.streams(log_group=groupid): + stream_list.append(x.name) + streamid_list.append(x.id) + + # Check if log stream exists, get id + if self.params['log_stream_name'] in stream_list: + stream = self.params['log_stream_name'] + i = stream_list.index(stream) + streamid = streamid_list[i] + + if self.params['state'] == 'present': + + # Stream creation + if not stream: + if self.ansible.check_mode: + self.exit(changed=True) + attrs = { + 'log_group': groupid, + 'log_stream_name': self.params['log_stream_name'], + 'ttl_in_days': self.params['ttl_in_days'] + } + stream = self.conn.lts.create_stream(**attrs) + self.exit(changed=True, stream=stream.to_dict()) + + elif stream: + self.exit( + changed=False, + failed=True, + message=('Stream with name %s already exists') % (self.params['log_stream_name']) + ) + + + if self.params['state'] == 'absent': + + # Stream Deletion + if stream: + if self.ansible.check_mode: + self.exit(changed=True) + stream = self.conn.lts.delete_stream(log_group=groupid,log_stream=streamid) + self.exit(changed=True, stream=stream) + + elif not stream: + self.exit( + changed=False, + failed=True, + message=('No Stream with name %s found') % (self.params['log_stream_name']) + ) + + +def main(): + module = LtsStreamModule() + module() + + +if __name__ == "__main__": + main() + From b0ae5848510328f4cca277d5ce2d00ef74247747 Mon Sep 17 00:00:00 2001 From: Daniela Ebert Date: Mon, 11 Mar 2024 08:58:37 +0000 Subject: [PATCH 2/4] Add LTS playbook example --- examples/playbooks/14_lts.yml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 examples/playbooks/14_lts.yml diff --git a/examples/playbooks/14_lts.yml b/examples/playbooks/14_lts.yml new file mode 100644 index 00000000..5f6a6472 --- /dev/null +++ b/examples/playbooks/14_lts.yml @@ -0,0 +1,30 @@ +--- + +# Testing LTS ansible collection +# +- name: Test LTS ansible collections + hosts: localhost + tasks: + - name: Create LTS log group + lts_group: + name: 'lts_group' + ttl_in_days: 5 + state: present + + - name: Create LTS log stream + lts_stream: + log_group_name: 'lts_group' + log_stream_name: 'lts_stream' + ttl_in_days: 5 + + - name: Delete LTS log stream + lts_stream: + log_group_name: 'lts_group' + log_stream_name: 'lts_stream' + state: absent + + - name: Delete LTS log group + lts_group: + name: 'lts_group' + state: absent + From d51e0aa0f43a43a5867dcde50ae0ac186c86aa5d Mon Sep 17 00:00:00 2001 From: Daniela Ebert Date: Mon, 11 Mar 2024 10:25:46 +0000 Subject: [PATCH 3/4] Fix syntax/whitespace --- plugins/modules/lts_group.py | 9 +++------ plugins/modules/lts_stream.py | 13 +++++-------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/plugins/modules/lts_group.py b/plugins/modules/lts_group.py index 0c8dd633..111a3902 100644 --- a/plugins/modules/lts_group.py +++ b/plugins/modules/lts_group.py @@ -49,12 +49,10 @@ - opentelekomcloud.cloud.lts_group: name: 'lts-test' ttl_in_days: '7' - # Delete LTS log group - opentelekomcloud.cloud.lts_group: name: 'lts-test' state: absent - # Update LTS log group - opentelekomcloud.cloud.lts_group: name: 'lts-test' @@ -84,14 +82,14 @@ def run(self): for x in self.conn.lts.groups(): group_list.append(x.name) groupid_list.append(x.id) - + # Check if log group exists, get id attrs['name'] = self.params['name'] if attrs['name'] in group_list: group = attrs['name'] i = group_list.index(group) groupid = groupid_list[i] - + if self.params['ttl_in_days']: attrs['ttl_in_days'] = self.params['ttl_in_days'] @@ -108,7 +106,7 @@ def run(self): elif group: if self.params['ttl_in_days']: attrs['ttl_in_days'] = self.params['ttl_in_days'] - + if self.ansible.check_mode: self.exit(changed=True) group = self.conn.lts.update_group(group=groupid, **attrs) @@ -138,4 +136,3 @@ def main(): if __name__ == "__main__": main() - diff --git a/plugins/modules/lts_stream.py b/plugins/modules/lts_stream.py index 9579848f..f26581b8 100644 --- a/plugins/modules/lts_stream.py +++ b/plugins/modules/lts_stream.py @@ -55,7 +55,6 @@ log_group_name: 'lts-test-group' log_stream_name: 'lts-test-stream' ttl_in_days: '5' - # Delete LTS log stream - opentelekomcloud.cloud.lts_stream: log_group_name: 'lts-test-group' @@ -90,12 +89,12 @@ def run(self): for x in self.conn.lts.groups(): group_list.append(x.name) groupid_list.append(x.id) - + # Check if log group exists, get id if self.params['log_group_name'] in group_list: group = self.params['log_group_name'] i = group_list.index(group) - groupid = groupid_list[i] + groupid = groupid_list[i] # Exit, if log group not existing if not group: @@ -104,7 +103,7 @@ def run(self): failed=True, message=('No Group with name %s found') % (self.params['log_group_name']) ) - # Get existing streams + # Get existing streams for x in self.conn.lts.streams(log_group=groupid): stream_list.append(x.name) streamid_list.append(x.id) @@ -113,7 +112,7 @@ def run(self): if self.params['log_stream_name'] in stream_list: stream = self.params['log_stream_name'] i = stream_list.index(stream) - streamid = streamid_list[i] + streamid = streamid_list[i] if self.params['state'] == 'present': @@ -136,14 +135,13 @@ def run(self): message=('Stream with name %s already exists') % (self.params['log_stream_name']) ) - if self.params['state'] == 'absent': # Stream Deletion if stream: if self.ansible.check_mode: self.exit(changed=True) - stream = self.conn.lts.delete_stream(log_group=groupid,log_stream=streamid) + stream = self.conn.lts.delete_stream(log_group=groupid, log_stream=streamid) self.exit(changed=True, stream=stream) elif not stream: @@ -161,4 +159,3 @@ def main(): if __name__ == "__main__": main() - From 53c0899064248787c90db5960a5c6370bcca1662 Mon Sep 17 00:00:00 2001 From: Daniela Ebert Date: Mon, 11 Mar 2024 10:42:02 +0000 Subject: [PATCH 4/4] remove white space --- plugins/modules/lts_group.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/modules/lts_group.py b/plugins/modules/lts_group.py index 111a3902..ad14ad8d 100644 --- a/plugins/modules/lts_group.py +++ b/plugins/modules/lts_group.py @@ -88,7 +88,7 @@ def run(self): if attrs['name'] in group_list: group = attrs['name'] i = group_list.index(group) - groupid = groupid_list[i] + groupid = groupid_list[i] if self.params['ttl_in_days']: attrs['ttl_in_days'] = self.params['ttl_in_days']