diff --git a/gso/migrations/versions/2023-04-05_857225661207_add_device_workflows.py b/gso/migrations/versions/2023-04-05_857225661207_add_device_workflows.py index c4d7d7fed664375254113c0537cdbe2ce6d90beb..fc938a278b5fc3d4a2a7800b002118ca3d47372a 100644 --- a/gso/migrations/versions/2023-04-05_857225661207_add_device_workflows.py +++ b/gso/migrations/versions/2023-04-05_857225661207_add_device_workflows.py @@ -10,7 +10,7 @@ from alembic import op # revision identifiers, used by Alembic. revision = '857225661207' -down_revision = 'f4959f32c866' +down_revision = 'd52256e7d715' branch_labels = None depends_on = None diff --git a/gso/migrations/versions/2023-04-28_6b8483b46d06_add_iptrunk_product.py.no b/gso/migrations/versions/2023-04-28_6b8483b46d06_add_iptrunk_product.py.no deleted file mode 100644 index 6770a04af10af7daeac0268a9a79d4103ad0550a..0000000000000000000000000000000000000000 --- a/gso/migrations/versions/2023-04-28_6b8483b46d06_add_iptrunk_product.py.no +++ /dev/null @@ -1,266 +0,0 @@ -"""Add Iptrunk product. - -Revision ID: 6b8483b46d06 -Revises: 857225661207 -Create Date: 2023-04-28 12:35:22.996576 - -""" -import sqlalchemy as sa -from alembic import op - -# revision identifiers, used by Alembic. -revision = '6b8483b46d06' -down_revision = '857225661207' -branch_labels = None -depends_on = None - - -def upgrade() -> None: - conn = op.get_bind() - conn.execute(""" -INSERT INTO products (name, description, product_type, tag, status) VALUES ('Iptrunk', 'An IPtrunk (product)', 'Iptrunk', 'IPTRUNK', 'active') RETURNING products.product_id - """) - conn.execute(""" -INSERT INTO product_blocks (name, description, tag, status) VALUES ('IptrunkBlock', 'An IPtrunk (productBlock)', 'IPTRUNK', 'active') RETURNING product_blocks.product_block_id - """) - conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideB_ae_iface', 'B-side: LAG interface name') RETURNING resource_types.resource_type_id - """) - conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_ipv4_network', 'Global: IPv4 network') RETURNING resource_types.resource_type_id - """) - conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideA_ae_members', 'A-side: LAG members') RETURNING resource_types.resource_type_id - """) - conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideA_ae_iface', 'A-side: LAG interface name') RETURNING resource_types.resource_type_id - """) - conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideB_ae_members', 'B-side: LAG members') RETURNING resource_types.resource_type_id - """) - conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideA_ae_geant_a_sid', 'A-side: GA identifier for the LAG') RETURNING resource_types.resource_type_id - """) - conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('geant_s_sid', 'Global: Service ID for the trunk') RETURNING resource_types.resource_type_id - """) - conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_description', 'Global: LAG human interface description') RETURNING resource_types.resource_type_id - """) - conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideA_fqdn', 'A-side: router FQDN') RETURNING resource_types.resource_type_id - """) - conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideB_ae_geant_a_sid', 'B-side: GA identifier for the LAG') RETURNING resource_types.resource_type_id - """) - conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_speed', 'Global: LAG''s members speed') RETURNING resource_types.resource_type_id - """) - conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_ipv6_network', 'Global: IPv6 network') RETURNING resource_types.resource_type_id - """) - conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_minimum_links', 'Global: minimum links for the LAG') RETURNING resource_types.resource_type_id - """) - conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideB_fqdn', 'B-side: router FQDN') RETURNING resource_types.resource_type_id - """) - conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideB_ae_members_description', 'B-side: human interface description for LAG''s members') RETURNING resource_types.resource_type_id - """) - conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideA_ae_members_description', 'A-side: human interface description for LAG''s members') RETURNING resource_types.resource_type_id - """) - conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_type', 'Global: dark fiber vs leased lines') RETURNING resource_types.resource_type_id - """) - conn.execute(""" -INSERT INTO product_product_blocks (product_id, product_block_id) VALUES ((SELECT products.product_id FROM products WHERE products.name IN ('Iptrunk')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('geant_s_sid'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_description'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_type'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_speed'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_minimum_links'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_ipv4_network'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_ipv6_network'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_fqdn'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_iface'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_geant_a_sid'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_members'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_members_description'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_fqdn'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_iface'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_geant_a_sid'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_members'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_members_description'))) - """) - - -def downgrade() -> None: - conn = op.get_bind() - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('geant_s_sid')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('geant_s_sid')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_description')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_description')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_type')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_type')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_speed')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_speed')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_minimum_links')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_minimum_links')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_ipv4_network')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_ipv4_network')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_ipv6_network')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_ipv6_network')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_fqdn')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_fqdn')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_iface')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_iface')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_geant_a_sid')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_geant_a_sid')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_members')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_members')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_members_description')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_members_description')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_fqdn')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_fqdn')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_iface')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_iface')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_geant_a_sid')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_geant_a_sid')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_members')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_members')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_members_description')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_members_description')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values WHERE subscription_instance_values.resource_type_id IN (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_iface', 'iptrunk_ipv4_network', 'iptrunk_sideA_ae_members', 'iptrunk_sideA_ae_iface', 'iptrunk_sideB_ae_members', 'iptrunk_sideA_ae_geant_a_sid', 'geant_s_sid', 'iptrunk_description', 'iptrunk_sideA_fqdn', 'iptrunk_sideB_ae_geant_a_sid', 'iptrunk_speed', 'iptrunk_ipv6_network', 'iptrunk_minimum_links', 'iptrunk_sideB_fqdn', 'iptrunk_sideB_ae_members_description', 'iptrunk_sideA_ae_members_description', 'iptrunk_type')) - """) - conn.execute(""" -DELETE FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_iface', 'iptrunk_ipv4_network', 'iptrunk_sideA_ae_members', 'iptrunk_sideA_ae_iface', 'iptrunk_sideB_ae_members', 'iptrunk_sideA_ae_geant_a_sid', 'geant_s_sid', 'iptrunk_description', 'iptrunk_sideA_fqdn', 'iptrunk_sideB_ae_geant_a_sid', 'iptrunk_speed', 'iptrunk_ipv6_network', 'iptrunk_minimum_links', 'iptrunk_sideB_fqdn', 'iptrunk_sideB_ae_members_description', 'iptrunk_sideA_ae_members_description', 'iptrunk_type') - """) - conn.execute(""" -DELETE FROM product_product_blocks WHERE product_product_blocks.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Iptrunk')) AND product_product_blocks.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) - """) - conn.execute(""" -DELETE FROM subscription_instances WHERE subscription_instances.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) - """) - conn.execute(""" -DELETE FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock') - """) - conn.execute(""" -DELETE FROM processes WHERE processes.pid IN (SELECT processes_subscriptions.pid FROM processes_subscriptions WHERE processes_subscriptions.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Iptrunk')))) - """) - conn.execute(""" -DELETE FROM processes_subscriptions WHERE processes_subscriptions.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Iptrunk'))) - """) - conn.execute(""" -DELETE FROM subscription_instances WHERE subscription_instances.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Iptrunk'))) - """) - conn.execute(""" -DELETE FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Iptrunk')) - """) - conn.execute(""" -DELETE FROM products WHERE products.name IN ('Iptrunk') - """) diff --git a/gso/migrations/versions/2023-04-28_95cd21cb2b05_add_iptrunk_create_workflows.py.no b/gso/migrations/versions/2023-05-04_21e7bb0e5cad_add_site_create_workflow.py similarity index 65% rename from gso/migrations/versions/2023-04-28_95cd21cb2b05_add_iptrunk_create_workflows.py.no rename to gso/migrations/versions/2023-05-04_21e7bb0e5cad_add_site_create_workflow.py index 8b007e17edb7f0846d183d7caff964a84e233baf..118d7b125f58279504e7ea14ceac9f18cff0f043 100644 --- a/gso/migrations/versions/2023-04-28_95cd21cb2b05_add_iptrunk_create_workflows.py.no +++ b/gso/migrations/versions/2023-05-04_21e7bb0e5cad_add_site_create_workflow.py @@ -1,16 +1,16 @@ -"""add IPtrunk create workflows. +"""add Site create workflow. -Revision ID: 95cd21cb2b05 -Revises: 6b8483b46d06 -Create Date: 2023-04-28 12:37:36.801782 +Revision ID: 21e7bb0e5cad +Revises: 60d340427471 +Create Date: 2023-05-04 09:00:36.433715 """ import sqlalchemy as sa from alembic import op # revision identifiers, used by Alembic. -revision = '95cd21cb2b05' -down_revision = '6b8483b46d06' +revision = '21e7bb0e5cad' +down_revision = '60d340427471' branch_labels = None depends_on = None @@ -19,10 +19,10 @@ from orchestrator.migrations.helpers import create_workflow, delete_workflow new_workflows = [ { - "name": "create_iptrunk", + "name": "create_site", "target": "CREATE", - "description": "Create Iptrunk", - "product_type": "Iptrunk" + "description": "Create Site", + "product_type": "Site" } ] diff --git a/gso/migrations/versions/2023-05-04_4d850df522f2_add_site_model.py b/gso/migrations/versions/2023-05-04_4d850df522f2_add_site_model.py new file mode 100644 index 0000000000000000000000000000000000000000..49ac3327e449859f96a99005bfd47a9fde1512f9 --- /dev/null +++ b/gso/migrations/versions/2023-05-04_4d850df522f2_add_site_model.py @@ -0,0 +1,170 @@ +"""Add site model. + +Revision ID: 4d850df522f2 +Revises: +Create Date: 2023-05-04 08:27:31.942548 + +""" +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision = '4d850df522f2' +down_revision = None +branch_labels = ('data',) +depends_on = 'e05bb1967eff' + + +def upgrade() -> None: + conn = op.get_bind() + conn.execute(""" +INSERT INTO products (name, description, product_type, tag, status) VALUES ('Site', 'A Geant POP', 'Site', 'SITE', 'active') RETURNING products.product_id + """) + conn.execute(""" +INSERT INTO product_blocks (name, description, tag, status) VALUES ('SiteBlock', 'A Geant POP', 'SITE', 'active') RETURNING product_blocks.product_block_id + """) + conn.execute(""" +INSERT INTO resource_types (resource_type, description) VALUES ('site_internal_id', 'Site internal ID') RETURNING resource_types.resource_type_id + """) + conn.execute(""" +INSERT INTO resource_types (resource_type, description) VALUES ('site_country', 'Site country') RETURNING resource_types.resource_type_id + """) + conn.execute(""" +INSERT INTO resource_types (resource_type, description) VALUES ('site_longitude', 'Site Longitude') RETURNING resource_types.resource_type_id + """) + conn.execute(""" +INSERT INTO resource_types (resource_type, description) VALUES ('site_country_code', 'Site country code') RETURNING resource_types.resource_type_id + """) + conn.execute(""" +INSERT INTO resource_types (resource_type, description) VALUES ('site_tier', 'Site Tier') RETURNING resource_types.resource_type_id + """) + conn.execute(""" +INSERT INTO resource_types (resource_type, description) VALUES ('site_city', 'Site city') RETURNING resource_types.resource_type_id + """) + conn.execute(""" +INSERT INTO resource_types (resource_type, description) VALUES ('site_latitude', 'Site latitude') RETURNING resource_types.resource_type_id + """) + conn.execute(""" +INSERT INTO resource_types (resource_type, description) VALUES ('site_name', 'Site name') RETURNING resource_types.resource_type_id + """) + conn.execute(""" +INSERT INTO resource_types (resource_type, description) VALUES ('site_bgp_community_id', 'Site BGP community ID') RETURNING resource_types.resource_type_id + """) + conn.execute(""" +INSERT INTO product_product_blocks (product_id, product_block_id) VALUES ((SELECT products.product_id FROM products WHERE products.name IN ('Site')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) + """) + conn.execute(""" +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_name'))) + """) + conn.execute(""" +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_city'))) + """) + conn.execute(""" +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_country'))) + """) + conn.execute(""" +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_country_code'))) + """) + conn.execute(""" +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_latitude'))) + """) + conn.execute(""" +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_longitude'))) + """) + conn.execute(""" +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_internal_id'))) + """) + conn.execute(""" +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_bgp_community_id'))) + """) + conn.execute(""" +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_tier'))) + """) + + +def downgrade() -> None: + conn = op.get_bind() + conn.execute(""" +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_name')) + """) + conn.execute(""" +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_name')) + """) + conn.execute(""" +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_city')) + """) + conn.execute(""" +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_city')) + """) + conn.execute(""" +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_country')) + """) + conn.execute(""" +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_country')) + """) + conn.execute(""" +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_country_code')) + """) + conn.execute(""" +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_country_code')) + """) + conn.execute(""" +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_latitude')) + """) + conn.execute(""" +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_latitude')) + """) + conn.execute(""" +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_longitude')) + """) + conn.execute(""" +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_longitude')) + """) + conn.execute(""" +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_internal_id')) + """) + conn.execute(""" +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_internal_id')) + """) + conn.execute(""" +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_bgp_community_id')) + """) + conn.execute(""" +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_bgp_community_id')) + """) + conn.execute(""" +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_tier')) + """) + conn.execute(""" +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_tier')) + """) + conn.execute(""" +DELETE FROM subscription_instance_values WHERE subscription_instance_values.resource_type_id IN (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_internal_id', 'site_country', 'site_longitude', 'site_country_code', 'site_tier', 'site_city', 'site_latitude', 'site_name', 'site_bgp_community_id')) + """) + conn.execute(""" +DELETE FROM resource_types WHERE resource_types.resource_type IN ('site_internal_id', 'site_country', 'site_longitude', 'site_country_code', 'site_tier', 'site_city', 'site_latitude', 'site_name', 'site_bgp_community_id') + """) + conn.execute(""" +DELETE FROM product_product_blocks WHERE product_product_blocks.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Site')) AND product_product_blocks.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) + """) + conn.execute(""" +DELETE FROM subscription_instances WHERE subscription_instances.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) + """) + conn.execute(""" +DELETE FROM product_blocks WHERE product_blocks.name IN ('SiteBlock') + """) + conn.execute(""" +DELETE FROM processes WHERE processes.pid IN (SELECT processes_subscriptions.pid FROM processes_subscriptions WHERE processes_subscriptions.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Site')))) + """) + conn.execute(""" +DELETE FROM processes_subscriptions WHERE processes_subscriptions.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Site'))) + """) + conn.execute(""" +DELETE FROM subscription_instances WHERE subscription_instances.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Site'))) + """) + conn.execute(""" +DELETE FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Site')) + """) + conn.execute(""" +DELETE FROM products WHERE products.name IN ('Site') + """) diff --git a/gso/migrations/versions/2023-03-31_f4959f32c866_create_device_model.py b/gso/migrations/versions/2023-05-04_d52256e7d715_add_device_model.py similarity index 61% rename from gso/migrations/versions/2023-03-31_f4959f32c866_create_device_model.py rename to gso/migrations/versions/2023-05-04_d52256e7d715_add_device_model.py index 755a2fc3c199eccf67ecc3836fa5da9c757b0b84..59a1ec6fcecc9d9397e6343c530940e43bee40a9 100644 --- a/gso/migrations/versions/2023-03-31_f4959f32c866_create_device_model.py +++ b/gso/migrations/versions/2023-05-04_d52256e7d715_add_device_model.py @@ -1,238 +1,190 @@ -"""Create Device Model. +"""Add device model. -Revision ID: f4959f32c866 -Revises: -Create Date: 2023-03-31 17:42:59.692306 +Revision ID: d52256e7d715 +Revises: 4d850df522f2 +Create Date: 2023-05-04 08:30:12.367903 """ import sqlalchemy as sa from alembic import op # revision identifiers, used by Alembic. -revision = 'f4959f32c866' -down_revision = None -branch_labels = ('data',) -depends_on = 'e05bb1967eff' +revision = 'd52256e7d715' +down_revision = '4d850df522f2' +branch_labels = None +depends_on = None def upgrade() -> None: conn = op.get_bind() conn.execute(""" -INSERT INTO products (name, description, product_type, tag, status) VALUES ('Router', 'A Geant Router', 'Device', 'RTR', 'active') RETURNING products.product_id +INSERT INTO products (name, description, product_type, tag, status) VALUES ('Router', 'A Geant router', 'Device', 'RTR', 'active') RETURNING products.product_id """) conn.execute(""" -INSERT INTO products (name, description, product_type, tag, status) VALUES ('Switch', 'A Geant Switch', 'Device', 'SW', 'active') RETURNING products.product_id +INSERT INTO products (name, description, product_type, tag, status) VALUES ('Switch', 'A Geant switch', 'Device', 'SW', 'active') RETURNING products.product_id """) conn.execute(""" -INSERT INTO fixed_inputs (name, value, product_id) VALUES ('device_type', 'router', (SELECT products.product_id FROM products WHERE products.name IN ('Router'))), ('device_type', 'switch', (SELECT products.product_id FROM products WHERE products.name IN ('Switch'))) +INSERT INTO fixed_inputs (name, value, product_id) VALUES ('device_type', 'switch', (SELECT products.product_id FROM products WHERE products.name IN ('Switch'))), ('device_type', 'router', (SELECT products.product_id FROM products WHERE products.name IN ('Router'))) """) conn.execute(""" -INSERT INTO fixed_inputs (name, value, product_id) VALUES ('device_vendor', 'Juniper', (SELECT products.product_id FROM products WHERE products.name IN ('Router'))), ('device_vendor', 'NewVendor', (SELECT products.product_id FROM products WHERE products.name IN ('Switch'))) +INSERT INTO product_blocks (name, description, tag, status) VALUES ('DeviceBlock', 'A Geant device', 'DEVICE', 'active') RETURNING product_blocks.product_block_id """) conn.execute(""" -INSERT INTO product_blocks (name, description, tag, status) VALUES ('DeviceBlock', 'A Geant Device', 'DEV', 'active') RETURNING product_blocks.product_block_id +INSERT INTO resource_types (resource_type, description) VALUES ('device_lo_ipv4_address', 'Loopback IPv4 address') RETURNING resource_types.resource_type_id """) conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('snmp_location', 'SNMP Location') RETURNING resource_types.resource_type_id +INSERT INTO resource_types (resource_type, description) VALUES ('device_fqdn', 'Device FQDN') RETURNING resource_types.resource_type_id """) conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('fqdn', 'Fully Qulified Domain Name') RETURNING resource_types.resource_type_id +INSERT INTO resource_types (resource_type, description) VALUES ('device_ts_port', 'Terminal Server Port') RETURNING resource_types.resource_type_id """) conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('ts_address', 'Terminal Server IP address') RETURNING resource_types.resource_type_id +INSERT INTO resource_types (resource_type, description) VALUES ('device_lo_iso_address', 'Loopback ISO address') RETURNING resource_types.resource_type_id """) conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('site_city', 'City') RETURNING resource_types.resource_type_id +INSERT INTO resource_types (resource_type, description) VALUES ('device_ts_address', 'Terminal Server Address') RETURNING resource_types.resource_type_id """) conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('lo_ipv6_address', 'Loopback IPv6 Address') RETURNING resource_types.resource_type_id +INSERT INTO resource_types (resource_type, description) VALUES ('device_si_ipv4_network', 'SI IPv4 Network') RETURNING resource_types.resource_type_id """) conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('lo_ipv4_address', 'Loopback IPv4 Address') RETURNING resource_types.resource_type_id +INSERT INTO resource_types (resource_type, description) VALUES ('device_ias_lt_ipv6_network', 'IAS lt IPv6 network') RETURNING resource_types.resource_type_id """) conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('site_country_code', 'Country Code') RETURNING resource_types.resource_type_id +INSERT INTO resource_types (resource_type, description) VALUES ('device_lo_ipv6_address', 'Loopback IPv6 address') RETURNING resource_types.resource_type_id """) conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('site_latitude', 'Latitude') RETURNING resource_types.resource_type_id +INSERT INTO resource_types (resource_type, description) VALUES ('device_vendor', 'Device Vendor') RETURNING resource_types.resource_type_id """) conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('site_longitude', 'Longitude') RETURNING resource_types.resource_type_id +INSERT INTO resource_types (resource_type, description) VALUES ('device_role', 'Device role') RETURNING resource_types.resource_type_id """) conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('lo_iso_address', 'ISO address') RETURNING resource_types.resource_type_id +INSERT INTO resource_types (resource_type, description) VALUES ('device_ias_lt_ipv4_network', 'IAS lt IPV4 Network') RETURNING resource_types.resource_type_id """) conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('site_country', 'Country') RETURNING resource_types.resource_type_id +INSERT INTO product_product_blocks (product_id, product_block_id) VALUES ((SELECT products.product_id FROM products WHERE products.name IN ('Switch')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))), ((SELECT products.product_id FROM products WHERE products.name IN ('Router')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) """) conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('ias_lt_ipv4_network', 'Logical Tunnel IPv4 Address') RETURNING resource_types.resource_type_id +INSERT INTO product_block_relations (in_use_by_id, depends_on_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) """) conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('ias_lt_ipv6_network', 'Logical Tunnel IPv6 Address') RETURNING resource_types.resource_type_id +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_fqdn'))) """) conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('si_ipv4_network', 'SI- interface IPv4 Network') RETURNING resource_types.resource_type_id +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ts_address'))) """) conn.execute(""" -INSERT INTO resource_types (resource_type, description) VALUES ('ts_port', 'Terminal Server Port') RETURNING resource_types.resource_type_id +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ts_port'))) """) conn.execute(""" -INSERT INTO product_product_blocks (product_id, product_block_id) VALUES ((SELECT products.product_id FROM products WHERE products.name IN ('Router')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))), ((SELECT products.product_id FROM products WHERE products.name IN ('Switch')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_ipv4_address'))) """) conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('fqdn'))) +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_ipv6_address'))) """) conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('ts_address'))) +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_iso_address'))) """) conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('ts_port'))) +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_si_ipv4_network'))) """) conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('lo_ipv4_address'))) +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ias_lt_ipv4_network'))) """) conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('lo_ipv6_address'))) +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ias_lt_ipv6_network'))) """) conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('lo_iso_address'))) +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_vendor'))) """) conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('si_ipv4_network'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('ias_lt_ipv4_network'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('ias_lt_ipv6_network'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_city'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_country'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_country_code'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_latitude'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_longitude'))) - """) - conn.execute(""" -INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('snmp_location'))) +INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_role'))) """) def downgrade() -> None: conn = op.get_bind() conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('fqdn')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('fqdn')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('ts_address')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('ts_address')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('ts_port')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('ts_port')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('lo_ipv4_address')) - """) - conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('lo_ipv4_address')) - """) - conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('lo_ipv6_address')) +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_fqdn')) """) conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('lo_ipv6_address')) +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_fqdn')) """) conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('lo_iso_address')) +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ts_address')) """) conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('lo_iso_address')) +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ts_address')) """) conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('si_ipv4_network')) +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ts_port')) """) conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('si_ipv4_network')) +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ts_port')) """) conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('ias_lt_ipv4_network')) +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_ipv4_address')) """) conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('ias_lt_ipv4_network')) +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_ipv4_address')) """) conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('ias_lt_ipv6_network')) +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_ipv6_address')) """) conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('ias_lt_ipv6_network')) +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_ipv6_address')) """) conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_city')) +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_iso_address')) """) conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_city')) +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_iso_address')) """) conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_country')) +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_si_ipv4_network')) """) conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_country')) +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_si_ipv4_network')) """) conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_country_code')) +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ias_lt_ipv4_network')) """) conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_country_code')) +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ias_lt_ipv4_network')) """) conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_latitude')) +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ias_lt_ipv6_network')) """) conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_latitude')) +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ias_lt_ipv6_network')) """) conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_longitude')) +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_vendor')) """) conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_longitude')) +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_vendor')) """) conn.execute(""" -DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('snmp_location')) +DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_role')) """) conn.execute(""" -DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('snmp_location')) +DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_role')) """) conn.execute(""" -DELETE FROM subscription_instance_values WHERE subscription_instance_values.resource_type_id IN (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('snmp_location', 'fqdn', 'ts_address', 'site_city', 'lo_ipv6_address', 'lo_ipv4_address', 'site_country_code', 'site_latitude', 'site_longitude', 'lo_iso_address', 'site_country', 'ias_lt_ipv4_network', 'ias_lt_ipv6_network', 'si_ipv4_network', 'ts_port')) +DELETE FROM subscription_instance_values WHERE subscription_instance_values.resource_type_id IN (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_ipv4_address', 'device_fqdn', 'device_ts_port', 'device_lo_iso_address', 'device_ts_address', 'device_si_ipv4_network', 'device_ias_lt_ipv6_network', 'device_lo_ipv6_address', 'device_vendor', 'device_role', 'device_ias_lt_ipv4_network')) """) conn.execute(""" -DELETE FROM resource_types WHERE resource_types.resource_type IN ('snmp_location', 'fqdn', 'ts_address', 'site_city', 'lo_ipv6_address', 'lo_ipv4_address', 'site_country_code', 'site_latitude', 'site_longitude', 'lo_iso_address', 'site_country', 'ias_lt_ipv4_network', 'ias_lt_ipv6_network', 'si_ipv4_network', 'ts_port') +DELETE FROM resource_types WHERE resource_types.resource_type IN ('device_lo_ipv4_address', 'device_fqdn', 'device_ts_port', 'device_lo_iso_address', 'device_ts_address', 'device_si_ipv4_network', 'device_ias_lt_ipv6_network', 'device_lo_ipv6_address', 'device_vendor', 'device_role', 'device_ias_lt_ipv4_network') """) conn.execute(""" -DELETE FROM product_product_blocks WHERE product_product_blocks.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Router', 'Switch')) AND product_product_blocks.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) +DELETE FROM product_product_blocks WHERE product_product_blocks.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Switch', 'Router')) AND product_product_blocks.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) """) conn.execute(""" -DELETE FROM fixed_inputs WHERE fixed_inputs.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Router', 'Switch')) AND fixed_inputs.name = 'device_type' +DELETE FROM product_block_relations WHERE product_block_relations.in_use_by_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_relations.depends_on_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) """) conn.execute(""" -DELETE FROM fixed_inputs WHERE fixed_inputs.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Router', 'Switch')) AND fixed_inputs.name = 'device_vendor' +DELETE FROM fixed_inputs WHERE fixed_inputs.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Switch', 'Router')) AND fixed_inputs.name = 'device_type' """) conn.execute(""" DELETE FROM subscription_instances WHERE subscription_instances.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) @@ -241,17 +193,17 @@ DELETE FROM subscription_instances WHERE subscription_instances.product_block_id DELETE FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock') """) conn.execute(""" -DELETE FROM processes WHERE processes.pid IN (SELECT processes_subscriptions.pid FROM processes_subscriptions WHERE processes_subscriptions.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Router', 'Switch')))) +DELETE FROM processes WHERE processes.pid IN (SELECT processes_subscriptions.pid FROM processes_subscriptions WHERE processes_subscriptions.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Switch', 'Router')))) """) conn.execute(""" -DELETE FROM processes_subscriptions WHERE processes_subscriptions.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Router', 'Switch'))) +DELETE FROM processes_subscriptions WHERE processes_subscriptions.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Switch', 'Router'))) """) conn.execute(""" -DELETE FROM subscription_instances WHERE subscription_instances.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Router', 'Switch'))) +DELETE FROM subscription_instances WHERE subscription_instances.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Switch', 'Router'))) """) conn.execute(""" -DELETE FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Router', 'Switch')) +DELETE FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Switch', 'Router')) """) conn.execute(""" -DELETE FROM products WHERE products.name IN ('Router', 'Switch') +DELETE FROM products WHERE products.name IN ('Switch', 'Router') """) diff --git a/gso/migrations/versions/2023-05-08_61f8e90581c5_add_terminate_device_workflow.py b/gso/migrations/versions/2023-05-08_61f8e90581c5_add_terminate_device_workflow.py new file mode 100644 index 0000000000000000000000000000000000000000..8b3f8398c9609c0de0ce56f2cb352aa2a335e1cc --- /dev/null +++ b/gso/migrations/versions/2023-05-08_61f8e90581c5_add_terminate_device_workflow.py @@ -0,0 +1,39 @@ +"""add Terminate device workflow. + +Revision ID: 61f8e90581c5 +Revises: 21e7bb0e5cad +Create Date: 2023-05-08 10:48:21.655880 + +""" +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision = '61f8e90581c5' +down_revision = '21e7bb0e5cad' +branch_labels = None +depends_on = None + + +from orchestrator.migrations.helpers import create_workflow, delete_workflow + +new_workflows = [ + { + "name": "terminate_device", + "target": "TERMINATE", + "description": "Terminate device", + "product_type": "Device" + } +] + + +def upgrade() -> None: + conn = op.get_bind() + for workflow in new_workflows: + create_workflow(conn, workflow) + + +def downgrade() -> None: + conn = op.get_bind() + for workflow in new_workflows: + delete_workflow(conn, workflow["name"]) diff --git a/gso/migrations/versions/2023-05-08_647e066bc99e_add_terminate_iptrunk_workflow.py b/gso/migrations/versions/2023-05-08_647e066bc99e_add_terminate_iptrunk_workflow.py new file mode 100644 index 0000000000000000000000000000000000000000..49cb67b43eed421e58df6a54a900bffe58e04a3a --- /dev/null +++ b/gso/migrations/versions/2023-05-08_647e066bc99e_add_terminate_iptrunk_workflow.py @@ -0,0 +1,39 @@ +"""add Terminate Iptrunk workflow. + +Revision ID: 647e066bc99e +Revises: 61f8e90581c5 +Create Date: 2023-05-08 18:59:01.309425 + +""" +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision = '647e066bc99e' +down_revision = '61f8e90581c5' +branch_labels = None +depends_on = None + + +from orchestrator.migrations.helpers import create_workflow, delete_workflow + +new_workflows = [ + { + "name": "terminate_iptrunk", + "target": "TERMINATE", + "description": "Terminate IPtrunk", + "product_type": "Iptrunk" + } +] + + +def upgrade() -> None: + conn = op.get_bind() + for workflow in new_workflows: + create_workflow(conn, workflow) + + +def downgrade() -> None: + conn = op.get_bind() + for workflow in new_workflows: + delete_workflow(conn, workflow["name"]) diff --git a/gso/products/__init__.py b/gso/products/__init__.py index b8b60c156ba992f6394d41035f9b66b3b3645fbd..857128fb672bf6350e674bfc81e8d89fa2765af2 100644 --- a/gso/products/__init__.py +++ b/gso/products/__init__.py @@ -2,9 +2,11 @@ from orchestrator.domain import SUBSCRIPTION_MODEL_REGISTRY from gso.products.product_types.device import Device from gso.products.product_types.iptrunk import Iptrunk +from gso.products.product_types.site import Site SUBSCRIPTION_MODEL_REGISTRY.update( { + "Site": Site, "Router": Device, "Switch": Device, "Iptrunk": Iptrunk, diff --git a/gso/products/product_blocks/device.py b/gso/products/product_blocks/device.py index 9e34743f2e1e2eea7f3610cd6e3cab616061e020..38f2b53145679238abf90e5a010ebcf31bfb0e41 100644 --- a/gso/products/product_blocks/device.py +++ b/gso/products/product_blocks/device.py @@ -1,63 +1,67 @@ from typing import Optional from orchestrator.domain.base import ProductBlockModel -from orchestrator.types import SubscriptionLifecycle +from orchestrator.types import SubscriptionLifecycle, strEnum +from gso.products.product_blocks.site \ + import SiteBlock, SiteBlockInactive, SiteBlockProvisioning import ipaddress +class DeviceVendor(strEnum): + juniper = "juniper" + nokia = "nokia" + + +class DeviceRole(strEnum): + p = "p" + pe = "pe" + amt = "amt" + + class DeviceBlockInactive(ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="DeviceBlock"): - fqdn: Optional[str] = None - ts_address: Optional[str] = None - ts_port: Optional[int] = None - lo_ipv4_address: Optional[ipaddress.IPv4Address] = None - lo_ipv6_address: Optional[ipaddress.IPv6Address] = None - lo_iso_address: Optional[str] = None - si_ipv4_network: Optional[ipaddress.IPv4Network] = None - ias_lt_ipv4_network: Optional[ipaddress.IPv4Network] = None - ias_lt_ipv6_network: Optional[ipaddress.IPv6Network] = None - site_city: Optional[str] = None - site_country: Optional[str] = None - site_country_code: Optional[str] = None - site_latitude: Optional[str] = None - site_longitude: Optional[str] = None - snmp_location: Optional[str] = None + device_fqdn: Optional[str] = None + device_ts_address: Optional[str] = None + device_ts_port: Optional[int] = None + device_lo_ipv4_address: Optional[ipaddress.IPv4Address] = None + device_lo_ipv6_address: Optional[ipaddress.IPv6Address] = None + device_lo_iso_address: Optional[str] = None + device_si_ipv4_network: Optional[ipaddress.IPv4Network] = None + device_ias_lt_ipv4_network: Optional[ipaddress.IPv4Network] = None + device_ias_lt_ipv6_network: Optional[ipaddress.IPv6Network] = None + device_vendor: Optional[DeviceVendor] = None + device_role: Optional[DeviceRole] = None + device_site: Optional[SiteBlockInactive] class DeviceBlockProvisioning(DeviceBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): - fqdn: str - ts_address: str - ts_port: str - lo_ipv4_address: Optional[ipaddress.IPv4Address] = None - lo_ipv6_address: Optional[ipaddress.IPv6Address] = None - lo_iso_address: Optional[str] = None - si_ipv4_network: Optional[ipaddress.IPv4Network] = None - ias_lt_ipv4_network: Optional[ipaddress.IPv4Network] = None - ias_lt_ipv6_network: Optional[ipaddress.IPv6Network] = None - site_city: Optional[str] = None - site_country: Optional[str] = None - site_country_code: Optional[str] = None - site_latitude: Optional[str] = None - site_longitude: Optional[str] = None - snmp_location: Optional[str] = None + device_fqdn: str + device_ts_address: str + device_ts_port: int + device_lo_ipv4_address: Optional[ipaddress.IPv4Address] = None + device_lo_ipv6_address: Optional[ipaddress.IPv6Address] = None + device_lo_iso_address: Optional[str] = None + device_si_ipv4_network: Optional[ipaddress.IPv4Network] = None + device_ias_lt_ipv4_network: Optional[ipaddress.IPv4Network] = None + device_ias_lt_ipv6_network: Optional[ipaddress.IPv6Network] = None + device_vendor: Optional[DeviceVendor] = None + device_role: Optional[DeviceRole] = None + device_site: Optional[SiteBlockProvisioning] class DeviceBlock(DeviceBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): - fqdn: str - ts_address: str - ts_port: str - lo_ipv4_address: ipaddress.IPv4Address - lo_ipv6_address: ipaddress.IPv6Address - lo_iso_address: str - si_ipv4_network: ipaddress.IPv4Network - ias_lt_ipv4_network: ipaddress.IPv4Network - ias_lt_ipv6_network: ipaddress.IPv6Network - site_city: str - site_country: str - site_country_code: str - site_latitude: str - site_longitude: str - snmp_location: str + device_fqdn: str + device_ts_address: str + device_ts_port: int + device_lo_ipv4_address: ipaddress.IPv4Address + device_lo_ipv6_address: ipaddress.IPv6Address + device_lo_iso_address: str + device_si_ipv4_network: ipaddress.IPv4Network + device_ias_lt_ipv4_network: ipaddress.IPv4Network + device_ias_lt_ipv6_network: ipaddress.IPv6Network + device_vendor: DeviceVendor + device_role: DeviceRole + device_site: SiteBlock diff --git a/gso/products/product_blocks/iptrunk.py b/gso/products/product_blocks/iptrunk.py index f2c882bf9a68680c786f9c25ec00b2b838471d7d..3ac520de5633dfb0be9b62a8efc86b12ca5adde8 100644 --- a/gso/products/product_blocks/iptrunk.py +++ b/gso/products/product_blocks/iptrunk.py @@ -27,14 +27,16 @@ class IptrunkBlockInactive(ProductBlockModel, iptrunk_sideA_node: DeviceBlockInactive iptrunk_sideA_ae_iface: Optional[str] = None iptrunk_sideA_ae_geant_a_sid: Optional[str] = None - iptrunk_sideA_ae_members: Optional[list] = None - iptrunk_sideA_ae_members_description: Optional[list] = None + iptrunk_sideA_ae_members: list[str] = Field(default_factory=list) + iptrunk_sideA_ae_members_description: list[str] \ + = Field(default_factory=list) # iptrunk_sideB_node: DeviceBlockInactive iptrunk_sideB_ae_iface: Optional[str] = None iptrunk_sideB_ae_geant_a_sid: Optional[str] = None - iptrunk_sideB_ae_members: Optional[list] = None - iptrunk_sideB_ae_members_description: Optional[list] = None + iptrunk_sideB_ae_members: list[str] = Field(default_factory=list) + iptrunk_sideB_ae_members_description: list[str] \ + = Field(default_factory=list) class IptrunkBlockProvisioning(IptrunkBlockInactive, diff --git a/gso/products/product_blocks/site.py b/gso/products/product_blocks/site.py new file mode 100644 index 0000000000000000000000000000000000000000..28594041f0df562d4d10c4b93ab846af1bd89139 --- /dev/null +++ b/gso/products/product_blocks/site.py @@ -0,0 +1,51 @@ +from typing import Optional + +from orchestrator.domain.base import ProductBlockModel +from orchestrator.types import SubscriptionLifecycle, strEnum + + +class SiteTier(strEnum): + tier1 = 1 + tier2 = 2 + tier3 = 3 + tier4 = 4 + + +class SiteBlockInactive(ProductBlockModel, + lifecycle=[SubscriptionLifecycle.INITIAL], + product_block_name="SiteBlock"): + site_name: Optional[str] = None + site_city: Optional[str] = None + site_country: Optional[str] = None + site_country_code: Optional[str] = None + site_latitude: Optional[float] = None + site_longitude: Optional[float] = None + site_internal_id: Optional[int] = None + site_bgp_community_id: Optional[int] = None + site_tier: Optional[SiteTier] = None + + +class SiteBlockProvisioning(SiteBlockInactive, + lifecycle=[SubscriptionLifecycle.PROVISIONING]): + site_name: Optional[str] = None + site_city: Optional[str] = None + site_country: Optional[str] = None + site_country_code: Optional[str] = None + site_latitude: Optional[float] = None + site_longitude: Optional[float] = None + site_internal_id: Optional[int] = None + site_bgp_community_id: Optional[int] = None + site_tier: Optional[SiteTier] = None + + +class SiteBlock(SiteBlockProvisioning, + lifecycle=[SubscriptionLifecycle.ACTIVE]): + site_name: str + site_city: str + site_country: str + site_country_code: str + site_latitude: float + site_longitude: float + site_internal_id: int + site_bgp_community_id: int + site_tier: SiteTier diff --git a/gso/products/product_types/device.py b/gso/products/product_types/device.py index e79762c12f9fae68b409955b9e4a5a49e08c75dc..f2ecb3d94297f79ca73c0571d4a8a503d54d0502 100644 --- a/gso/products/product_types/device.py +++ b/gso/products/product_types/device.py @@ -10,25 +10,17 @@ class DeviceType(strEnum): switch = "switch" -class DeviceVendor(strEnum): - Juniper = "Juniper" - Newvendor = "Newvendor" - - class DeviceInactive(SubscriptionModel, is_base=True): device_type: DeviceType - device_vendor: DeviceVendor device: DeviceBlockInactive class DeviceProvisioning(DeviceInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): device_type: DeviceType - device_vendor: DeviceVendor device: DeviceBlockProvisioning class Device(DeviceProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): device_type: DeviceType - device_vendor: DeviceVendor device: DeviceBlock diff --git a/gso/products/product_types/site.py b/gso/products/product_types/site.py new file mode 100644 index 0000000000000000000000000000000000000000..8c3379c917812600e875243938645010a386ea42 --- /dev/null +++ b/gso/products/product_types/site.py @@ -0,0 +1,18 @@ +from orchestrator.domain.base import SubscriptionModel +from orchestrator.types import SubscriptionLifecycle + +from gso.products.product_blocks.site \ + import SiteBlock, SiteBlockInactive, SiteBlockProvisioning + + +class SiteInactive(SubscriptionModel, is_base=True): + site: SiteBlockInactive + + +class SiteProvisioning(SiteInactive, + lifecycle=[SubscriptionLifecycle.PROVISIONING]): + site: SiteBlockProvisioning + + +class Site(SiteProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): + site: SiteBlock diff --git a/gso/services/provisioning_proxy.py b/gso/services/provisioning_proxy.py index 1189647133fde96d469c71f32f188bdc186fa8b0..20ec4a9d967de80834695f67e2a9b6b92959f651 100644 --- a/gso/services/provisioning_proxy.py +++ b/gso/services/provisioning_proxy.py @@ -1,75 +1,179 @@ +import json import logging import requests from orchestrator import inputstep from orchestrator.config.assignee import Assignee +from orchestrator.domain import SubscriptionModel +# noinspection PyProtectedMember from orchestrator.forms import FormPage, ReadOnlyField from orchestrator.forms.validators import Accept, Label, LongText -from orchestrator.types import UUIDstr, State +from orchestrator.types import UUIDstr, State, strEnum +from orchestrator.utils.json import json_dumps from gso import settings from gso.products.product_types.device import DeviceProvisioning +from gso.products.product_types.iptrunk import IptrunkProvisioning, Iptrunk logger = logging.getLogger(__name__) -def provision_node( - node_subscription_params: DeviceProvisioning, - process_id: UUIDstr, - dry_run: bool = True): +class CUDOperation(strEnum): + """ + Enum for different C(R)UD operations that the provisioning proxy supports. + Read is not applicable, hence these become CUD and not CRUD operations. + """ + #: Creation is done with a POST request + POST = 'POST' + #: Updating is done with a PUT request + PUT = 'PUT' + #: Removal is done with a DELETE request + DELETE = 'DELETE' + + +def _send_request(endpoint: str, parameters: dict, process_id: UUIDstr, + operation: CUDOperation): + """ + Internal function for sending a request to LSO. The callback address is + derived using the process ID provided. + + :param str endpoint: The LSO-specific endpoint to call, depending on the + type of service object that is acted upon. + :param dict parameters: JSON body for the request, which will almost always + at least consist of a subscription object, and a boolean value to + indicate a dry run. + :param UUIDstr process_id: The process ID that this request is a part of, + used to call back to when the execution of the playbook is completed. + :param :class:`CUDOperation` operation: The specific operation that is + performed with the request. + """ oss = settings.load_oss_params() pp_params = oss.PROVISIONING_PROXY assert pp_params - device_params = node_subscription_params.device callback_url = f'{settings.load_oss_params().GENERAL.public_hostname}' \ f'/api/processes/{process_id}/resume' - logger.debug(f'[disabled] provisioning node {device_params}') + logger.debug(f'[provisioning proxy] provisioning for process {process_id}') + + parameters.update({'callback': callback_url}) + url = f'{pp_params.scheme}://{pp_params.api_base}/api/{endpoint}' + + request = None + + if operation == CUDOperation.POST: + request = requests.post(url, json=parameters) + elif operation == CUDOperation.PUT: + request = requests.put(url, json=parameters) + elif operation == CUDOperation.DELETE: + request = requests.delete(url, json=parameters) + + if request.status_code != 200: + print(request.content) + raise AssertionError(request.content) + + +def provision_device( + subscription: DeviceProvisioning, + process_id: UUIDstr, + dry_run: bool = True): + """ + Function that provisions a new device using LSO. + + :param :class:`DeviceProvisioning` subscription: The subscription object + that is to be provisioned. + :param UUIDstr process_id: The related process ID, used for callback. + :param bool dry_run: A boolean indicating whether this should be a dry run + or not, defaults to ``True``. + """ + parameters = { + 'dry_run': dry_run, + 'subscription': json.loads(json_dumps(subscription)) + } + + _send_request('device', parameters, process_id, CUDOperation.POST) + + +def provision_ip_trunk(subscription: IptrunkProvisioning, + process_id: UUIDstr, + config_object: str, + dry_run: bool = True): + """ + Function that provisions an IP trunk service using LSO. + + :param :class:`IptrunkProvisioning` subscription: The subscription object + that is to be provisioned. + :param UUIDstr process_id: The related process ID, used for callback. + :param str config_object: The type of object that is deployed + :param bool dry_run: A boolean indicating whether this should be a dry run + or not, defaults to ``True``. + """ + parameters = { + 'subscription': json.loads(json_dumps(subscription)), + 'dry_run': dry_run, + 'verb': "deploy", + 'object': config_object + } + _send_request('ip_trunk', parameters, process_id, CUDOperation.POST) + + +# def modify_ip_trunk(old_subscription: Iptrunk, +# new_subscription: Iptrunk, +# process_id: UUIDstr, +# dry_run: bool = True): +# """ +# Function that modifies an existing IP trunk subscription using LSO. +# +# :param :class:`Iptrunk` old_subscription: The subscription object, before +# its modification. +# :param :class:`Iptrunk` new_subscription: The subscription object, after +# modifications have been made to it. +# :param UUIDstr process_id: The related process ID, used for callback. +# :param bool dry_run: A boolean indicating whether this should be a dry ryn +# or not, defaults to ``True``. +# """ +# parameters = { +# 'dry_run': dry_run, +# 'old_subscription': old_subscription, +# 'subscription': new_subscription +# # FIXME missing parameters +# } +# +# _send_request('ip_trunk', parameters, process_id, CUDOperation.PUT) + + +def deprovision_ip_trunk(subscription: Iptrunk, + process_id: UUIDstr, + dry_run: bool = True): + """ + Function that provisions an IP trunk service using LSO. + + :param :class:`IptrunkProvisioning` subscription: The subscription object + that is to be provisioned. + :param UUIDstr process_id: The related process ID, used for callback. + :param bool dry_run: A boolean indicating whether this should be a dry run + or not, defaults to ``True``. + """ parameters = { - 'callback': callback_url, + 'subscription': json.loads(json_dumps(subscription)), 'dry_run': dry_run, - 'device': { - 'fqdn': device_params.fqdn, - 'lo_address': { - 'v4': str(device_params.lo_ipv4_address), - 'v6': str(device_params.lo_ipv6_address) - }, - 'lo_iso_address': device_params.lo_iso_address, - 'si_ipv4_network': str(device_params.si_ipv4_network), - 'ias_lt_network': { - 'v4': str(device_params.ias_lt_ipv4_network), - 'v6': str(device_params.ias_lt_ipv6_network) - }, - 'site_country_code': device_params.site_country_code, - 'site_city': device_params.site_city, - 'site_latitude': device_params.site_latitude, - 'site_longitude': device_params.site_longitude, - 'snmp_location': device_params.snmp_location, - 'device_type': node_subscription_params.device_type, - 'device_vendor': node_subscription_params.device_vendor, - 'ts_address': device_params.ts_address, - 'ts_port': device_params.ts_port - } + 'verb': "remove" } - post_request = requests.post( - f'{pp_params.scheme}://{pp_params.api_base}' - f'/api/device', - json=parameters) - post_request.raise_for_status() + _send_request('ip_trunk', parameters, process_id, CUDOperation.DELETE) @inputstep('Await provisioning proxy results', assignee=Assignee('SYSTEM')) -def await_pp_results() -> State: +def await_pp_results(subscription: SubscriptionModel) -> State: class ProvisioningResultPage(FormPage): class Config: - title = 'Do NOT click on confirm in this step!' + title = f'Deploying {subscription.product.name}...' - warning_label: Label = 'This step relies on an external service to ' \ - 'send an update to the orchestrator, do not ' \ - 'interfere with this process please.' - pp_run_results: dict = {'state': 'not_ready'} + warning_label: Label = f'{subscription.product.description} is being' \ + f' deployed right now. Feel free to refresh ' \ + f'this page every now and again. Just be ' \ + f'sure that you do NOT click submit!' + pp_run_results: dict = None confirm: Accept = Accept('INCOMPLETE') result_page = yield ProvisioningResultPage @@ -81,7 +185,9 @@ def await_pp_results() -> State: def confirm_pp_results(state: State) -> State: class ConfirmRunPage(FormPage): class Config: - title = 'Execution completed, please confirm the results.' + title = f"Execution for " \ + f"{state['subscription']['product']['name']} " \ + f"completed, please confirm the results below." run_status: str = ReadOnlyField(state['pp_run_results']['status']) run_results: LongText = ReadOnlyField( diff --git a/gso/workflows/__init__.py b/gso/workflows/__init__.py index 1ba2f18de70941af6c1fe471b8fe5d932280d8df..268bada22e4b28b76ffc3e1371b1e23d2a8c2c47 100644 --- a/gso/workflows/__init__.py +++ b/gso/workflows/__init__.py @@ -5,3 +5,6 @@ LazyWorkflowInstance("gso.workflows.device.terminate_device", "terminate_device") LazyWorkflowInstance("gso.workflows.device.get_facts", "get_facts") LazyWorkflowInstance("gso.workflows.iptrunk.create_iptrunk", "create_iptrunk") +LazyWorkflowInstance("gso.workflows.iptrunk.terminate_iptrunk", + "terminate_iptrunk") +LazyWorkflowInstance("gso.workflows.site.create_site", "create_site") diff --git a/gso/workflows/device/create_device.py b/gso/workflows/device/create_device.py index c59c2866b679520fbd91e227ac829136bc0408c2..1a50b85ec465b9a8be98406491fa515cbdd21405 100644 --- a/gso/workflows/device/create_device.py +++ b/gso/workflows/device/create_device.py @@ -1,7 +1,11 @@ import ipaddress +import re from uuid import uuid4 +from orchestrator.db.models import ProductTable, SubscriptionTable +# noinspection PyProtectedMember from orchestrator.forms import FormPage +from orchestrator.forms.validators import Choice, choice_list from orchestrator.targets import Target from orchestrator.types import FormGenerator, State from orchestrator.types import SubscriptionLifecycle, UUIDstr @@ -10,11 +14,38 @@ from orchestrator.workflows.steps import resync, set_status from orchestrator.workflows.steps import store_process_subscription from orchestrator.workflows.utils import wrap_create_initial_input_form -from gso.products.product_types.device import DeviceVendor, DeviceInactive, \ +from gso.products.product_blocks import device as device_pb +from gso.products.product_types import device +from gso.products.product_types.device import DeviceInactive, \ DeviceProvisioning +from gso.products.product_types.site import Site from gso.services import provisioning_proxy -from gso.services.provisioning_proxy import confirm_pp_results, \ - await_pp_results +from gso.services.provisioning_proxy import await_pp_results, \ + confirm_pp_results + + +def site_selector() -> list: + site_subscriptions = {} + for site_id, site_description in ( + SubscriptionTable.query + .join(ProductTable) + .filter( + ProductTable.product_type == 'Site', + SubscriptionTable.status == 'active') + .with_entities(SubscriptionTable.subscription_id, + SubscriptionTable.description) + .all() + ): + site_subscriptions[str(site_id)] = site_description + + # noinspection PyTypeChecker + return choice_list( + Choice('site_selection', + zip(site_subscriptions.keys(), + site_subscriptions.items())), # type:ignore + min_items=1, + max_items=1, + ) def initial_input_form_generator(product_name: str) -> FormGenerator: @@ -22,10 +53,12 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: class Config: title = product_name - fqdn: str + device_site: site_selector() + hostname: str ts_address: ipaddress.IPv4Address ts_port: int - device_vendor: DeviceVendor + device_vendor: device_pb.DeviceVendor + device_role: device_pb.DeviceRole user_input = yield CreateDeviceForm @@ -42,69 +75,66 @@ def create_subscription(product: UUIDstr) -> State: } +def iso_from_ipv4(ipv4_address): + padded_octets = [f'{x:>03}' for x in ipv4_address.split('.')] + joined_octets = ''.join(padded_octets) + re_split = '.'.join(re.findall('....', joined_octets)) + result = '.'.join(['49.51e5.0001', re_split, '00']) + return result + + @step('Get information from IPAM') def get_info_from_ipam(subscription: DeviceInactive) -> State: # lo = ipam.new_device_lo_address() # subscription.device.lo_ipv4_address = lo.v4 # subscription.device.lo_ipv6_address = lo.v6 # TODO: get info about how these should be generated - subscription.device.lo_ipv4_address = '10.10.10.10' - subscription.device.lo_ipv6_address = 'fc00:798:10::10' - subscription.device.lo_iso_address = '49.51e5.0001.0620.4009.6047.00' - subscription.device.si_ipv4_network = '192.168.0.0/31' - subscription.device.ias_lt_ipv4_network = '192.168.1.0/31' - subscription.device.ias_lt_ipv6_network = 'fc00:798:1::150/126' - - return {'subscription': subscription} - - -@step('Get information about SNMP') -def get_snmp_info(subscription: DeviceInactive) -> State: - country = 'Spain' - city = 'Barcelona' - country_code = 'ES' - latitude = '41.3743' - longitude = '2.1328' - subscription.device.site_country = country - subscription.device.site_city = city - subscription.device.site_country_code = country_code - subscription.device.site_latitude = latitude - subscription.device.site_longitude = longitude - subscription.device.snmp_location = ( - f'{city.upper()},{country.upper()}[{latitude},{longitude}]' - ) - + subscription.device.device_lo_ipv4_address = \ + ipaddress.ip_address('10.10.10.20') + subscription.device.device_lo_ipv6_address = \ + ipaddress.ip_address('fc00:798:10::20') + subscription.device.device_lo_iso_address \ + = iso_from_ipv4(str(subscription.device.device_lo_ipv4_address)) + subscription.device.device_si_ipv4_network = '192.168.0.0/31' + subscription.device.device_ias_lt_ipv4_network = '192.168.1.0/31' + subscription.device.device_ias_lt_ipv6_network = 'fc00:798:1::150/126' return {'subscription': subscription} @step('Initialize subscription') def initialize_subscription( - subscription: DeviceInactive, - fqdn: str, + subscription: device.DeviceInactive, + hostname: str, ts_address: ipaddress.IPv4Address, ts_port: str, - device_vendor: DeviceVendor + device_vendor: device_pb.DeviceVendor, + device_site: str, + device_role: device_pb.DeviceRole ) -> State: - subscription.device.fqdn = fqdn - subscription.device.ts_address = str(ts_address) - subscription.device.ts_port = str(ts_port) - subscription.device_vendor = device_vendor + subscription.device.device_ts_address = str(ts_address) + subscription.device.device_ts_port = str(ts_port) + subscription.device.device_vendor = device_vendor + subscription.device.device_site \ + = Site.from_subscription(device_site[0]).site + fqdn = str(hostname + '.' + + subscription.device.device_site.site_name.lower() + '.' + + subscription.device.device_site.site_country_code.lower() + + '.geant.net') + subscription.device.device_fqdn = fqdn + subscription.device.device_role = device_role subscription.description = f'Device {fqdn} ' \ f'({subscription.device_type})' - subscription = DeviceProvisioning.from_other_lifecycle( + subscription = device.DeviceProvisioning.from_other_lifecycle( subscription, SubscriptionLifecycle.PROVISIONING ) - return {'subscription': subscription} + return {'subscription': subscription, 'fqdn': fqdn} @step('Provision device [DRY RUN]') def provision_device_dry(subscription: DeviceProvisioning, process_id: UUIDstr) -> State: - provisioning_proxy.provision_node( - subscription, - process_id - ) + provisioning_proxy.provision_device(subscription, process_id) return {'subscription': subscription} @@ -112,11 +142,7 @@ def provision_device_dry(subscription: DeviceProvisioning, @step('Provision device [FOR REAL]') def provision_device_real(subscription: DeviceProvisioning, process_id: UUIDstr) -> State: - provisioning_proxy.provision_node( - subscription, - process_id, - False # No dry run this time, run it for real - ) + provisioning_proxy.provision_device(subscription, process_id, False) return {'subscription': subscription} @@ -133,7 +159,6 @@ def create_device(): >> create_subscription >> store_process_subscription(Target.CREATE) >> get_info_from_ipam - >> get_snmp_info >> initialize_subscription >> provision_device_dry >> await_pp_results diff --git a/gso/workflows/device/terminate_device.py b/gso/workflows/device/terminate_device.py index 686128a19e0464a0d579b1370c21af3a746ba17b..30da64eb0dab8abc251b48d056c325b51abd9d6a 100644 --- a/gso/workflows/device/terminate_device.py +++ b/gso/workflows/device/terminate_device.py @@ -19,8 +19,8 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> InputForm: class TerminateForm(FormPage): are_you_sure: Label = ( - f"Are you sure you want to remove {subscription.description}?" - ) # type:ignore + f'Are you sure you want to remove {subscription.description}?' + ) return TerminateForm @@ -41,7 +41,7 @@ def deprovision_user(subscription: Device) -> None: initial_input_form_generator), target=Target.TERMINATE, ) -def terminate_user(): +def terminate_device(): return ( init >> store_process_subscription(Target.TERMINATE) diff --git a/gso/workflows/iptrunk/create_iptrunk.py b/gso/workflows/iptrunk/create_iptrunk.py index e4205e111c699e8fbf3992a02eb4732b628e3cc8..1c096575bb674c9e879c22c147fbc664fac8f352 100644 --- a/gso/workflows/iptrunk/create_iptrunk.py +++ b/gso/workflows/iptrunk/create_iptrunk.py @@ -1,40 +1,42 @@ -# import ipaddress +import ipaddress from uuid import uuid4 +from orchestrator.db.models import ProductTable, SubscriptionTable +# noinspection PyProtectedMember from orchestrator.forms import FormPage +from orchestrator.forms.validators import Choice, choice_list from orchestrator.targets import Target -from orchestrator.workflow import inputstep -from orchestrator.forms.validators import Accept from orchestrator.types import FormGenerator, State from orchestrator.types import SubscriptionLifecycle, UUIDstr from orchestrator.workflow import done, init, step, workflow from orchestrator.workflows.steps import resync, set_status from orchestrator.workflows.steps import store_process_subscription from orchestrator.workflows.utils import wrap_create_initial_input_form -from gso.products.product_types import iptrunk -from gso.products.product_blocks import iptrunk as iptrunk_pb -from gso.products.product_types.device import Device -# from gso.services import ipam, provisioning_proxy -# from gso.products.product_types import device -from orchestrator.db.models import ProductTable, SubscriptionTable -from orchestrator.forms.validators import Choice, choice_list +from gso.products.product_blocks.iptrunk import IptrunkType +from gso.products.product_types.device import Device +from gso.products.product_types.iptrunk import IptrunkInactive, \ + IptrunkProvisioning +from gso.services import provisioning_proxy +from gso.services.provisioning_proxy import confirm_pp_results, \ + await_pp_results def device_selector(choice_value: str) -> list: device_subscriptions = {} for device_id, device_description in ( - SubscriptionTable.query.join(ProductTable) - .filter( - ProductTable.product_type == "Device", - SubscriptionTable.status == "active", - ) - .with_entities(SubscriptionTable.subscription_id, - SubscriptionTable.description) - .all() + SubscriptionTable.query.join(ProductTable) + .filter( + ProductTable.product_type == 'Device', + SubscriptionTable.status == 'active', + ) + .with_entities(SubscriptionTable.subscription_id, + SubscriptionTable.description) + .all() ): device_subscriptions[str(device_id)] = device_description + # noinspection PyTypeChecker return choice_list( Choice(choice_value, zip(device_subscriptions.keys(), device_subscriptions.items())), # type:ignore @@ -50,7 +52,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: geant_s_sid: str iptrunk_description: str - iptrunk_type: iptrunk_pb.IptrunkType + iptrunk_type: IptrunkType iptrunk_speed: str # This should be an enum: 1/10/100/400 iptrunk_minimum_links: int @@ -68,52 +70,54 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: iptrunk_sideB_ae_members: list[str] iptrunk_sideB_ae_members_descriptions: list[str] # TODO: we need additional validation: - # sideA fqdn must be different from sideB fqdn - # the lenght of iptrunk_sideA_ae_members should - # be the same as iptrunk_sideA_ae_members - # interface names must be validated + # * sideA fqdn must be different from sideB fqdn + # * the length of iptrunk_sideA_ae_members should + # be the same as iptrunk_sideB_ae_members + # * interface names must be validated user_input = yield CreateIptrunkForm return user_input.dict() -@step("Create subscription") +@step('Create subscription') def create_subscription(product: UUIDstr) -> State: - subscription = iptrunk.IptrunkInactive.from_product_id(product, uuid4()) + subscription = IptrunkInactive.from_product_id(product, uuid4()) return { - "subscription": subscription, - "subscription_id": subscription.subscription_id, + 'subscription': subscription, + 'subscription_id': subscription.subscription_id, } -@step("Get information from IPAM ") -def get_info_from_ipam(subscription: iptrunk.IptrunkInactive) -> State: +@step('Get information from IPAM') +def get_info_from_ipam(subscription: IptrunkInactive) -> State: # TODO: get info about how these should be generated - subscription.iptrunk.iptrunk_ipv4_network = "192.168.1.0/31" - subscription.iptrunk.iptrunk_ipv6_network = "fc00:798:1::150/126" - return {"subscription": subscription} + subscription.iptrunk.iptrunk_ipv4_network \ + = ipaddress.ip_network('192.168.255.0/31') + subscription.iptrunk.iptrunk_ipv6_network \ + = ipaddress.ip_network('fc00:798:255::150/126') + return {'subscription': subscription} -@step("Initialize subscription") +@step('Initialize subscription') def initialize_subscription( - subscription: iptrunk.IptrunkInactive, - geant_s_sid: str, - iptrunk_type: iptrunk_pb.IptrunkType, - iptrunk_description: str, - iptrunk_speed: str, - iptrunk_minimum_links: int, - iptrunk_sideA_node_id: str, - iptrunk_sideA_ae_iface: str, - iptrunk_sideA_ae_geant_a_sid: str, - iptrunk_sideA_ae_members: list[str], - iptrunk_sideA_ae_members_descriptions: list[str], - iptrunk_sideB_node_id: str, - iptrunk_sideB_ae_iface: str, - iptrunk_sideB_ae_geant_a_sid: str, - iptrunk_sideB_ae_members: list[str], - iptrunk_sideB_ae_members_descriptions: list[str] + subscription: IptrunkInactive, + geant_s_sid: str, + iptrunk_type: IptrunkType, + iptrunk_description: str, + iptrunk_speed: str, + iptrunk_minimum_links: int, + iptrunk_sideA_node_id: str, + iptrunk_sideA_ae_iface: str, + iptrunk_sideA_ae_geant_a_sid: str, + iptrunk_sideA_ae_members: list[str], + iptrunk_sideA_ae_members_descriptions: list[str], + iptrunk_sideB_node_id: str, + iptrunk_sideB_ae_iface: str, + iptrunk_sideB_ae_geant_a_sid: str, + iptrunk_sideB_ae_members: list[str], + iptrunk_sideB_ae_members_descriptions: list[str] ) -> State: subscription.iptrunk.geant_s_sid = geant_s_sid subscription.iptrunk.iptrunk_description = iptrunk_description @@ -122,7 +126,7 @@ def initialize_subscription( subscription.iptrunk.iptrunk_minimum_links = iptrunk_minimum_links subscription.iptrunk.iptrunk_sideA_node = Device.from_subscription( - iptrunk_sideA_node_id[0]).device + iptrunk_sideA_node_id[0]).device subscription.iptrunk.iptrunk_sideA_ae_iface = iptrunk_sideA_ae_iface subscription.iptrunk.iptrunk_sideA_ae_geant_a_sid \ = iptrunk_sideA_ae_geant_a_sid @@ -131,7 +135,7 @@ def initialize_subscription( = iptrunk_sideA_ae_members_descriptions subscription.iptrunk.iptrunk_sideB_node = Device.from_subscription( - iptrunk_sideB_node_id[0]).device + iptrunk_sideB_node_id[0]).device subscription.iptrunk.iptrunk_sideB_ae_iface \ = iptrunk_sideB_ae_iface subscription.iptrunk.iptrunk_sideB_ae_geant_a_sid \ @@ -140,110 +144,124 @@ def initialize_subscription( subscription.iptrunk.iptrunk_sideB_ae_members_description \ = iptrunk_sideB_ae_members_descriptions - subscription.description = f"Iptrunk {geant_s_sid}: \ - (blablabla)" - subscription = iptrunk.IptrunkProvisioning.from_other_lifecycle( + subscription.description = f'IP trunk, geant_s_sid:{geant_s_sid}' + subscription = IptrunkProvisioning.from_other_lifecycle( subscription, SubscriptionLifecycle.PROVISIONING ) - return {"subscription": subscription} + return {'subscription': subscription} -@step("Provision iptrunk [DRY RUN]") -def provision_iptrunk_dry( - subscription: iptrunk.IptrunkProvisioning, -) -> State: - # import ansible_runner - # - # r = ansible_runner.run( - # private_data_dir="/opt/geant-gap-ansible", - # playbook="base_config.yaml", - # inventory=subscription.iptrunk.fqdn, - # extravars={ - # "lo_ipv4_address": str(subscription.iptrunk.lo_ipv4_address), - # "lo_ipv6_address": str(subscription.iptrunk.lo_ipv6_address), - # "lo_iso_address": subscription.iptrunk.lo_iso_address, - # "snmp_location": subscription.iptrunk.snmp_location, - # "si_ipv4_network": str(subscription.iptrunk.si_ipv4_network), - # "lt_ipv4_network": str(subscription.iptrunk.ias_lt_ipv4_network), - # "lt_ipv6_network": str(subscription.iptrunk.ias_lt_ipv6_network), - # "site_country_code": subscription.iptrunk.site_country_code, - # "verb": "deploy", - # }, - # ) - # out = r.stdout.read() - # out_splitted = out.splitlines() - # # if r.rc != 0: - # # raise ValueError("Ansible has failed") - # return {"dry_run_output": out_splitted, "return_code": r.rc} - # provisioning_proxy.provision_node( - # node_subscription_params=subscription, - # dry_run=True) - # TODO: figure out what to return when we are suspending & waiting - # for the provisioning-proxy to call back - return {"return_code": 0} - - -@inputstep("Confirm step", assignee="CHANGES") -def confirm_step() -> FormGenerator: - class ConfirmForm(FormPage): - confirm: Accept - - user_input = yield ConfirmForm - - return {"confirm": user_input.confirm} - - -@step("Provision iptrunk [FOR REAL]") -def provision_iptrunk_real( - subscription: iptrunk.IptrunkProvisioning, -) -> State: - # import ansible_runner - # - # r = ansible_runner.run( - # private_data_dir="/opt/geant-gap-ansible", - # playbook="base_config.yaml", - # inventory=subscription.iptrunk.fqdn, - # extravars={ - # "lo_ipv4_address": str(subscription.iptrunk.lo_ipv4_address), - # "lo_ipv6_address": str(subscription.iptrunk.lo_ipv6_address), - # "lo_iso_address": subscription.iptrunk.lo_iso_address, - # "snmp_location": subscription.iptrunk.snmp_location, - # "si_ipv4_network": str(subscription.iptrunk.si_ipv4_network), - # "lt_ipv4_network": str(subscription.iptrunk.ias_lt_ipv4_network), - # "lt_ipv6_network": str(subscription.iptrunk.ias_lt_ipv6_network), - # "site_country_code": subscription.iptrunk.site_country_code, - # "verb": "deploy", - # }, - # ) - # out = r.stdout.read() - # out_splitted = out.splitlines() - # - # # return {"real_run_output": out_splitted, "return_code": r.rc} - # provisioning_proxy.provision_node( - # node_subscription_params=subscription) - # TODO: figure out what to return when we are suspending & waiting - # for the provisioning-proxy to call back - return {"return_code": 0} +@step('Provision IP trunk interface [DRY RUN]') +def provision_ip_trunk_iface_dry(subscription: IptrunkProvisioning, + process_id: UUIDstr) -> State: + provisioning_proxy.provision_ip_trunk(subscription, process_id, + 'trunk_interface') + + return {'subscription': subscription} + + +@step('Provision IP trunk interface [FOR REAL]') +def provision_ip_trunk_iface_real(subscription: IptrunkProvisioning, + process_id: UUIDstr) -> State: + provisioning_proxy.provision_ip_trunk(subscription, process_id, + 'trunk_interface', False) + + return {'subscription': subscription} + + +@step('Provision IP trunk ISIS interface [DRY RUN]') +def provision_ip_trunk_isis_iface_dry(subscription: IptrunkProvisioning, + process_id: UUIDstr) -> State: + provisioning_proxy.provision_ip_trunk(subscription, process_id, + 'isis_interface') + + return {'subscription': subscription} + + +@step('Provision IP trunk ISIS interface [FOR REAL]') +def provision_ip_trunk_isis_iface_real(subscription: IptrunkProvisioning, + process_id: UUIDstr) -> State: + provisioning_proxy.provision_ip_trunk(subscription, process_id, + 'isis_interface', False) + + return {'subscription': subscription} + + +@step('Provision IP trunk LDP interface [DRY RUN]') +def provision_ip_trunk_ldp_iface_dry(subscription: IptrunkProvisioning, + process_id: UUIDstr) -> State: + provisioning_proxy.provision_ip_trunk(subscription, process_id, + 'ldp_interface') + + return {'subscription': subscription} + + +@step('Provision IP trunk LDP interface [FOR REAL]') +def provision_ip_trunk_ldp_iface_real(subscription: IptrunkProvisioning, + process_id: UUIDstr) -> State: + provisioning_proxy.provision_ip_trunk(subscription, process_id, + 'ldp_interface', False) + + return {'subscription': subscription} + + +@step('Provision IP trunk LLDP interface [DRY RUN]') +def provision_ip_trunk_lldp_iface_dry(subscription: IptrunkProvisioning, + process_id: UUIDstr) -> State: + provisioning_proxy.provision_ip_trunk(subscription, process_id, + 'lldp_interface') + + return {'subscription': subscription} + + +@step('Provision IP trunk LLDP interface [FOR REAL]') +def provision_ip_trunk_lldp_iface_real(subscription: IptrunkProvisioning, + process_id: UUIDstr) -> State: + provisioning_proxy.provision_ip_trunk(subscription, process_id, + 'lldp_interface', False) + + return {'subscription': subscription} @workflow( - "Create Iptrunk", + 'Create IP trunk', initial_input_form=wrap_create_initial_input_form( - initial_input_form_generator), + initial_input_form_generator), target=Target.CREATE, ) def create_iptrunk(): return ( - init - >> create_subscription - >> store_process_subscription(Target.CREATE) - >> get_info_from_ipam - >> initialize_subscription - >> provision_iptrunk_dry - >> confirm_step - >> provision_iptrunk_real - >> set_status(SubscriptionLifecycle.ACTIVE) - >> resync - >> done + init + >> create_subscription + >> store_process_subscription(Target.CREATE) + >> get_info_from_ipam + >> initialize_subscription + >> provision_ip_trunk_iface_dry + >> await_pp_results + >> confirm_pp_results + >> provision_ip_trunk_iface_real + >> await_pp_results + >> confirm_pp_results + >> provision_ip_trunk_isis_iface_dry + >> await_pp_results + >> confirm_pp_results + >> provision_ip_trunk_isis_iface_real + >> await_pp_results + >> confirm_pp_results + >> provision_ip_trunk_ldp_iface_dry + >> await_pp_results + >> confirm_pp_results + >> provision_ip_trunk_ldp_iface_real + >> await_pp_results + >> confirm_pp_results + >> provision_ip_trunk_lldp_iface_dry + >> await_pp_results + >> confirm_pp_results + >> provision_ip_trunk_lldp_iface_real + >> await_pp_results + >> confirm_pp_results + >> set_status(SubscriptionLifecycle.ACTIVE) + >> resync + >> done ) diff --git a/gso/workflows/iptrunk/terminate_iptrunk.py b/gso/workflows/iptrunk/terminate_iptrunk.py new file mode 100644 index 0000000000000000000000000000000000000000..c77cb2f9ca339ae33d4e0c8ee5fe55165d0261e3 --- /dev/null +++ b/gso/workflows/iptrunk/terminate_iptrunk.py @@ -0,0 +1,69 @@ +# noinspection PyProtectedMember +from orchestrator.forms import FormPage +from orchestrator.forms.validators import Label +from orchestrator.targets import Target +from orchestrator.types import InputForm, SubscriptionLifecycle, UUIDstr +from orchestrator.types import State +from orchestrator.workflow import done, init, step, workflow +from orchestrator.workflows.steps import ( + resync, + set_status, + store_process_subscription, + unsync, +) +from orchestrator.workflows.utils import wrap_modify_initial_input_form + +from gso.products.product_types.iptrunk import Iptrunk +from gso.services import provisioning_proxy +from gso.services.provisioning_proxy import confirm_pp_results, \ + await_pp_results + + +def initial_input_form_generator(subscription_id: UUIDstr) -> InputForm: + subscription = Iptrunk.from_subscription(subscription_id) + + class TerminateForm(FormPage): + are_you_sure: Label = ( + f'Are you sure you want to remove {subscription.description}?' + ) + + return TerminateForm + + +@step('Deprovision IP trunk [DRY RUN]') +def deprovision_ip_trunk_dry(subscription: Iptrunk, + process_id: UUIDstr) -> State: + provisioning_proxy.deprovision_ip_trunk(subscription, process_id) + + return {'subscription': subscription} + + +@step('Deprovision IP trunk [FOR REAL]') +def deprovision_ip_trunk_real(subscription: Iptrunk, + process_id: UUIDstr) -> State: + provisioning_proxy.deprovision_ip_trunk(subscription, process_id, False) + + return {'subscription': subscription} + + +@workflow( + 'Terminate IPtrunk', + initial_input_form=wrap_modify_initial_input_form( + initial_input_form_generator), + target=Target.TERMINATE, +) +def terminate_iptrunk(): + return ( + init + >> store_process_subscription(Target.TERMINATE) + >> unsync + >> deprovision_ip_trunk_dry + >> await_pp_results + >> confirm_pp_results + >> deprovision_ip_trunk_real + >> await_pp_results + >> confirm_pp_results + >> set_status(SubscriptionLifecycle.TERMINATED) + >> resync + >> done + ) diff --git a/gso/workflows/site/__init__.py b/gso/workflows/site/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/gso/workflows/site/create_site.py b/gso/workflows/site/create_site.py new file mode 100644 index 0000000000000000000000000000000000000000..aa92be43b8c11bdddf0aa99e819f45916447ffb1 --- /dev/null +++ b/gso/workflows/site/create_site.py @@ -0,0 +1,93 @@ +from uuid import uuid4 + +from orchestrator.forms import FormPage +from orchestrator.targets import Target +from orchestrator.types import FormGenerator, State +from orchestrator.types import SubscriptionLifecycle, UUIDstr +from orchestrator.workflow import done, init, step, workflow +from orchestrator.workflows.steps import resync, set_status +from orchestrator.workflows.steps import store_process_subscription +from orchestrator.workflows.utils import wrap_create_initial_input_form + +from gso.products.product_blocks import site as site_pb +from gso.products.product_types import site + + +def initial_input_form_generator(product_name: str) -> FormGenerator: + class CreateSiteForm(FormPage): + class Config: + title = product_name + + site_name: str + site_city: str + site_country: str + site_country_code: str + site_latitude: float + site_longitude: float + site_bgp_community_id: int + site_internal_id: int + site_tier: site_pb.SiteTier + + user_input = yield CreateSiteForm + + return user_input.dict() + + +@step("Create subscription") +def create_subscription(product: UUIDstr) -> State: + subscription = site.SiteInactive.from_product_id(product, uuid4()) + + return { + "subscription": subscription, + "subscription_id": subscription.subscription_id, + } + + +@step("Initialize subscription") +def initialize_subscription( + subscription: site.SiteInactive, + site_name: str, + site_city: str, + site_country: str, + site_country_code: str, + site_latitude: float, + site_longitude: float, + site_bgp_community_id: int, + site_internal_id: int, + site_tier: site_pb.SiteTier +) -> State: + subscription.site.site_name = site_name + subscription.site.site_city = site_city + subscription.site.site_country = site_country + subscription.site.site_country_code = site_country_code + subscription.site.site_latitude = site_longitude + subscription.site.site_longitude = site_latitude + subscription.site.site_bgp_community_id = site_bgp_community_id + subscription.site.site_internal_id = site_internal_id + subscription.site.site_tier = site_tier + + subscription.description = f"Site {site_name}" + + subscription = site.SiteProvisioning.from_other_lifecycle( + subscription, SubscriptionLifecycle.PROVISIONING + ) + + return {"subscription": subscription} + + +@workflow( + "Create Site", + initial_input_form=wrap_create_initial_input_form( + initial_input_form_generator), + target=Target.CREATE, +) +def create_site(): + return ( + init + >> create_subscription + >> store_process_subscription(Target.CREATE) + >> initialize_subscription + >> set_status(SubscriptionLifecycle.ACTIVE) + >> resync + >> done + )