Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
exclude: |
(?x)
# NOT INSTALLABLE ADDONS
^cetmix_tower_server/|
# END NOT INSTALLABLE ADDONS
# Files and folders generated by bots, to avoid loops
^setup/|/static/description/index\.html$|
Expand Down Expand Up @@ -43,8 +44,8 @@ repos:
hooks:
# update the NOT INSTALLABLE ADDONS section above
- id: oca-update-pre-commit-excluded-addons
- id: oca-fix-manifest-website
args: ["https://www.quartile.co"]
# - id: oca-fix-manifest-website
# args: ["https://www.quartile.co"]
- id: oca-gen-addon-readme
args:
- --addons-dir=.
Expand Down
179 changes: 179 additions & 0 deletions cetmix_tower_server/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
===================
Cetmix Tower Server
===================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:5ef4dcc43adc7d90831237829820f7f89af3d55a6e581ff65f2be3930de1eba1
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-qrtl%2Fqrtl--custom-lightgray.png?logo=github
:target: https://github.com/qrtl/qrtl-custom/tree/16.0/cetmix_tower_server
:alt: qrtl/qrtl-custom

|badge1| |badge2| |badge3|

`Cetmix Tower <https://cetmix.com/tower>`__ offers a streamlined
solution for managing remote servers and applications via SSH or API
calls directly from `Odoo <https://odoo.com>`__. It is designed for
versatility across different operating systems and software
environments, providing a practical option for those looking to manage
servers without getting tied down by vendor or technology constraints.

Please refer to the `official
documentation <https://cetmix.com/tower>`__ for detailed information.

**Table of contents**

.. contents::
:local:

Configuration
=============

Please refer to the `official
documentation <https://cetmix.com/tower>`__ for detailed configuration
instructions.

Usage
=====

Please refer to the `official
documentation <https://cetmix.com/tower>`__ for detailed usage
instructions.

Changelog
=========

16.0.1.1.4 (2025-07-07)
-----------------------

- Bugfixes: Command log sorting (4816)

16.0.1.1.2 (2025-06-25)
-----------------------

- Features: Required variables in servers (4779)

16.0.1.1.1 (2025-06-21)
-----------------------

- Features: Command view improvements (4753)

16.0.1.1.0 (2025-06-20)
-----------------------

- Features: Run commands and flight plans using scheduled tasks. (4650)

16.0.1.0.12 (2025-06-06)
------------------------

- Features: Improve command and flight plan log management. (4749)

16.0.1.0.11 (2025-06-06)
------------------------

- Bugfixes: Host key cannot be retrieved from the UI. (4747)

16.0.1.0.10 (2025-05-24)
------------------------

- Features: Improve command log and flight plan form views (4697)

16.0.1.0.9 (2025-05-23)
-----------------------

- Bugfixes: Error when rendering a file not attached to a server.
(4715)

16.0.1.0.8 (2025-05-21)
-----------------------

- Features: References for secret values. (4696)
- Features: Make the "Host key" field non-required in the form view to
improve the UX. (4699)

16.0.1.0.7 (2025-05-16)
-----------------------

- Features: Option to preserve command splitting when using sudo​.
(4641)

- Features: Record references for files. (4670)

- Features: Use ``sudo`` parameter to pass sudo mode to command runner
instead of using context. (4678)

- Bugfixes: Incorrect sudo usage in commands run in wizard. Pass 'No
split for sudo' property to commands run in wizard. (4679)

16.0.1.0.6 (2025-05-16)
-----------------------

- Features: Improve the key storage functionality. (4686)

16.0.1.0.5 (2025-05-09)
-----------------------

- Bugfixes: Non-critical issues and performance improvements. (4663)

16.0.1.0.4 (2025-04-30)
-----------------------

- Features: UI/UX improvements. (4642)

16.0.1.0.3 (2025-04-22)
-----------------------

- Features: Allow to pass custom variable values to commands (4524)

- Features: Cetmix Tower Odoo Automation model: pass custom variable
values to the ``server_run_command`` method. (4547)

- Bugfixes: Random id generation, sudo command parsing, record rule
names, spelling errors in descriptions. (4612)

16.0.1.0.2 (2025-04-22)
-----------------------

- Bugfixes: Refactor secret value handling, fix the new server template
creation wizard. (4601)

16.0.1.0.1
----------

Release for Odoo 16.0

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/qrtl/qrtl-custom/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/qrtl/qrtl-custom/issues/new?body=module:%20cetmix_tower_server%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
-------

* Cetmix

Maintainers
-----------

This module is part of the `qrtl/qrtl-custom <https://github.com/qrtl/qrtl-custom/tree/16.0/cetmix_tower_server>`_ project on GitHub.

You are welcome to contribute.
4 changes: 4 additions & 0 deletions cetmix_tower_server/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# pylint: disable=E8103

