diff --git a/gso/migrations/versions/2023-03-31_f4959f32c866_create_device_model.py b/gso/migrations/versions/2023-03-31_f4959f32c866_create_device_model.py.no
similarity index 100%
rename from gso/migrations/versions/2023-03-31_f4959f32c866_create_device_model.py
rename to gso/migrations/versions/2023-03-31_f4959f32c866_create_device_model.py.no
diff --git a/gso/migrations/versions/2023-04-05_857225661207_add_device_workflows.py b/gso/migrations/versions/2023-04-05_857225661207_add_device_workflows.py
index c4d7d7fed664375254113c0537cdbe2ce6d90beb..fc938a278b5fc3d4a2a7800b002118ca3d47372a 100644
--- a/gso/migrations/versions/2023-04-05_857225661207_add_device_workflows.py
+++ b/gso/migrations/versions/2023-04-05_857225661207_add_device_workflows.py
@@ -10,7 +10,7 @@ from alembic import op
 
 # revision identifiers, used by Alembic.
 revision = '857225661207'
-down_revision = 'f4959f32c866'
+down_revision = 'd52256e7d715'
 branch_labels = None
 depends_on = None
 
diff --git a/gso/migrations/versions/2023-04-28_6b8483b46d06_add_iptrunk_product.py.no b/gso/migrations/versions/2023-04-28_6b8483b46d06_add_iptrunk_product.py.no
deleted file mode 100644
index 6770a04af10af7daeac0268a9a79d4103ad0550a..0000000000000000000000000000000000000000
--- a/gso/migrations/versions/2023-04-28_6b8483b46d06_add_iptrunk_product.py.no
+++ /dev/null
@@ -1,266 +0,0 @@
-"""Add Iptrunk product.
-
-Revision ID: 6b8483b46d06
-Revises: 857225661207
-Create Date: 2023-04-28 12:35:22.996576
-
-"""
-import sqlalchemy as sa
-from alembic import op
-
-# revision identifiers, used by Alembic.
-revision = '6b8483b46d06'
-down_revision = '857225661207'
-branch_labels = None
-depends_on = None
-
-
-def upgrade() -> None:
-    conn = op.get_bind()
-    conn.execute("""
-INSERT INTO products (name, description, product_type, tag, status) VALUES ('Iptrunk', 'An IPtrunk (product)', 'Iptrunk', 'IPTRUNK', 'active') RETURNING products.product_id
-    """)
-    conn.execute("""
-INSERT INTO product_blocks (name, description, tag, status) VALUES ('IptrunkBlock', 'An IPtrunk (productBlock)', 'IPTRUNK', 'active') RETURNING product_blocks.product_block_id
-    """)
-    conn.execute("""
-INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideB_ae_iface', 'B-side: LAG interface name') RETURNING resource_types.resource_type_id
-    """)
-    conn.execute("""
-INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_ipv4_network', 'Global: IPv4 network') RETURNING resource_types.resource_type_id
-    """)
-    conn.execute("""
-INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideA_ae_members', 'A-side: LAG members') RETURNING resource_types.resource_type_id
-    """)
-    conn.execute("""
-INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideA_ae_iface', 'A-side: LAG interface name') RETURNING resource_types.resource_type_id
-    """)
-    conn.execute("""
-INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideB_ae_members', 'B-side: LAG members') RETURNING resource_types.resource_type_id
-    """)
-    conn.execute("""
-INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideA_ae_geant_a_sid', 'A-side: GA identifier for the LAG') RETURNING resource_types.resource_type_id
-    """)
-    conn.execute("""
-INSERT INTO resource_types (resource_type, description) VALUES ('geant_s_sid', 'Global: Service ID for the trunk') RETURNING resource_types.resource_type_id
-    """)
-    conn.execute("""
-INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_description', 'Global: LAG human interface description') RETURNING resource_types.resource_type_id
-    """)
-    conn.execute("""
-INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideA_fqdn', 'A-side: router FQDN') RETURNING resource_types.resource_type_id
-    """)
-    conn.execute("""
-INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideB_ae_geant_a_sid', 'B-side: GA identifier for the LAG') RETURNING resource_types.resource_type_id
-    """)
-    conn.execute("""
-INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_speed', 'Global: LAG''s members speed') RETURNING resource_types.resource_type_id
-    """)
-    conn.execute("""
-INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_ipv6_network', 'Global: IPv6 network') RETURNING resource_types.resource_type_id
-    """)
-    conn.execute("""
-INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_minimum_links', 'Global: minimum links for the LAG') RETURNING resource_types.resource_type_id
-    """)
-    conn.execute("""
-INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideB_fqdn', 'B-side: router FQDN') RETURNING resource_types.resource_type_id
-    """)
-    conn.execute("""
-INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideB_ae_members_description', 'B-side: human interface description for LAG''s members') RETURNING resource_types.resource_type_id
-    """)
-    conn.execute("""
-INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_sideA_ae_members_description', 'A-side: human interface description for LAG''s members') RETURNING resource_types.resource_type_id
-    """)
-    conn.execute("""
-INSERT INTO resource_types (resource_type, description) VALUES ('iptrunk_type', 'Global: dark fiber vs leased lines') RETURNING resource_types.resource_type_id
-    """)
-    conn.execute("""
-INSERT INTO product_product_blocks (product_id, product_block_id) VALUES ((SELECT products.product_id FROM products WHERE products.name IN ('Iptrunk')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')))
-    """)
-    conn.execute("""
-INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('geant_s_sid')))
-    """)
-    conn.execute("""
-INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_description')))
-    """)
-    conn.execute("""
-INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_type')))
-    """)
-    conn.execute("""
-INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_speed')))
-    """)
-    conn.execute("""
-INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_minimum_links')))
-    """)
-    conn.execute("""
-INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_ipv4_network')))
-    """)
-    conn.execute("""
-INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_ipv6_network')))
-    """)
-    conn.execute("""
-INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_fqdn')))
-    """)
-    conn.execute("""
-INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_iface')))
-    """)
-    conn.execute("""
-INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_geant_a_sid')))
-    """)
-    conn.execute("""
-INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_members')))
-    """)
-    conn.execute("""
-INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_members_description')))
-    """)
-    conn.execute("""
-INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_fqdn')))
-    """)
-    conn.execute("""
-INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_iface')))
-    """)
-    conn.execute("""
-INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_geant_a_sid')))
-    """)
-    conn.execute("""
-INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_members')))
-    """)
-    conn.execute("""
-INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_members_description')))
-    """)
-
-
-def downgrade() -> None:
-    conn = op.get_bind()
-    conn.execute("""
-DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('geant_s_sid'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('geant_s_sid'))
-    """)
-    conn.execute("""
-DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_description'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_description'))
-    """)
-    conn.execute("""
-DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_type'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_type'))
-    """)
-    conn.execute("""
-DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_speed'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_speed'))
-    """)
-    conn.execute("""
-DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_minimum_links'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_minimum_links'))
-    """)
-    conn.execute("""
-DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_ipv4_network'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_ipv4_network'))
-    """)
-    conn.execute("""
-DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_ipv6_network'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_ipv6_network'))
-    """)
-    conn.execute("""
-DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_fqdn'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_fqdn'))
-    """)
-    conn.execute("""
-DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_iface'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_iface'))
-    """)
-    conn.execute("""
-DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_geant_a_sid'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_geant_a_sid'))
-    """)
-    conn.execute("""
-DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_members'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_members'))
-    """)
-    conn.execute("""
-DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_members_description'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideA_ae_members_description'))
-    """)
-    conn.execute("""
-DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_fqdn'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_fqdn'))
-    """)
-    conn.execute("""
-DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_iface'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_iface'))
-    """)
-    conn.execute("""
-DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_geant_a_sid'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_geant_a_sid'))
-    """)
-    conn.execute("""
-DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_members'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_members'))
-    """)
-    conn.execute("""
-DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_members_description'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_members_description'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instance_values WHERE subscription_instance_values.resource_type_id IN (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_iface', 'iptrunk_ipv4_network', 'iptrunk_sideA_ae_members', 'iptrunk_sideA_ae_iface', 'iptrunk_sideB_ae_members', 'iptrunk_sideA_ae_geant_a_sid', 'geant_s_sid', 'iptrunk_description', 'iptrunk_sideA_fqdn', 'iptrunk_sideB_ae_geant_a_sid', 'iptrunk_speed', 'iptrunk_ipv6_network', 'iptrunk_minimum_links', 'iptrunk_sideB_fqdn', 'iptrunk_sideB_ae_members_description', 'iptrunk_sideA_ae_members_description', 'iptrunk_type'))
-    """)
-    conn.execute("""
-DELETE FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_sideB_ae_iface', 'iptrunk_ipv4_network', 'iptrunk_sideA_ae_members', 'iptrunk_sideA_ae_iface', 'iptrunk_sideB_ae_members', 'iptrunk_sideA_ae_geant_a_sid', 'geant_s_sid', 'iptrunk_description', 'iptrunk_sideA_fqdn', 'iptrunk_sideB_ae_geant_a_sid', 'iptrunk_speed', 'iptrunk_ipv6_network', 'iptrunk_minimum_links', 'iptrunk_sideB_fqdn', 'iptrunk_sideB_ae_members_description', 'iptrunk_sideA_ae_members_description', 'iptrunk_type')
-    """)
-    conn.execute("""
-DELETE FROM product_product_blocks WHERE product_product_blocks.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Iptrunk')) AND product_product_blocks.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instances WHERE subscription_instances.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock'))
-    """)
-    conn.execute("""
-DELETE FROM product_blocks WHERE product_blocks.name IN ('IptrunkBlock')
-    """)
-    conn.execute("""
-DELETE FROM processes WHERE processes.pid IN (SELECT processes_subscriptions.pid FROM processes_subscriptions WHERE processes_subscriptions.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Iptrunk'))))
-    """)
-    conn.execute("""
-DELETE FROM processes_subscriptions WHERE processes_subscriptions.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Iptrunk')))
-    """)
-    conn.execute("""
-DELETE FROM subscription_instances WHERE subscription_instances.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Iptrunk')))
-    """)
-    conn.execute("""
-DELETE FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Iptrunk'))
-    """)
-    conn.execute("""
-DELETE FROM products WHERE products.name IN ('Iptrunk')
-    """)
diff --git a/gso/migrations/versions/2023-04-28_95cd21cb2b05_add_iptrunk_create_workflows.py.no b/gso/migrations/versions/2023-05-04_21e7bb0e5cad_add_site_create_workflow.py
similarity index 65%
rename from gso/migrations/versions/2023-04-28_95cd21cb2b05_add_iptrunk_create_workflows.py.no
rename to gso/migrations/versions/2023-05-04_21e7bb0e5cad_add_site_create_workflow.py
index 8b007e17edb7f0846d183d7caff964a84e233baf..118d7b125f58279504e7ea14ceac9f18cff0f043 100644
--- a/gso/migrations/versions/2023-04-28_95cd21cb2b05_add_iptrunk_create_workflows.py.no
+++ b/gso/migrations/versions/2023-05-04_21e7bb0e5cad_add_site_create_workflow.py
@@ -1,16 +1,16 @@
-"""add IPtrunk create workflows.
+"""add Site create  workflow.
 
