[ADD] base modules

This commit is contained in:
Muhammad
2024-04-07 12:43:39 +05:00
parent 311598a929
commit fa3d921e2d
276 changed files with 51186 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
from . import saas_app_delete
from . import update_docker_image

View 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"}

View 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>

View 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"}

View 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>