diff --git a/gso/migrations/versions/2023-03-31_f4959f32c866_create_device_model.py b/gso/migrations/versions/2023-03-31_f4959f32c866_create_device_model.py.no similarity index 100% rename from gso/migrations/versions/2023-03-31_f4959f32c866_create_device_model.py rename to gso/migrations/versions/2023-03-31_f4959f32c866_create_device_model.py.no 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-05-04_d52256e7d715_add_device_model.py b/gso/migrations/versions/2023-05-04_d52256e7d715_add_device_model.py new file mode 100644 index 0000000000000000000000000000000000000000..59a1ec6fcecc9d9397e6343c530940e43bee40a9 --- /dev/null +++ b/gso/migrations/versions/2023-05-04_d52256e7d715_add_device_model.py @@ -0,0 +1,209 @@ +"""Add device model. + +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 = '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 + """) + conn.execute(""" +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', '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 product_blocks (name, description, tag, status) VALUES ('DeviceBlock', 'A Geant device', 'DEVICE', 'active') RETURNING product_blocks.product_block_id + """) + conn.execute(""" +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 ('device_fqdn', 'Device FQDN') RETURNING resource_types.resource_type_id + """) + conn.execute(""" +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 ('device_lo_iso_address', 'Loopback ISO address') RETURNING resource_types.resource_type_id + """) + conn.execute(""" +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 ('device_si_ipv4_network', 'SI IPv4 Network') RETURNING resource_types.resource_type_id + """) + conn.execute(""" +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 ('device_lo_ipv6_address', 'Loopback IPv6 address') RETURNING resource_types.resource_type_id + """) + conn.execute(""" +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 ('device_role', 'Device role') RETURNING resource_types.resource_type_id + """) + conn.execute(""" +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 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 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 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 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 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_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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 ('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 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 ('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')) + """) + conn.execute(""" +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 ('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 ('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 ('Switch', 'Router'))) + """) + conn.execute(""" +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 ('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..7b8dd707abcfea46df3e01a54982414e02a77c69 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: str + 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: str + 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..40c0016dab7d0767e174de4a332098b185796008 100644 --- a/gso/products/product_blocks/iptrunk.py +++ b/gso/products/product_blocks/iptrunk.py @@ -27,14 +27,14 @@ 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/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..91b4374f14098227d74aba592386163f7d1a79b7 100644 --- a/gso/workflows/device/create_device.py +++ b/gso/workflows/device/create_device.py @@ -9,12 +9,35 @@ 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.device import DeviceVendor, DeviceInactive, \ - DeviceProvisioning -from gso.services import provisioning_proxy -from gso.services.provisioning_proxy import confirm_pp_results, \ - await_pp_results +from gso.products.product_types import device +from gso.products.product_blocks import device as device_pb +from orchestrator.db.models import ProductTable, SubscriptionTable +from orchestrator.forms.validators import Choice, choice_list +from gso.products.product_types.site import Site +# from gso.services import ipam, provisioning_proxy + + +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 + + 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 +45,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 @@ -48,78 +73,128 @@ def get_info_from_ipam(subscription: DeviceInactive) -> State: # 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}]' - ) - - return {'subscription': subscription} + subscription.device.device_lo_ipv4_address = ipaddress.ip_address('10.10.10.10') + subscription.device.device_lo_ipv6_address = ipaddress.ip_address('fc00:798:10::10') + subscription.device.device_lo_iso_address \ + = "49.51e5.0001.0620.4009.6047.00" + 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, - ts_address: ipaddress.IPv4Address, - ts_port: str, - device_vendor: DeviceVendor + subscription: device.DeviceInactive, + hostname: str, + ts_address: ipaddress.IPv4Address, + ts_port: str, + 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.description = f'Device {fqdn} ' \ - f'({subscription.device_type})' - subscription = DeviceProvisioning.from_other_lifecycle( + 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} type \ + ({subscription.device_type})" + subscription = device.DeviceProvisioning.from_other_lifecycle( subscription, SubscriptionLifecycle.PROVISIONING ) - return {'subscription': subscription} - - -@step('Provision device [DRY RUN]') -def provision_device_dry(subscription: DeviceProvisioning, - process_id: UUIDstr) -> State: - provisioning_proxy.provision_node( - subscription, - process_id - ) + return {"subscription": subscription, "fqdn": fqdn} - return {'subscription': subscription} - - -@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 - ) - - return {'subscription': subscription} +@step("Provision device [DRY RUN]") +def provision_device_dry( + subscription: device.DeviceProvisioning +) -> State: + import ansible_runner + + snmp_location = subscription.device.device_site.site_country_code + r = ansible_runner.run( + private_data_dir="/opt/geant-gap-ansible", + playbook="base_config.yaml", + inventory=subscription.device.device_fqdn, + extravars={ + "lo_ipv4_address": str(subscription.device.device_lo_ipv4_address), + "lo_ipv6_address": str(subscription.device.device_lo_ipv6_address), + "lo_iso_address": subscription.device.device_lo_iso_address, + "snmp_location": snmp_location, + "si_ipv4_network": str(subscription.device.device_si_ipv4_network), + "lt_ipv4_network": str(subscription.device.device_ias_lt_ipv4_network), + "lt_ipv6_network": str(subscription.device.device_ias_lt_ipv6_network), + "site_country_code": subscription.device.device_site.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 device [FOR REAL]") +def provision_device_real( + subscription: device.DeviceProvisioning +) -> State: + import ansible_runner + + snmp_location = subscription.device.device_site.site_country_code + r = ansible_runner.run( + private_data_dir="/opt/geant-gap-ansible", + playbook="base_config.yaml", + inventory=subscription.device.device_fqdn, + extravars={ + "lo_ipv4_address": str(subscription.device.device_lo_ipv4_address), + "lo_ipv6_address": str(subscription.device.device_lo_ipv6_address), + "lo_iso_address": subscription.device.device_lo_iso_address, + "snmp_location": snmp_location, + "si_ipv4_network": str(subscription.device.device_si_ipv4_network), + "lt_ipv4_network": str(subscription.device.device_ias_lt_ipv4_network), + "lt_ipv6_network": str(subscription.device.device_ias_lt_ipv6_network), + "site_country_code": subscription.device.device_site.site_country_code, + "verb": "deploy", + "dryrun": "False", + "commit_comment": "Deployed with WFO and Ansible", + }, + ) + 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} @workflow( 'Create device', diff --git a/gso/workflows/device/terminate_device.py b/gso/workflows/device/terminate_device.py index 686128a19e0464a0d579b1370c21af3a746ba17b..d5de3c3d17f22d220da5001241f306e283d94d10 100644 --- a/gso/workflows/device/terminate_device.py +++ b/gso/workflows/device/terminate_device.py @@ -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..2b485a9b18f8444d528684069514c68eac7a4965 100644 --- a/gso/workflows/iptrunk/create_iptrunk.py +++ b/gso/workflows/iptrunk/create_iptrunk.py @@ -1,4 +1,4 @@ -# import ipaddress +import ipaddress from uuid import uuid4 from orchestrator.forms import FormPage @@ -19,6 +19,8 @@ from gso.products.product_types.device import Device # from gso.products.product_types import device from orchestrator.db.models import ProductTable, SubscriptionTable from orchestrator.forms.validators import Choice, choice_list +from orchestrator.utils.json import json_dumps + def device_selector(choice_value: str) -> list: @@ -91,8 +93,8 @@ def create_subscription(product: UUIDstr) -> State: @step("Get information from IPAM ") def get_info_from_ipam(subscription: iptrunk.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" + 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} @@ -153,35 +155,30 @@ def initialize_subscription( 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() + import ansible_runner + + r = ansible_runner.run( + private_data_dir="/opt/geant-gap-ansible", + playbook="iptrunks.yaml", + inventory= str(subscription.iptrunk.iptrunk_sideA_node.device_fqdn +"\n"+ + subscription.iptrunk.iptrunk_sideB_node.device_fqdn+"\n"), + extravars={ + "verb": "compile", + "wfo_trunk_json":json_dumps(subscription), + "config_object":"trunk_interface", + }, + ) + 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} + 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} + #return {"return_code": 0} @inputstep("Confirm step", assignee="CHANGES") diff --git a/gso/workflows/iptrunk/terminate_iptrunk.py b/gso/workflows/iptrunk/terminate_iptrunk.py new file mode 100644 index 0000000000000000000000000000000000000000..ddb65eacfd800868a76f2a5fe5b4f0a472035d42 --- /dev/null +++ b/gso/workflows/iptrunk/terminate_iptrunk.py @@ -0,0 +1,53 @@ +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.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 + + +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}?" + ) # type:ignore + + return TerminateForm + + +def _deprovision_in_user_management_system(fqdn: str) -> str: + pass + + +@step("Deprovision Iptrunk") +def deprovision_iptrunk(subscription: Iptrunk) -> None: + # _deprovision_in_user_management_system(subscription.user.user_id) + pass + + +@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_iptrunk + >> set_status(SubscriptionLifecycle.TERMINATED) + >> resync + >> done + ) diff --git a/gso/workflows/site/create_site.py b/gso/workflows/site/create_site.py new file mode 100644 index 0000000000000000000000000000000000000000..a1642ef75e2f583dabeb153b305c17e51d3eff19 --- /dev/null +++ b/gso/workflows/site/create_site.py @@ -0,0 +1,94 @@ +from uuid import uuid4 + +from orchestrator.forms import FormPage +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 site +from gso.products.product_blocks import site as site_pb + + +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 + )