-Revision ID: 95cd21cb2b05
-Revises: 6b8483b46d06
-Create Date: 2023-04-28 12:37:36.801782
+Revision ID: 21e7bb0e5cad
+Revises: 60d340427471
+Create Date: 2023-05-04 09:00:36.433715
 
 """
 import sqlalchemy as sa
 from alembic import op
 
 # revision identifiers, used by Alembic.
-revision = '95cd21cb2b05'
-down_revision = '6b8483b46d06'
+revision = '21e7bb0e5cad'
+down_revision = '60d340427471'
 branch_labels = None
 depends_on = None
 
@@ -19,10 +19,10 @@ from orchestrator.migrations.helpers import create_workflow, delete_workflow
 
 new_workflows = [
     {
-        "name": "create_iptrunk",
+        "name": "create_site",
         "target": "CREATE",
-        "description": "Create Iptrunk",
-        "product_type": "Iptrunk"
+        "description": "Create Site",
+        "product_type": "Site"
     }
 ]
 
diff --git a/gso/migrations/versions/2023-05-04_4d850df522f2_add_site_model.py b/gso/migrations/versions/2023-05-04_4d850df522f2_add_site_model.py
new file mode 100644
index 0000000000000000000000000000000000000000..49ac3327e449859f96a99005bfd47a9fde1512f9
--- /dev/null
+++ b/gso/migrations/versions/2023-05-04_4d850df522f2_add_site_model.py
@@ -0,0 +1,170 @@
+"""Add site model.
+
+Revision ID: 4d850df522f2
+Revises:
+Create Date: 2023-05-04 08:27:31.942548
+
+"""
+import sqlalchemy as sa
+from alembic import op
+
+# revision identifiers, used by Alembic.
+revision = '4d850df522f2'
+down_revision = None
+branch_labels = ('data',)
+depends_on = 'e05bb1967eff'
+
+
+def upgrade() -> None:
+    conn = op.get_bind()
+    conn.execute("""
+INSERT INTO products (name, description, product_type, tag, status) VALUES ('Site', 'A Geant POP', 'Site', 'SITE', 'active') RETURNING products.product_id
+    """)
+    conn.execute("""
+INSERT INTO product_blocks (name, description, tag, status) VALUES ('SiteBlock', 'A Geant POP', 'SITE', 'active') RETURNING product_blocks.product_block_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('site_internal_id', 'Site internal ID') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('site_country', 'Site country') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('site_longitude', 'Site Longitude') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('site_country_code', 'Site country code') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('site_tier', 'Site Tier') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('site_city', 'Site city') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('site_latitude', 'Site latitude') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('site_name', 'Site name') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('site_bgp_community_id', 'Site BGP community ID') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO product_product_blocks (product_id, product_block_id) VALUES ((SELECT products.product_id FROM products WHERE products.name IN ('Site')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_name')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_city')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_country')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_country_code')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_latitude')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_longitude')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_internal_id')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_bgp_community_id')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_tier')))
+    """)
+
+
+def downgrade() -> None:
+    conn = op.get_bind()
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_name'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_name'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_city'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_city'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_country'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_country'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_country_code'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_country_code'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_latitude'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_latitude'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_longitude'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_longitude'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_internal_id'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_internal_id'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_bgp_community_id'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_bgp_community_id'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_tier'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_tier'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values WHERE subscription_instance_values.resource_type_id IN (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_internal_id', 'site_country', 'site_longitude', 'site_country_code', 'site_tier', 'site_city', 'site_latitude', 'site_name', 'site_bgp_community_id'))
+    """)
+    conn.execute("""
+DELETE FROM resource_types WHERE resource_types.resource_type IN ('site_internal_id', 'site_country', 'site_longitude', 'site_country_code', 'site_tier', 'site_city', 'site_latitude', 'site_name', 'site_bgp_community_id')
+    """)
+    conn.execute("""
+DELETE FROM product_product_blocks WHERE product_product_blocks.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Site')) AND product_product_blocks.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instances WHERE subscription_instances.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))
+    """)
+    conn.execute("""
+DELETE FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')
+    """)
+    conn.execute("""
+DELETE FROM processes WHERE processes.pid IN (SELECT processes_subscriptions.pid FROM processes_subscriptions WHERE processes_subscriptions.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Site'))))
+    """)
+    conn.execute("""
+DELETE FROM processes_subscriptions WHERE processes_subscriptions.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Site')))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instances WHERE subscription_instances.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Site')))
+    """)
+    conn.execute("""
+DELETE FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Site'))
+    """)
+    conn.execute("""
+DELETE FROM products WHERE products.name IN ('Site')
+    """)
diff --git a/gso/migrations/versions/2023-05-04_d52256e7d715_add_device_model.py b/gso/migrations/versions/2023-05-04_d52256e7d715_add_device_model.py
new file mode 100644
index 0000000000000000000000000000000000000000..59a1ec6fcecc9d9397e6343c530940e43bee40a9
--- /dev/null
+++ b/gso/migrations/versions/2023-05-04_d52256e7d715_add_device_model.py
@@ -0,0 +1,209 @@
+"""Add device model.
+
+Revision ID: d52256e7d715
+Revises: 4d850df522f2
+Create Date: 2023-05-04 08:30:12.367903
+
+"""
+import sqlalchemy as sa
+from alembic import op
+
+# revision identifiers, used by Alembic.
+revision = 'd52256e7d715'
+down_revision = '4d850df522f2'
+branch_labels = None
+depends_on = None
+
+
+def upgrade() -> None:
+    conn = op.get_bind()
+    conn.execute("""
+INSERT INTO products (name, description, product_type, tag, status) VALUES ('Router', 'A Geant router', 'Device', 'RTR', 'active') RETURNING products.product_id
+    """)
+    conn.execute("""
+INSERT INTO products (name, description, product_type, tag, status) VALUES ('Switch', 'A Geant switch', 'Device', 'SW', 'active') RETURNING products.product_id
+    """)
+    conn.execute("""
+INSERT INTO fixed_inputs (name, value, product_id) VALUES ('device_type', 'switch', (SELECT products.product_id FROM products WHERE products.name IN ('Switch'))), ('device_type', 'router', (SELECT products.product_id FROM products WHERE products.name IN ('Router')))
+    """)
+    conn.execute("""
+INSERT INTO product_blocks (name, description, tag, status) VALUES ('DeviceBlock', 'A Geant device', 'DEVICE', 'active') RETURNING product_blocks.product_block_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('device_lo_ipv4_address', 'Loopback IPv4 address') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('device_fqdn', 'Device FQDN') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('device_ts_port', 'Terminal Server Port') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('device_lo_iso_address', 'Loopback ISO address') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('device_ts_address', 'Terminal Server Address') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('device_si_ipv4_network', 'SI IPv4 Network') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('device_ias_lt_ipv6_network', 'IAS lt IPv6 network') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('device_lo_ipv6_address', 'Loopback IPv6 address') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('device_vendor', 'Device Vendor') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('device_role', 'Device role') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO resource_types (resource_type, description) VALUES ('device_ias_lt_ipv4_network', 'IAS lt IPV4 Network') RETURNING resource_types.resource_type_id
+    """)
+    conn.execute("""
+INSERT INTO product_product_blocks (product_id, product_block_id) VALUES ((SELECT products.product_id FROM products WHERE products.name IN ('Switch')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))), ((SELECT products.product_id FROM products WHERE products.name IN ('Router')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_relations (in_use_by_id, depends_on_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_fqdn')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ts_address')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ts_port')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_ipv4_address')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_ipv6_address')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_iso_address')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_si_ipv4_network')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ias_lt_ipv4_network')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ias_lt_ipv6_network')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_vendor')))
+    """)
+    conn.execute("""
+INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_role')))
+    """)
+
+
+def downgrade() -> None:
+    conn = op.get_bind()
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_fqdn'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_fqdn'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ts_address'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ts_address'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ts_port'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ts_port'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_ipv4_address'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_ipv4_address'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_ipv6_address'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_ipv6_address'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_iso_address'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_iso_address'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_si_ipv4_network'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_si_ipv4_network'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ias_lt_ipv4_network'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ias_lt_ipv4_network'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ias_lt_ipv6_network'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_ias_lt_ipv6_network'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_vendor'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_vendor'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_role'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_role'))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instance_values WHERE subscription_instance_values.resource_type_id IN (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('device_lo_ipv4_address', 'device_fqdn', 'device_ts_port', 'device_lo_iso_address', 'device_ts_address', 'device_si_ipv4_network', 'device_ias_lt_ipv6_network', 'device_lo_ipv6_address', 'device_vendor', 'device_role', 'device_ias_lt_ipv4_network'))
+    """)
+    conn.execute("""
+DELETE FROM resource_types WHERE resource_types.resource_type IN ('device_lo_ipv4_address', 'device_fqdn', 'device_ts_port', 'device_lo_iso_address', 'device_ts_address', 'device_si_ipv4_network', 'device_ias_lt_ipv6_network', 'device_lo_ipv6_address', 'device_vendor', 'device_role', 'device_ias_lt_ipv4_network')
+    """)
+    conn.execute("""
+DELETE FROM product_product_blocks WHERE product_product_blocks.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Switch', 'Router')) AND product_product_blocks.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))
+    """)
+    conn.execute("""
+DELETE FROM product_block_relations WHERE product_block_relations.in_use_by_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')) AND product_block_relations.depends_on_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock'))
+    """)
+    conn.execute("""
+DELETE FROM fixed_inputs WHERE fixed_inputs.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Switch', 'Router')) AND fixed_inputs.name = 'device_type'
+    """)
+    conn.execute("""
+DELETE FROM subscription_instances WHERE subscription_instances.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock'))
+    """)
+    conn.execute("""
+DELETE FROM product_blocks WHERE product_blocks.name IN ('DeviceBlock')
+    """)
+    conn.execute("""
+DELETE FROM processes WHERE processes.pid IN (SELECT processes_subscriptions.pid FROM processes_subscriptions WHERE processes_subscriptions.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Switch', 'Router'))))
+    """)
+    conn.execute("""
+DELETE FROM processes_subscriptions WHERE processes_subscriptions.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Switch', 'Router')))
+    """)
+    conn.execute("""
+DELETE FROM subscription_instances WHERE subscription_instances.subscription_id IN (SELECT subscriptions.subscription_id FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Switch', 'Router')))
+    """)
+    conn.execute("""
+DELETE FROM subscriptions WHERE subscriptions.product_id IN (SELECT products.product_id FROM products WHERE products.name IN ('Switch', 'Router'))
+    """)
+    conn.execute("""
+DELETE FROM products WHERE products.name IN ('Switch', 'Router')
+    """)
diff --git a/gso/migrations/versions/2023-05-08_61f8e90581c5_add_terminate_device_workflow.py b/gso/migrations/versions/2023-05-08_61f8e90581c5_add_terminate_device_workflow.py
new file mode 100644
index 0000000000000000000000000000000000000000..8b3f8398c9609c0de0ce56f2cb352aa2a335e1cc
--- /dev/null
+++ b/gso/migrations/versions/2023-05-08_61f8e90581c5_add_terminate_device_workflow.py
@@ -0,0 +1,39 @@
+"""add Terminate device workflow.
+
+Revision ID: 61f8e90581c5
+Revises: 21e7bb0e5cad
+Create Date: 2023-05-08 10:48:21.655880
+
+"""
+import sqlalchemy as sa
+from alembic import op
+
+# revision identifiers, used by Alembic.
+revision = '61f8e90581c5'
+down_revision = '21e7bb0e5cad'
+branch_labels = None
+depends_on = None
+
+
+from orchestrator.migrations.helpers import create_workflow, delete_workflow
+
+new_workflows = [
+    {
+        "name": "terminate_device",
+        "target": "TERMINATE",
+        "description": "Terminate device",
+        "product_type": "Device"
+    }
+]
+
+
+def upgrade() -> None:
+    conn = op.get_bind()
+    for workflow in new_workflows:
+        create_workflow(conn, workflow)
+
+
+def downgrade() -> None:
+    conn = op.get_bind()
+    for workflow in new_workflows:
+        delete_workflow(conn, workflow["name"])
diff --git a/gso/migrations/versions/2023-05-08_647e066bc99e_add_terminate_iptrunk_workflow.py b/gso/migrations/versions/2023-05-08_647e066bc99e_add_terminate_iptrunk_workflow.py
new file mode 100644
index 0000000000000000000000000000000000000000..49cb67b43eed421e58df6a54a900bffe58e04a3a
--- /dev/null
+++ b/gso/migrations/versions/2023-05-08_647e066bc99e_add_terminate_iptrunk_workflow.py
@@ -0,0 +1,39 @@
+"""add Terminate Iptrunk workflow.
+
+Revision ID: 647e066bc99e
+Revises: 61f8e90581c5
+Create Date: 2023-05-08 18:59:01.309425
+
+"""
+import sqlalchemy as sa
+from alembic import op
+
+# revision identifiers, used by Alembic.
+revision = '647e066bc99e'
+down_revision = '61f8e90581c5'
+branch_labels = None
+depends_on = None
+
+
+from orchestrator.migrations.helpers import create_workflow, delete_workflow
+
+new_workflows = [
+    {
+        "name": "terminate_iptrunk",
+        "target": "TERMINATE",
+        "description": "Terminate IPtrunk",
+        "product_type": "Iptrunk"
+    }
+]
+
+
+def upgrade() -> None:
+    conn = op.get_bind()
+    for workflow in new_workflows:
+        create_workflow(conn, workflow)
+
+
+def downgrade() -> None:
+    conn = op.get_bind()
+    for workflow in new_workflows:
+        delete_workflow(conn, workflow["name"])
diff --git a/gso/products/__init__.py b/gso/products/__init__.py
index b8b60c156ba992f6394d41035f9b66b3b3645fbd..857128fb672bf6350e674bfc81e8d89fa2765af2 100644
--- a/gso/products/__init__.py
+++ b/gso/products/__init__.py
@@ -2,9 +2,11 @@ from orchestrator.domain import SUBSCRIPTION_MODEL_REGISTRY
 
 from gso.products.product_types.device import Device
 from gso.products.product_types.iptrunk import Iptrunk
+from gso.products.product_types.site import Site
 
 SUBSCRIPTION_MODEL_REGISTRY.update(
     {
+        "Site": Site,
         "Router": Device,
         "Switch": Device,
         "Iptrunk": Iptrunk,
diff --git a/gso/products/product_blocks/device.py b/gso/products/product_blocks/device.py
index 9e34743f2e1e2eea7f3610cd6e3cab616061e020..7b8dd707abcfea46df3e01a54982414e02a77c69 100644
--- a/gso/products/product_blocks/device.py
+++ b/gso/products/product_blocks/device.py
@@ -1,63 +1,67 @@
 from typing import Optional
 
 from orchestrator.domain.base import ProductBlockModel
-from orchestrator.types import SubscriptionLifecycle
+from orchestrator.types import SubscriptionLifecycle, strEnum
+from gso.products.product_blocks.site \
+    import SiteBlock, SiteBlockInactive, SiteBlockProvisioning
 import ipaddress
 
 
+class DeviceVendor(strEnum):
+    juniper = "juniper"
+    nokia = "nokia"
+
+
+class DeviceRole(strEnum):
+    p = "p"
+    pe = "pe"
+    amt = "amt"
+
+
 class DeviceBlockInactive(ProductBlockModel,
                           lifecycle=[SubscriptionLifecycle.INITIAL],
                           product_block_name="DeviceBlock"):
-    fqdn: Optional[str] = None
-    ts_address: Optional[str] = None
-    ts_port: Optional[int] = None
-    lo_ipv4_address: Optional[ipaddress.IPv4Address] = None
-    lo_ipv6_address: Optional[ipaddress.IPv6Address] = None
-    lo_iso_address: Optional[str] = None
-    si_ipv4_network: Optional[ipaddress.IPv4Network] = None
-    ias_lt_ipv4_network: Optional[ipaddress.IPv4Network] = None
-    ias_lt_ipv6_network: Optional[ipaddress.IPv6Network] = None
-    site_city: Optional[str] = None
-    site_country: Optional[str] = None
-    site_country_code: Optional[str] = None
-    site_latitude: Optional[str] = None
-    site_longitude: Optional[str] = None
-    snmp_location: Optional[str] = None
+    device_fqdn: Optional[str] = None
+    device_ts_address: Optional[str] = None
+    device_ts_port: Optional[int] = None
+    device_lo_ipv4_address: Optional[ipaddress.IPv4Address] = None
+    device_lo_ipv6_address: Optional[ipaddress.IPv6Address] = None
+    device_lo_iso_address: Optional[str] = None
+    device_si_ipv4_network: Optional[ipaddress.IPv4Network] = None
+    device_ias_lt_ipv4_network: Optional[ipaddress.IPv4Network] = None
+    device_ias_lt_ipv6_network: Optional[ipaddress.IPv6Network] = None
+    device_vendor: Optional[DeviceVendor] = None
+    device_role: Optional[DeviceRole] = None
+    device_site: Optional[SiteBlockInactive]
 
 
 class DeviceBlockProvisioning(DeviceBlockInactive,
                               lifecycle=[SubscriptionLifecycle.PROVISIONING]):
-    fqdn: str
-    ts_address: str
-    ts_port: str
-    lo_ipv4_address: Optional[ipaddress.IPv4Address] = None
-    lo_ipv6_address: Optional[ipaddress.IPv6Address] = None
-    lo_iso_address: Optional[str] = None
-    si_ipv4_network: Optional[ipaddress.IPv4Network] = None
-    ias_lt_ipv4_network: Optional[ipaddress.IPv4Network] = None
-    ias_lt_ipv6_network: Optional[ipaddress.IPv6Network] = None
-    site_city: Optional[str] = None
-    site_country: Optional[str] = None
-    site_country_code: Optional[str] = None
-    site_latitude: Optional[str] = None
-    site_longitude: Optional[str] = None
-    snmp_location: Optional[str] = None
+    device_fqdn: str
+    device_ts_address: str
+    device_ts_port: str
+    device_lo_ipv4_address: Optional[ipaddress.IPv4Address] = None
+    device_lo_ipv6_address: Optional[ipaddress.IPv6Address] = None
+    device_lo_iso_address: Optional[str] = None
+    device_si_ipv4_network: Optional[ipaddress.IPv4Network] = None
+    device_ias_lt_ipv4_network: Optional[ipaddress.IPv4Network] = None
+    device_ias_lt_ipv6_network: Optional[ipaddress.IPv6Network] = None
+    device_vendor: Optional[DeviceVendor] = None
+    device_role: Optional[DeviceRole] = None
+    device_site: Optional[SiteBlockProvisioning]
 
 
 class DeviceBlock(DeviceBlockProvisioning,
                   lifecycle=[SubscriptionLifecycle.ACTIVE]):
-    fqdn: str
-    ts_address: str
-    ts_port: str
-    lo_ipv4_address: ipaddress.IPv4Address
-    lo_ipv6_address: ipaddress.IPv6Address
-    lo_iso_address: str
-    si_ipv4_network: ipaddress.IPv4Network
-    ias_lt_ipv4_network: ipaddress.IPv4Network
-    ias_lt_ipv6_network: ipaddress.IPv6Network
-    site_city: str
-    site_country: str
-    site_country_code: str
-    site_latitude: str
-    site_longitude: str
-    snmp_location: str
+    device_fqdn: str
+    device_ts_address: str
+    device_ts_port: str
+    device_lo_ipv4_address: ipaddress.IPv4Address
+    device_lo_ipv6_address: ipaddress.IPv6Address
+    device_lo_iso_address: str
+    device_si_ipv4_network: ipaddress.IPv4Network
+    device_ias_lt_ipv4_network: ipaddress.IPv4Network
+    device_ias_lt_ipv6_network: ipaddress.IPv6Network
+    device_vendor: DeviceVendor
+    device_role: DeviceRole
+    device_site: SiteBlock
diff --git a/gso/products/product_blocks/iptrunk.py b/gso/products/product_blocks/iptrunk.py
index f2c882bf9a68680c786f9c25ec00b2b838471d7d..40c0016dab7d0767e174de4a332098b185796008 100644
--- a/gso/products/product_blocks/iptrunk.py
+++ b/gso/products/product_blocks/iptrunk.py
@@ -27,14 +27,14 @@ class IptrunkBlockInactive(ProductBlockModel,
     iptrunk_sideA_node: DeviceBlockInactive
     iptrunk_sideA_ae_iface: Optional[str] = None
     iptrunk_sideA_ae_geant_a_sid: Optional[str] = None
-    iptrunk_sideA_ae_members: Optional[list] = None
-    iptrunk_sideA_ae_members_description: Optional[list] = None
+    iptrunk_sideA_ae_members: list[str] = Field(default_factory=list)
+    iptrunk_sideA_ae_members_description: list[str] = Field(default_factory=list)
     #
     iptrunk_sideB_node: DeviceBlockInactive
     iptrunk_sideB_ae_iface: Optional[str] = None
     iptrunk_sideB_ae_geant_a_sid: Optional[str] = None
-    iptrunk_sideB_ae_members: Optional[list] = None
-    iptrunk_sideB_ae_members_description: Optional[list] = None
+    iptrunk_sideB_ae_members: list[str] = Field(default_factory=list)
+    iptrunk_sideB_ae_members_description: list[str] = Field(default_factory=list)
 
 
 class IptrunkBlockProvisioning(IptrunkBlockInactive,
diff --git a/gso/products/product_blocks/site.py b/gso/products/product_blocks/site.py
new file mode 100644
index 0000000000000000000000000000000000000000..28594041f0df562d4d10c4b93ab846af1bd89139
--- /dev/null
+++ b/gso/products/product_blocks/site.py
@@ -0,0 +1,51 @@
+from typing import Optional
+
+from orchestrator.domain.base import ProductBlockModel
+from orchestrator.types import SubscriptionLifecycle, strEnum
+
+
+class SiteTier(strEnum):
+    tier1 = 1
+    tier2 = 2
+    tier3 = 3
+    tier4 = 4
+
+
+class SiteBlockInactive(ProductBlockModel,
+                        lifecycle=[SubscriptionLifecycle.INITIAL],
+                        product_block_name="SiteBlock"):
+    site_name: Optional[str] = None
+    site_city: Optional[str] = None
+    site_country: Optional[str] = None
+    site_country_code: Optional[str] = None
+    site_latitude: Optional[float] = None
+    site_longitude: Optional[float] = None
+    site_internal_id: Optional[int] = None
+    site_bgp_community_id: Optional[int] = None
+    site_tier: Optional[SiteTier] = None
+
+
+class SiteBlockProvisioning(SiteBlockInactive,
+                            lifecycle=[SubscriptionLifecycle.PROVISIONING]):
+    site_name: Optional[str] = None
+    site_city: Optional[str] = None
+    site_country: Optional[str] = None
+    site_country_code: Optional[str] = None
+    site_latitude: Optional[float] = None
+    site_longitude: Optional[float] = None
+    site_internal_id: Optional[int] = None
+    site_bgp_community_id: Optional[int] = None
+    site_tier: Optional[SiteTier] = None
+
+
+class SiteBlock(SiteBlockProvisioning,
+                lifecycle=[SubscriptionLifecycle.ACTIVE]):
+    site_name: str
+    site_city: str
+    site_country: str
+    site_country_code: str
+    site_latitude: float
+    site_longitude: float
+    site_internal_id: int
+    site_bgp_community_id: int
+    site_tier: SiteTier
diff --git a/gso/products/product_types/device.py b/gso/products/product_types/device.py
index e79762c12f9fae68b409955b9e4a5a49e08c75dc..f2ecb3d94297f79ca73c0571d4a8a503d54d0502 100644
--- a/gso/products/product_types/device.py
+++ b/gso/products/product_types/device.py
@@ -10,25 +10,17 @@ class DeviceType(strEnum):
     switch = "switch"
 
 
-class DeviceVendor(strEnum):
-    Juniper = "Juniper"
-    Newvendor = "Newvendor"
-
-
 class DeviceInactive(SubscriptionModel, is_base=True):
     device_type: DeviceType
-    device_vendor: DeviceVendor
     device: DeviceBlockInactive
 
 
 class DeviceProvisioning(DeviceInactive,
                          lifecycle=[SubscriptionLifecycle.PROVISIONING]):
     device_type: DeviceType
-    device_vendor: DeviceVendor
     device: DeviceBlockProvisioning
 
 
 class Device(DeviceProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
     device_type: DeviceType
-    device_vendor: DeviceVendor
     device: DeviceBlock
diff --git a/gso/products/product_types/site.py b/gso/products/product_types/site.py
new file mode 100644
index 0000000000000000000000000000000000000000..8c3379c917812600e875243938645010a386ea42
--- /dev/null
+++ b/gso/products/product_types/site.py
@@ -0,0 +1,18 @@
+from orchestrator.domain.base import SubscriptionModel
+from orchestrator.types import SubscriptionLifecycle
+
+from gso.products.product_blocks.site \
+    import SiteBlock, SiteBlockInactive, SiteBlockProvisioning
+
+
+class SiteInactive(SubscriptionModel, is_base=True):
+    site: SiteBlockInactive
+
+
+class SiteProvisioning(SiteInactive,
+                       lifecycle=[SubscriptionLifecycle.PROVISIONING]):
+    site: SiteBlockProvisioning
+
+
+class Site(SiteProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
+    site: SiteBlock
diff --git a/gso/workflows/__init__.py b/gso/workflows/__init__.py
index 1ba2f18de70941af6c1fe471b8fe5d932280d8df..268bada22e4b28b76ffc3e1371b1e23d2a8c2c47 100644
--- a/gso/workflows/__init__.py
+++ b/gso/workflows/__init__.py
@@ -5,3 +5,6 @@ LazyWorkflowInstance("gso.workflows.device.terminate_device",
                      "terminate_device")
 LazyWorkflowInstance("gso.workflows.device.get_facts", "get_facts")
 LazyWorkflowInstance("gso.workflows.iptrunk.create_iptrunk", "create_iptrunk")
+LazyWorkflowInstance("gso.workflows.iptrunk.terminate_iptrunk",
+                     "terminate_iptrunk")
+LazyWorkflowInstance("gso.workflows.site.create_site", "create_site")
diff --git a/gso/workflows/device/create_device.py b/gso/workflows/device/create_device.py
index c59c2866b679520fbd91e227ac829136bc0408c2..91b4374f14098227d74aba592386163f7d1a79b7 100644
--- a/gso/workflows/device/create_device.py
+++ b/gso/workflows/device/create_device.py
@@ -9,12 +9,35 @@ from orchestrator.workflow import done, init, step, workflow
 from orchestrator.workflows.steps import resync, set_status
 from orchestrator.workflows.steps import store_process_subscription
 from orchestrator.workflows.utils import wrap_create_initial_input_form
-
-from gso.products.product_types.device import DeviceVendor, DeviceInactive, \
-    DeviceProvisioning
-from gso.services import provisioning_proxy
-from gso.services.provisioning_proxy import confirm_pp_results, \
-    await_pp_results
+from gso.products.product_types import device
+from gso.products.product_blocks import device as device_pb
+from orchestrator.db.models import ProductTable, SubscriptionTable
+from orchestrator.forms.validators import Choice, choice_list
+from gso.products.product_types.site import Site
+# from gso.services import ipam, provisioning_proxy
+
+
+def site_selector() -> list:
+    site_subscriptions = {}
+    for site_id, site_description in (
+        SubscriptionTable.query.join(ProductTable)
+        .filter(
+            ProductTable.product_type == "Site",
+            SubscriptionTable.status == "active",
+        )
+        .with_entities(SubscriptionTable.subscription_id,
+                       SubscriptionTable.description)
+        .all()
+    ):
+        site_subscriptions[str(site_id)] = site_description
+
+    return choice_list(
+        Choice("site_selection",
+               zip(site_subscriptions.keys(),
+                   site_subscriptions.items())),  # type:ignore
+        min_items=1,
+        max_items=1,
+    )
 
 
 def initial_input_form_generator(product_name: str) -> FormGenerator:
@@ -22,10 +45,12 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
         class Config:
             title = product_name
 
-        fqdn: str
+        device_site: site_selector()
+        hostname: str
         ts_address: ipaddress.IPv4Address
         ts_port: int
-        device_vendor: DeviceVendor
+        device_vendor: device_pb.DeviceVendor
+        device_role: device_pb.DeviceRole
 
     user_input = yield CreateDeviceForm
 
@@ -48,78 +73,128 @@ def get_info_from_ipam(subscription: DeviceInactive) -> State:
     # subscription.device.lo_ipv4_address = lo.v4
     # subscription.device.lo_ipv6_address = lo.v6
     # TODO: get info about how these should be generated
-    subscription.device.lo_ipv4_address = '10.10.10.10'
-    subscription.device.lo_ipv6_address = 'fc00:798:10::10'
-    subscription.device.lo_iso_address = '49.51e5.0001.0620.4009.6047.00'
-    subscription.device.si_ipv4_network = '192.168.0.0/31'
-    subscription.device.ias_lt_ipv4_network = '192.168.1.0/31'
-    subscription.device.ias_lt_ipv6_network = 'fc00:798:1::150/126'
-
-    return {'subscription': subscription}
-
-
-@step('Get information about SNMP')
-def get_snmp_info(subscription: DeviceInactive) -> State:
-    country = 'Spain'
-    city = 'Barcelona'
-    country_code = 'ES'
-    latitude = '41.3743'
-    longitude = '2.1328'
-    subscription.device.site_country = country
-    subscription.device.site_city = city
-    subscription.device.site_country_code = country_code
-    subscription.device.site_latitude = latitude
-    subscription.device.site_longitude = longitude
-    subscription.device.snmp_location = (
-        f'{city.upper()},{country.upper()}[{latitude},{longitude}]'
-    )
-
-    return {'subscription': subscription}
+    subscription.device.device_lo_ipv4_address = ipaddress.ip_address('10.10.10.10')
+    subscription.device.device_lo_ipv6_address = ipaddress.ip_address('fc00:798:10::10')
+    subscription.device.device_lo_iso_address \
+        = "49.51e5.0001.0620.4009.6047.00"
+    subscription.device.device_si_ipv4_network = "192.168.0.0/31"
+    subscription.device.device_ias_lt_ipv4_network = "192.168.1.0/31"
+    subscription.device.device_ias_lt_ipv6_network = "fc00:798:1::150/126"
+    return {"subscription": subscription}
 
 
 @step('Initialize subscription')
 def initialize_subscription(
-        subscription: DeviceInactive,
-        fqdn: str,
-        ts_address: ipaddress.IPv4Address,
-        ts_port: str,
-        device_vendor: DeviceVendor
+    subscription: device.DeviceInactive,
+    hostname: str,
+    ts_address: ipaddress.IPv4Address,
+    ts_port: str,
+    device_vendor: device_pb.DeviceVendor,
+    device_site: str,
+    device_role: device_pb.DeviceRole
 ) -> State:
-    subscription.device.fqdn = fqdn
-    subscription.device.ts_address = str(ts_address)
-    subscription.device.ts_port = str(ts_port)
-    subscription.device_vendor = device_vendor
-    subscription.description = f'Device {fqdn} ' \
-                               f'({subscription.device_type})'
-    subscription = DeviceProvisioning.from_other_lifecycle(
+    subscription.device.device_ts_address = str(ts_address)
+    subscription.device.device_ts_port = str(ts_port)
+    subscription.device.device_vendor = device_vendor
+    subscription.device.device_site \
+        = Site.from_subscription(device_site[0]).site
+    fqdn = str(hostname + "." +
+               subscription.device.device_site.site_name.lower() + "." +
+               subscription.device.device_site.site_country_code.lower() +
+               ".geant.net")
+    subscription.device.device_fqdn = fqdn
+    subscription.device.device_role = device_role
+    subscription.description = f"Device {fqdn} type \
+                                ({subscription.device_type})"
+    subscription = device.DeviceProvisioning.from_other_lifecycle(
         subscription, SubscriptionLifecycle.PROVISIONING
     )
 
-    return {'subscription': subscription}
-
-
-@step('Provision device [DRY RUN]')
-def provision_device_dry(subscription: DeviceProvisioning,
-                         process_id: UUIDstr) -> State:
-    provisioning_proxy.provision_node(
-        subscription,
-        process_id
-    )
+    return {"subscription": subscription, "fqdn": fqdn}
 
-    return {'subscription': subscription}
-
-
-@step('Provision device [FOR REAL]')
-def provision_device_real(subscription: DeviceProvisioning,
-                          process_id: UUIDstr) -> State:
-    provisioning_proxy.provision_node(
-        subscription,
-        process_id,
-        False  # No dry run this time, run it for real
-    )
-
-    return {'subscription': subscription}
 
+@step("Provision device [DRY RUN]")
+def provision_device_dry(
+    subscription: device.DeviceProvisioning
+) -> State:
+     import ansible_runner
+    
+     snmp_location = subscription.device.device_site.site_country_code 
+     r = ansible_runner.run(
+         private_data_dir="/opt/geant-gap-ansible",
+         playbook="base_config.yaml",
+         inventory=subscription.device.device_fqdn,
+         extravars={
+             "lo_ipv4_address": str(subscription.device.device_lo_ipv4_address),
+             "lo_ipv6_address": str(subscription.device.device_lo_ipv6_address),
+             "lo_iso_address": subscription.device.device_lo_iso_address,
+             "snmp_location": snmp_location,
+             "si_ipv4_network": str(subscription.device.device_si_ipv4_network),
+             "lt_ipv4_network": str(subscription.device.device_ias_lt_ipv4_network),
+             "lt_ipv6_network": str(subscription.device.device_ias_lt_ipv6_network),
+             "site_country_code": subscription.device.device_site.site_country_code,
+             "verb": "deploy",
+         },
+     )
+     out = r.stdout.read()
+     out_splitted = out.splitlines()
+    # # if r.rc != 0:
+    # #    raise ValueError("Ansible has failed")
+     return {"dry_run_output": out_splitted, "return_code": r.rc}
+    # provisioning_proxy.provision_node(
+    #     node_subscription_params=subscription,
+    #     dry_run=True)
+    #  TODO: figure out what to return when we are suspending & waiting
+    #        for the provisioning-proxy to call back
+    #return {"return_code": 0}
+
+
+@inputstep("Confirm step", assignee="CHANGES")
+def confirm_step() -> FormGenerator:
+    class ConfirmForm(FormPage):
+        confirm: Accept
+
+    user_input = yield ConfirmForm
+
+    return {"confirm": user_input.confirm}
+
+
+@step("Provision device [FOR REAL]")
+def provision_device_real(
+    subscription: device.DeviceProvisioning
+) -> State:
+     import ansible_runner
+
+     snmp_location = subscription.device.device_site.site_country_code
+     r = ansible_runner.run(
+         private_data_dir="/opt/geant-gap-ansible",
+         playbook="base_config.yaml",
+         inventory=subscription.device.device_fqdn,
+         extravars={
+             "lo_ipv4_address": str(subscription.device.device_lo_ipv4_address),
+             "lo_ipv6_address": str(subscription.device.device_lo_ipv6_address),
+             "lo_iso_address": subscription.device.device_lo_iso_address,
+             "snmp_location": snmp_location,
+             "si_ipv4_network": str(subscription.device.device_si_ipv4_network),
+             "lt_ipv4_network": str(subscription.device.device_ias_lt_ipv4_network),
+             "lt_ipv6_network": str(subscription.device.device_ias_lt_ipv6_network),
+             "site_country_code": subscription.device.device_site.site_country_code,
+             "verb": "deploy",
+             "dryrun": "False",
+             "commit_comment": "Deployed with WFO and Ansible",
+         },
+     )
+     out = r.stdout.read()
+     out_splitted = out.splitlines()
+    # # if r.rc != 0:
+    # #    raise ValueError("Ansible has failed")
+     return {"dry_run_output": out_splitted, "return_code": r.rc}
+    # provisioning_proxy.provision_node(
+    #     node_subscription_params=subscription,
+    #     dry_run=True)
+    #  TODO: figure out what to return when we are suspending & waiting
+    #        for the provisioning-proxy to call back
+    #return {"return_code": 0}
 
 @workflow(
     'Create device',
diff --git a/gso/workflows/device/terminate_device.py b/gso/workflows/device/terminate_device.py
index 686128a19e0464a0d579b1370c21af3a746ba17b..d5de3c3d17f22d220da5001241f306e283d94d10 100644
--- a/gso/workflows/device/terminate_device.py
+++ b/gso/workflows/device/terminate_device.py
@@ -41,7 +41,7 @@ def deprovision_user(subscription: Device) -> None:
                        initial_input_form_generator),
     target=Target.TERMINATE,
 )
-def terminate_user():
+def terminate_device():
     return (
         init
         >> store_process_subscription(Target.TERMINATE)
diff --git a/gso/workflows/iptrunk/create_iptrunk.py b/gso/workflows/iptrunk/create_iptrunk.py
index e4205e111c699e8fbf3992a02eb4732b628e3cc8..2b485a9b18f8444d528684069514c68eac7a4965 100644
--- a/gso/workflows/iptrunk/create_iptrunk.py
+++ b/gso/workflows/iptrunk/create_iptrunk.py
@@ -1,4 +1,4 @@
-# import ipaddress
+import ipaddress
 from uuid import uuid4
 
 from orchestrator.forms import FormPage
@@ -19,6 +19,8 @@ from gso.products.product_types.device import Device
 # from gso.products.product_types import device
 from orchestrator.db.models import ProductTable, SubscriptionTable
 from orchestrator.forms.validators import Choice, choice_list
+from orchestrator.utils.json import json_dumps
+
 
 
 def device_selector(choice_value: str) -> list:
@@ -91,8 +93,8 @@ def create_subscription(product: UUIDstr) -> State:
 @step("Get information from IPAM ")
 def get_info_from_ipam(subscription: iptrunk.IptrunkInactive) -> State:
     # TODO: get info about how these should be generated
-    subscription.iptrunk.iptrunk_ipv4_network = "192.168.1.0/31"
-    subscription.iptrunk.iptrunk_ipv6_network = "fc00:798:1::150/126"
+    subscription.iptrunk.iptrunk_ipv4_network = ipaddress.ip_network('192.168.255.0/31')
+    subscription.iptrunk.iptrunk_ipv6_network = ipaddress.ip_network('fc00:798:255::150/126')
     return {"subscription": subscription}
 
 
@@ -153,35 +155,30 @@ def initialize_subscription(
 def provision_iptrunk_dry(
     subscription: iptrunk.IptrunkProvisioning,
 ) -> State:
-    # import ansible_runner
-    #
-    # r = ansible_runner.run(
-    #     private_data_dir="/opt/geant-gap-ansible",
-    #     playbook="base_config.yaml",
-    #     inventory=subscription.iptrunk.fqdn,
-    #     extravars={
-    #         "lo_ipv4_address": str(subscription.iptrunk.lo_ipv4_address),
-    #         "lo_ipv6_address": str(subscription.iptrunk.lo_ipv6_address),
-    #         "lo_iso_address": subscription.iptrunk.lo_iso_address,
-    #         "snmp_location": subscription.iptrunk.snmp_location,
-    #         "si_ipv4_network": str(subscription.iptrunk.si_ipv4_network),
-    #         "lt_ipv4_network": str(subscription.iptrunk.ias_lt_ipv4_network),
-    #         "lt_ipv6_network": str(subscription.iptrunk.ias_lt_ipv6_network),
-    #         "site_country_code": subscription.iptrunk.site_country_code,
-    #         "verb": "deploy",
-    #     },
-    # )
-    # out = r.stdout.read()
-    # out_splitted = out.splitlines()
+    import ansible_runner
+    
+    r = ansible_runner.run(
+        private_data_dir="/opt/geant-gap-ansible",
+        playbook="iptrunks.yaml",
+        inventory= str(subscription.iptrunk.iptrunk_sideA_node.device_fqdn +"\n"+
+                    subscription.iptrunk.iptrunk_sideB_node.device_fqdn+"\n"),
+        extravars={
+            "verb": "compile",
+            "wfo_trunk_json":json_dumps(subscription),
+            "config_object":"trunk_interface",
+        },
+    )
+    out = r.stdout.read()
+    out_splitted = out.splitlines()
     # # if r.rc != 0:
     # #    raise ValueError("Ansible has failed")
-    # return {"dry_run_output": out_splitted, "return_code": r.rc}
+    return {"dry_run_output": out_splitted, "return_code": r.rc}
     #  provisioning_proxy.provision_node(
     #      node_subscription_params=subscription,
     #      dry_run=True)
     #   TODO: figure out what to return when we are suspending & waiting
     #       for the provisioning-proxy to call back
-    return {"return_code": 0}
+    #return {"return_code": 0}
 
 
 @inputstep("Confirm step", assignee="CHANGES")
diff --git a/gso/workflows/iptrunk/terminate_iptrunk.py b/gso/workflows/iptrunk/terminate_iptrunk.py
new file mode 100644
index 0000000000000000000000000000000000000000..ddb65eacfd800868a76f2a5fe5b4f0a472035d42
--- /dev/null
+++ b/gso/workflows/iptrunk/terminate_iptrunk.py
@@ -0,0 +1,53 @@
+from orchestrator.forms import FormPage
+from orchestrator.forms.validators import Label
+from orchestrator.targets import Target
+from orchestrator.types import InputForm, SubscriptionLifecycle, UUIDstr
+from orchestrator.workflow import done, init, step, workflow
+from orchestrator.workflows.steps import (
+    resync,
+    set_status,
+    store_process_subscription,
+    unsync,
+)
+from orchestrator.workflows.utils import wrap_modify_initial_input_form
+
+from gso.products.product_types.iptrunk import Iptrunk
+
+
+def initial_input_form_generator(subscription_id: UUIDstr) -> InputForm:
+    subscription = Iptrunk.from_subscription(subscription_id)
+
+    class TerminateForm(FormPage):
+        are_you_sure: Label = (
+            f"Are you sure you want to remove {subscription.description}?"
+        )  # type:ignore
+
+    return TerminateForm
+
+
+def _deprovision_in_user_management_system(fqdn: str) -> str:
+    pass
+
+
+@step("Deprovision Iptrunk")
+def deprovision_iptrunk(subscription: Iptrunk) -> None:
+    #    _deprovision_in_user_management_system(subscription.user.user_id)
+    pass
+
+
+@workflow(
+    "Terminate IPtrunk",
+    initial_input_form=wrap_modify_initial_input_form(
+                       initial_input_form_generator),
+    target=Target.TERMINATE,
+)
+def terminate_iptrunk():
+    return (
+        init
+        >> store_process_subscription(Target.TERMINATE)
+        >> unsync
+        >> deprovision_iptrunk
+        >> set_status(SubscriptionLifecycle.TERMINATED)
+        >> resync
+        >> done
+    )
diff --git a/gso/workflows/site/create_site.py b/gso/workflows/site/create_site.py
new file mode 100644
index 0000000000000000000000000000000000000000..a1642ef75e2f583dabeb153b305c17e51d3eff19
--- /dev/null
+++ b/gso/workflows/site/create_site.py
@@ -0,0 +1,94 @@
+from uuid import uuid4
+
+from orchestrator.forms import FormPage
+from orchestrator.targets import Target
+# from orchestrator.workflow import inputstep
+# from orchestrator.forms.validators import Accept
+from orchestrator.types import FormGenerator, State
+from orchestrator.types import SubscriptionLifecycle, UUIDstr
+from orchestrator.workflow import done, init, step, workflow
+from orchestrator.workflows.steps import resync, set_status
+from orchestrator.workflows.steps import store_process_subscription
+from orchestrator.workflows.utils import wrap_create_initial_input_form
+from gso.products.product_types import site
+from gso.products.product_blocks import site as site_pb
+
+
+def initial_input_form_generator(product_name: str) -> FormGenerator:
+    class CreateSiteForm(FormPage):
+        class Config:
+            title = product_name
+
+        site_name: str
+        site_city: str
+        site_country: str
+        site_country_code: str
+        site_latitude: float
+        site_longitude: float
+        site_bgp_community_id: int
+        site_internal_id: int
+        site_tier: site_pb.SiteTier
+
+    user_input = yield CreateSiteForm
+
+    return user_input.dict()
+
+
+@step("Create subscription")
+def create_subscription(product: UUIDstr) -> State:
+    subscription = site.SiteInactive.from_product_id(product, uuid4())
+
+    return {
+        "subscription": subscription,
+        "subscription_id": subscription.subscription_id,
+    }
+
+
+@step("Initialize subscription")
+def initialize_subscription(
+        subscription: site.SiteInactive,
+        site_name: str,
+        site_city: str,
+        site_country: str,
+        site_country_code: str,
+        site_latitude: float,
+        site_longitude: float,
+        site_bgp_community_id: int,
+        site_internal_id: int,
+        site_tier: site_pb.SiteTier
+) -> State:
+    subscription.site.site_name = site_name
+    subscription.site.site_city = site_city
+    subscription.site.site_country = site_country
+    subscription.site.site_country_code = site_country_code
+    subscription.site.site_latitude = site_longitude
+    subscription.site.site_longitude = site_latitude
+    subscription.site.site_bgp_community_id = site_bgp_community_id
+    subscription.site.site_internal_id = site_internal_id
+    subscription.site.site_tier = site_tier
+
+    subscription.description = f"Site {site_name}"
+
+    subscription = site.SiteProvisioning.from_other_lifecycle(
+        subscription, SubscriptionLifecycle.PROVISIONING
+    )
+
+    return {"subscription": subscription}
+
+
+@workflow(
+    "Create Site",
+    initial_input_form=wrap_create_initial_input_form(
+                       initial_input_form_generator),
+    target=Target.CREATE,
+)
+def create_site():
+    return (
+        init
+        >> create_subscription
+        >> store_process_subscription(Target.CREATE)
+        >> initialize_subscription
+        >> set_status(SubscriptionLifecycle.ACTIVE)
+        >> resync
+        >> done
+    )