from . import models
from . import wizards
82 changes: 82 additions & 0 deletions cetmix_tower_server/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# Copyright Cetmix OÜ 2022
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Cetmix Tower Server",
"summary": "Manage servers and applications from Odoo",
"version": "16.0.1.1.4",
"development_status": "Beta",
"category": "Productivity",
"website": "https://cetmix.com",
"live_test_url": "https://cetmix.com/tower",
"images": ["static/description/banner.png"],
"author": "Cetmix",
"license": "AGPL-3",
"application": False,
"installable": True,
"external_dependencies": {
"python": ["paramiko"],
},
"depends": [
"mail",
],
"data": [
"security/cetmix_tower_server_groups.xml",
"security/ir.model.access.csv",
"security/cx_tower_server_security.xml",
"security/cx_tower_command_security.xml",
"security/cx_tower_plan_security.xml",
"security/cx_tower_plan_line_security.xml",
"security/cx_tower_plan_line_action_security.xml",
"security/cx_tower_plan_log_security.xml",
"security/cx_tower_server_log_security.xml",
"security/cx_tower_command_log_security.xml",
"security/cx_tower_server_template_security.xml",
"security/cx_tower_file_security.xml",
"security/cx_tower_file_template_security.xml",
"security/cx_tower_variable_security.xml",
"security/cx_tower_variable_value_security.xml",
"security/cx_tower_variable_option_security.xml",
"security/cx_tower_scheduled_task_security.xml",
"security/cx_tower_scheduled_task_cv_security.xml",
"security/cx_tower_key_security.xml",
"security/cx_tower_key_value_security.xml",
"security/cx_tower_tag_security.xml",
"security/cx_tower_shortcut_security.xml",
"data/ir_actions_server.xml",
"data/ir_cron.xml",
"data/ir_config_parameter.xml",
"wizards/cx_tower_command_run_wizard_view.xml",
"wizards/cx_tower_plan_run_wizard_view.xml",
"wizards/cx_tower_server_template_create_wizard_view.xml",
"wizards/cx_tower_server_host_key_wizard_view.xml",
"views/cx_tower_server_view.xml",
"views/cx_tower_os_view.xml",
"views/cx_tower_tag_view.xml",
"views/cx_tower_variable_view.xml",
"views/cx_tower_variable_value_view.xml",
"views/cx_tower_command_view.xml",
"views/cx_tower_plan_view.xml",
"views/cx_tower_plan_line_view.xml",
"views/cx_tower_command_log_view.xml",
"views/cx_tower_plan_log_view.xml",
"views/cx_tower_key_view.xml",
"views/cx_tower_file_view.xml",
"views/cx_tower_file_template_view.xml",
"views/cx_tower_server_log_view.xml",
"views/cx_tower_server_template_view.xml",
"views/cx_tower_shortcut_view.xml",
"views/cx_tower_scheduled_task_view.xml",
"views/res_partner_view.xml",
"views/res_config_settings.xml",
"views/menuitems.xml",
],
"demo": [
"demo/demo_data.xml",
],
"assets": {
"web.assets_backend": [
"cetmix_tower_server/static/src/**/*.js",
"cetmix_tower_server/static/src/**/*.scss",
],
},
}
33 changes: 33 additions & 0 deletions cetmix_tower_server/data/ir_actions_server.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>

<record id="action_execute_cx_tower_command" model="ir.actions.server">
<field name="name">Run Command</field>
<field name="type">ir.actions.server</field>
<field name="model_id" ref="model_cx_tower_server" />
<field name="binding_model_id" ref="model_cx_tower_server" />
<field name="sequence">10</field>
<field name="state">code</field>
<field name="code">action = records.action_run_command()</field>
<field name="groups_id" eval="[(4, ref('cetmix_tower_server.group_user'))]" />
</record>

<record id="action_execute_cx_tower_plan" model="ir.actions.server">
<field name="name">Run Flight Plan</field>
<field name="type">ir.actions.server</field>
<field name="model_id" ref="model_cx_tower_server" />
<field name="binding_model_id" ref="model_cx_tower_server" />
<field name="sequence">12</field>
<field name="state">code</field>
<field name="code">action = records.action_run_flight_plan()</field>
<field name="groups_id" eval="[(4, ref('cetmix_tower_server.group_user'))]" />
</record>

<record id="action_cx_cetmix_tower_partner" model="ir.actions.act_window">
<field name="name">Partners</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="view_mode">tree,form</field>
</record>

</odoo>
6 changes: 6 additions & 0 deletions cetmix_tower_server/data/ir_config_parameter.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<odoo noupdate="1">
<record model="ir.config_parameter" id="cetmix_tower_server_command_timeout">
<field name="key">cetmix_tower_server.command_timeout</field>
<field name="value">900</field>
</record>
</odoo>
43 changes: 43 additions & 0 deletions cetmix_tower_server/data/ir_cron.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">

<!-- Check zombie commands -->
<record forcecreate="True" id="ir_cron_check_zombie_commands" model="ir.cron">
<field name="name">Cetmix Tower: Check zombie commands</field>
<field name="model_id" ref="model_cx_tower_server" />
<field name="state">code</field>
<field name="code">model._check_zombie_commands()</field>
<field name="user_id" ref="base.user_root" />
<field name="interval_number">15</field>
<field name="interval_type">minutes</field>
<field name="numbercall">-1</field>
<field eval="False" name="doall" />
</record>

<!-- Auto pull files from server -->
<record forcecreate="True" id="ir_cron_auto_pull_files_from_server" model="ir.cron">
<field name="name">Cetmix Tower: Auto pull files from server</field>
<field name="model_id" ref="model_cx_tower_file" />
<field name="state">code</field>
<field name="code">model._run_auto_pull_files()</field>
<field name="user_id" ref="base.user_root" />
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field eval="False" name="doall" />
</record>

<!-- Run scheduled tasks -->
<record forcecreate="True" id="ir_cron_run_scheduled_tasks" model="ir.cron">
<field name="name">Cetmix Tower: Run scheduled tasks</field>
<field name="model_id" ref="model_cx_tower_scheduled_task" />
<field name="state">code</field>
<field name="code">model._run_scheduled_tasks()</field>
<field name="user_id" ref="base.user_root" />
<field name="interval_number">5</field>
<field name="interval_type">minutes</field>
<field name="numbercall">-1</field>
<field eval="False" name="doall" />
</record>

</odoo>
Loading