first commit
This commit is contained in:
2
kk_odoo_saas/wizards/__init__.py
Executable file
2
kk_odoo_saas/wizards/__init__.py
Executable file
@@ -0,0 +1,2 @@
|
||||
from . import saas_app_delete
|
||||
from . import update_docker_image
|
||||
31
kk_odoo_saas/wizards/saas_app_delete.py
Executable file
31
kk_odoo_saas/wizards/saas_app_delete.py
Executable file
@@ -0,0 +1,31 @@
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class SaaSAppDelete(models.TransientModel):
|
||||
_name = "kk_odoo_saas.app.delete.wizard"
|
||||
_description = "Wizard to Destroy a SaaS App/Instance"
|
||||
|
||||
delete_database = fields.Boolean('Delete Database?', default=False)
|
||||
delete_pv = fields.Boolean('Delete Attachments and Web Data?', default=False)
|
||||
delete_svc = fields.Boolean('Delete Services and Ingress Rules?', default=True)
|
||||
delete_ing = fields.Boolean('Delete Ingress Rules?', default=True)
|
||||
delete_deployment = fields.Boolean('Delete Container / Pod(s) ?', default=True)
|
||||
|
||||
|
||||
def _default_app_id(self):
|
||||
res = False
|
||||
context = self.env.context
|
||||
if context.get("active_model") == "kk_odoo_saas.app" and context.get("active_id"):
|
||||
res = context["active_id"]
|
||||
return res
|
||||
|
||||
app_id = fields.Many2one(
|
||||
comodel_name="kk_odoo_saas.app", string="SaaS App", default=lambda r: r._default_app_id()
|
||||
)
|
||||
|
||||
def delete_saas_instance(self):
|
||||
if self.app_id:
|
||||
self.app_id.delete_app_from_wizard(delete_db=self.delete_database, delete_pv=self.delete_pv,
|
||||
delete_svc=self.delete_svc, delete_ing=self.delete_ing,
|
||||
delete_deployment=self.delete_deployment)
|
||||
return {"type": "ir.actions.act_window_close"}
|
||||
40
kk_odoo_saas/wizards/saas_app_delete.xml
Executable file
40
kk_odoo_saas/wizards/saas_app_delete.xml
Executable file
@@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
|
||||
<record id="view_saas_app_delete" model="ir.ui.view">
|
||||
<field name="name">Delete SaaS Instance</field>
|
||||
<field name="model">kk_odoo_saas.app.delete.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Delete SaaS Instance">
|
||||
<group string="Please choose options you want to delete.">
|
||||
<!-- <field name="job_ids" nolabel="1" />-->
|
||||
<field name="delete_database"/>
|
||||
<field name="delete_pv"/>
|
||||
<field name="delete_svc"/>
|
||||
<field name="delete_ing"/>
|
||||
<field name="delete_deployment"/>
|
||||
<field name="app_id" invisible="1"/>
|
||||
</group>
|
||||
<footer>
|
||||
<button
|
||||
name="delete_saas_instance"
|
||||
string="Delete Instance"
|
||||
type="object"
|
||||
class="oe_highlight"
|
||||
/>
|
||||
<button string="Cancel" class="oe_link" special="cancel" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_saas_app_delete_wizard" model="ir.actions.act_window">
|
||||
<field name="name">Delete SaaS Instance</field>
|
||||
<field name="res_model">kk_odoo_saas.app.delete.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="view_saas_app_delete" />
|
||||
<field name="target">new</field>
|
||||
<field name="binding_model_id" ref="kk_odoo_saas.model_kk_odoo_saas_app" />
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
99
kk_odoo_saas/wizards/update_docker_image.py
Executable file
99
kk_odoo_saas/wizards/update_docker_image.py
Executable file
@@ -0,0 +1,99 @@
|
||||
from odoo import fields, models, api
|
||||
import logging
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
class ContainerArgument(models.TransientModel):
|
||||
_name = 'saas.app.container.argument'
|
||||
_description = "Show the Container Arguments while Updating Docker Image"
|
||||
name = fields.Char("Argument Name")
|
||||
value = fields.Char("Argument Value")
|
||||
update_wizard_id = fields.Many2one('kk_odoo_saas.app.update.dkr.img.wizard')
|
||||
|
||||
|
||||
class ContainerEnvVar(models.TransientModel):
|
||||
_name = 'saas.app.container.env.var'
|
||||
_description = "Show Container's Env Vars while Updating Docker Image"
|
||||
name = fields.Char("Variable Name")
|
||||
value = fields.Char("Variable Value")
|
||||
value_from = fields.Char("Value From")
|
||||
update_wizard_id = fields.Many2one('kk_odoo_saas.app.update.dkr.img.wizard')
|
||||
|
||||
|
||||
class SaaSAppUpdateDockerImage(models.TransientModel):
|
||||
_name = "kk_odoo_saas.app.update.dkr.img.wizard"
|
||||
_description = "Wizard to Update Docker Image of a SaaS App/Instance"
|
||||
|
||||
def _default_app_id(self):
|
||||
res = False
|
||||
context = self.env.context
|
||||
if context.get("active_model") == "kk_odoo_saas.app" and context.get("active_id"):
|
||||
res = context["active_id"]
|
||||
return res
|
||||
|
||||
@api.model
|
||||
def default_get(self, default_fields):
|
||||
deployment_yaml = False
|
||||
container_arguments = False
|
||||
context = self.env.context
|
||||
evs = []
|
||||
|
||||
if context.get("active_model") == "kk_odoo_saas.app" and context.get("active_id"):
|
||||
app_id = context["active_id"]
|
||||
if app_id:
|
||||
app_obj = self.env['kk_odoo_saas.app'].browse(app_id)
|
||||
if app_obj:
|
||||
deployment = app_obj.get_odoo_deployment()
|
||||
if deployment:
|
||||
deployment_yaml = str(deployment)
|
||||
container_arguments = deployment.spec.template.spec.containers[0].args
|
||||
container_env_vars = deployment.spec.template.spec.containers[0].env
|
||||
for cev in container_env_vars:
|
||||
evs.append({'name': cev.name, 'value': cev.value, 'value_from': False})
|
||||
|
||||
cas = ['--database=pos', '--without-demo=True']
|
||||
container_argument_ids = []
|
||||
container_env_var_ids = []
|
||||
|
||||
for i in range(len(cas)):
|
||||
key, val = cas[i].split('=')
|
||||
if key == '--database':
|
||||
if val == app_obj.client_db_name:
|
||||
pass
|
||||
else:
|
||||
pass
|
||||
# logic when database name is conflict
|
||||
else:
|
||||
container_argument_ids.append((0, 0, {'name': key, 'value': val}))
|
||||
|
||||
for i in range(len(evs)):
|
||||
container_env_var_ids.append((0, 0, evs[i]))
|
||||
|
||||
contextual_self = self.with_context(default_deployment_yaml=deployment_yaml,
|
||||
default_container_arguments=container_arguments or '[]',
|
||||
default_container_argument_ids=container_argument_ids,
|
||||
default_container_env_var_ids=container_env_var_ids,
|
||||
)
|
||||
return super(SaaSAppUpdateDockerImage, contextual_self).default_get(default_fields)
|
||||
|
||||
app_id = fields.Many2one(
|
||||
comodel_name="kk_odoo_saas.app", string="SaaS App", default=lambda r: r._default_app_id()
|
||||
)
|
||||
deployment_yaml = fields.Text('Yaml of kubernetes Deployment')
|
||||
container_arguments = fields.Char()
|
||||
|
||||
container_argument_ids = fields.One2many('saas.app.container.argument', 'update_wizard_id')
|
||||
container_env_var_ids = fields.One2many('saas.app.container.env.var', 'update_wizard_id')
|
||||
|
||||
# container_db = fields.Char('Database name from Container')
|
||||
# app_db = fields.Char('Database name from App')
|
||||
is_cft_db = fields.Char("Is Database name Conflicting")
|
||||
|
||||
def update_docker_image(self):
|
||||
if self.app_id:
|
||||
envs = []
|
||||
for env_var in self.container_env_var_ids:
|
||||
envs.append({'name': env_var.name, 'value': env_var.value})
|
||||
_logger.info(envs)
|
||||
|
||||
self.app_id.update_docker_image(container_arguments=self.container_arguments, env_vars=envs)
|
||||
return {"type": "ir.actions.act_window_close"}
|
||||
73
kk_odoo_saas/wizards/update_docker_image.xml
Executable file
73
kk_odoo_saas/wizards/update_docker_image.xml
Executable file
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
|
||||
<record id="view_saas_app_update_dkr_img" model="ir.ui.view">
|
||||
<field name="name">Update Docker Image of Instance</field>
|
||||
<field name="model">kk_odoo_saas.app.update.dkr.img.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Update Docker Image of Instance">
|
||||
<group string="Please choose settings.">
|
||||
<field name="container_arguments"/>
|
||||
<field name="container_argument_ids">
|
||||
<tree string="Options" editable="bottom">
|
||||
<field name="name" required="1"/>
|
||||
<field name="value" required="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
<field name="container_env_var_ids">
|
||||
<tree string="Options" editable="bottom">
|
||||
<field name="name" required="1"/>
|
||||
<field name="value" required="1"/>
|
||||
</tree>
|
||||
|
||||
</field>
|
||||
</group>
|
||||
<group>
|
||||
<div class="accordion md-accordion" id="accordionEx" role="tablist" aria-multiselectable="true">
|
||||
<!-- Accordion card -->
|
||||
<div class="card">
|
||||
<!-- Card header -->
|
||||
<div class="card-header" role="tab" id="headingOne1">
|
||||
<a data-toggle="collapse" data-parent="#accordionEx" href="#collapseOne1"
|
||||
aria-expanded="true"
|
||||
aria-controls="collapseOne1">
|
||||
<h5 class="mb-0">
|
||||
<i class="fa fa-arrow-right"/>
|
||||
Click To See Yaml of Deployment (Advanced)
|
||||
</h5>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Card body -->
|
||||
<div id="collapseOne1" class="collapse " role="tabpanel" aria-labelledby="headingOne1"
|
||||
data-parent="#accordionEx">
|
||||
<field name="deployment_yaml" widget="ace" options="{'mode': 'yaml'}" nolabel="1"/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</group>
|
||||
<footer>
|
||||
<button
|
||||
name="update_docker_image"
|
||||
string="Update Docker Image"
|
||||
type="object"
|
||||
class="oe_highlight"
|
||||
/>
|
||||
<button string="Cancel" class="oe_link" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_saas_app_update_dkr_img_wizard" model="ir.actions.act_window">
|
||||
<field name="name">Update Docker Image of Instance</field>
|
||||
<field name="res_model">kk_odoo_saas.app.update.dkr.img.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="view_saas_app_update_dkr_img"/>
|
||||
<field name="target">new</field>
|
||||
<field name="binding_model_id" ref="kk_odoo_saas.model_kk_odoo_saas_app"/>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user