52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
"""Add dellupdatesjson to endpointstates.
|
|
|
|
Stores the pending Dell Command | Update summary reported by the
|
|
shopdb-dellupdates agent utility. MEDIUMTEXT for consistency with the other
|
|
snapshot columns on this table.
|
|
|
|
Nullable with no backfill. Null means the endpoint has never reported a Dell
|
|
scan result, which is deliberately distinct from a stored payload whose status
|
|
is 'ok' with an empty list (scanned, nothing pending). The status card renders
|
|
those two states differently, so defaulting this to an empty summary would
|
|
assert every pre-existing endpoint had been scanned and found clean.
|
|
|
|
Idempotent: the column-add checks the live schema first, so a re-run and a
|
|
db.create_all() site both stay clean on strict MySQL 8.
|
|
"""
|
|
from alembic import op
|
|
|
|
import sqlalchemy as sa
|
|
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision = 'endpoints0016dellupdates'
|
|
down_revision = 'endpoints0015systemtelemetry'
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
TABLE_NAME = 'endpointstates'
|
|
|
|
COLUMN_NAME = 'dellupdatesjson'
|
|
|
|
|
|
def _has_column(table_name, column_name):
|
|
from sqlalchemy import inspect
|
|
|
|
inspector = inspect(op.get_bind())
|
|
if not inspector.has_table(table_name):
|
|
return False
|
|
return any(col['name'] == column_name
|
|
for col in inspector.get_columns(table_name))
|
|
|
|
|
|
def upgrade():
|
|
if not _has_column(TABLE_NAME, COLUMN_NAME):
|
|
op.add_column(
|
|
TABLE_NAME,
|
|
sa.Column(COLUMN_NAME, sa.Text(length=16777215), nullable=True))
|
|
|
|
|
|
def downgrade():
|
|
if _has_column(TABLE_NAME, COLUMN_NAME):
|
|
op.drop_column(TABLE_NAME, COLUMN_NAME)
|