Tower: upload cetmix_tower_server 16.0.2.2.9 (via marketplace)
This commit is contained in:
@@ -0,0 +1,119 @@
|
|||||||
|
import logging
|
||||||
|
|
||||||
|
from odoo import SUPERUSER_ID, api
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def migrate(cr, version):
|
||||||
|
"""
|
||||||
|
Move SSH credentials, host keys, SSH keys, and secret values
|
||||||
|
to the vault-backed storage.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
# 1. SSH password and host key are now stored in secrets
|
||||||
|
_logger.info("Moving SSH password and host key to vault.")
|
||||||
|
env = api.Environment(cr, SUPERUSER_ID, {})
|
||||||
|
# Read SSH password and host key from servers using SQL query
|
||||||
|
cr.execute(
|
||||||
|
"""
|
||||||
|
SELECT id, ssh_password, host_key
|
||||||
|
FROM cx_tower_server
|
||||||
|
WHERE ssh_password IS NOT NULL OR host_key IS NOT NULL
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
server_records = cr.fetchall()
|
||||||
|
server_model = env["cx.tower.server"]
|
||||||
|
success = False
|
||||||
|
try:
|
||||||
|
for record in server_records:
|
||||||
|
_logger.info(
|
||||||
|
f"Moving SSH password and host key to vault for server {record[0]}"
|
||||||
|
)
|
||||||
|
server_model.browse(record[0]).write(
|
||||||
|
{"ssh_password": record[1], "host_key": record[2]}
|
||||||
|
)
|
||||||
|
_logger.info("Moving SSH password and host key to vault completed.")
|
||||||
|
success = True
|
||||||
|
# Clear SSH password and host key from servers
|
||||||
|
except Exception as e:
|
||||||
|
_logger.error(f"Error moving SSH password and host key to vault: {e}")
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
if success:
|
||||||
|
cr.execute(
|
||||||
|
"""
|
||||||
|
UPDATE cx_tower_server
|
||||||
|
SET ssh_password = NULL, host_key = NULL
|
||||||
|
WHERE ssh_password IS NOT NULL OR host_key IS NOT NULL
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
_logger.info("Cleared SSH password and host key from servers.")
|
||||||
|
|
||||||
|
# 2. SSH keys are now stored in secrets
|
||||||
|
_logger.info("Moving SSH keys to vault.")
|
||||||
|
success = False
|
||||||
|
# Read SSH keys from keys using SQL query
|
||||||
|
cr.execute(
|
||||||
|
"""
|
||||||
|
SELECT id, secret_value
|
||||||
|
FROM cx_tower_key
|
||||||
|
WHERE key_type = 'k'
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
ssh_key_records = cr.fetchall()
|
||||||
|
ssh_key_model = env["cx.tower.key"]
|
||||||
|
try:
|
||||||
|
for record in ssh_key_records:
|
||||||
|
_logger.info(f"Moving SSH key to vault record {record[0]}")
|
||||||
|
ssh_key_model.browse(record[0]).write({"secret_value": record[1]})
|
||||||
|
_logger.info("Moving SSH keys to vault completed.")
|
||||||
|
success = True
|
||||||
|
except Exception as e:
|
||||||
|
_logger.error(f"Error moving SSH keys to vault: {e}")
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
if success:
|
||||||
|
# Clear SSH key from keys
|
||||||
|
cr.execute(
|
||||||
|
"""
|
||||||
|
UPDATE cx_tower_key
|
||||||
|
SET secret_value = NULL
|
||||||
|
WHERE secret_value IS NOT NULL
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
_logger.info("Cleared SSH key from keys.")
|
||||||
|
|
||||||
|
# 3. Secret values are now stored in secrets
|
||||||
|
_logger.info("Moving secret values to vault.")
|
||||||
|
success = False
|
||||||
|
# Read secret values from key values using SQL query
|
||||||
|
cr.execute(
|
||||||
|
"""
|
||||||
|
SELECT id, secret_value
|
||||||
|
FROM cx_tower_key_value
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
secret_value_records = cr.fetchall()
|
||||||
|
secret_value_model = env["cx.tower.key.value"]
|
||||||
|
try:
|
||||||
|
for record in secret_value_records:
|
||||||
|
_logger.info(f"Moving secret value to vault record {record[0]}")
|
||||||
|
secret_value_model.browse(record[0]).write({"secret_value": record[1]})
|
||||||
|
_logger.info("Moving secret values to vault completed.")
|
||||||
|
success = True
|
||||||
|
except Exception as e:
|
||||||
|
_logger.error(f"Error moving secret values to vault: {e}")
|
||||||
|
raise e
|
||||||
|
finally:
|
||||||
|
if success:
|
||||||
|
# Clear secret value from key values
|
||||||
|
cr.execute(
|
||||||
|
"""
|
||||||
|
UPDATE cx_tower_key_value
|
||||||
|
SET secret_value = NULL
|
||||||
|
WHERE secret_value IS NOT NULL
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
_logger.info("Cleared secret value from key values.")
|
||||||
Reference in New Issue
Block a user