diff --git a/addons/ospp_slide/models/models.py b/addons/ospp_slide/models/models.py index 7872d15..2277b1b 100644 --- a/addons/ospp_slide/models/models.py +++ b/addons/ospp_slide/models/models.py @@ -31,13 +31,13 @@ class SlideChannel(models.Model): channel_ids = channel_obj.search([('instance_arrangement', 'not in', ['no_need']), ('instance_base', '!=', False)]) for channel_id in channel_ids: - channel_id.action_generate_instance() + channel_id.action_create_instance() self.env.cr.commit() instance_ids = instance_obj.search([('instance_created', '!=', True)]) for instance_id in instance_ids: - instance_id.action_generate_instance() + instance_id.action_create_instance() self.env.cr.commit() @@ -47,7 +47,7 @@ class SlideChannel(models.Model): return True - def action_generate_instance(self): + def action_create_instance(self): instance_obj = self.env['channel.instance'].sudo() partner_obj = self.env['slide.channel.partner'].sudo() for rec in self: @@ -217,7 +217,7 @@ class ChannelInstance(models.Model): rec.is_notified = True return True - def action_generate_instance(self): + def action_create_instance(self): for rec in self: if rec.instance_created: return True @@ -254,6 +254,31 @@ class ChannelInstance(models.Model): rec.instance_created = True return True + def action_drop_instance(self): + for rec in self: + if not rec.instance_created: + return True + + url = f"{rec.instance_id.management_api}/web/database/drop" + master_pwd = f"{rec.instance_id.management_secret}" + dbname = rec.service_name + + headers = { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Cookie': 'frontend_lang=en_US; session_id=645c41edf8f8c7e1e983ba0f5bd9e94d9a3bd4bc' + } + + payload = { + 'master_pwd': master_pwd, + 'name': dbname, + } + + response = requests.request("POST", url, headers=headers, data=urlencode(payload), verify=False) + rec.message = response.text + if response.status_code == 200 and 'error' not in response.text: + rec.instance_created = False + return True + def name_get(self): # Prefetch the fields used by the `name_get`, so `browse` doesn't fetch other fields self.browse(self.ids).read(['name', 'code']) diff --git a/addons/ospp_slide/security/security_groups.xml b/addons/ospp_slide/security/security_groups.xml index fe8ad9a..6272047 100755 --- a/addons/ospp_slide/security/security_groups.xml +++ b/addons/ospp_slide/security/security_groups.xml @@ -19,6 +19,8 @@ 14 + + channel.instance read @@ -45,5 +47,13 @@ + + + + + Action Drop Instance + + + diff --git a/addons/ospp_slide/views/views.xml b/addons/ospp_slide/views/views.xml index 4b59ac4..23dab57 100644 --- a/addons/ospp_slide/views/views.xml +++ b/addons/ospp_slide/views/views.xml @@ -10,14 +10,14 @@ - - - + + + - - -