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