diff --git a/master/bt5/slapos_cloud/PropertySheetTemplateItem/portal_property_sheets/SlaposCapacity/free_capacity_quantity_property.xml b/master/bt5/slapos_cloud/PropertySheetTemplateItem/portal_property_sheets/SlaposCapacity/free_capacity_quantity_property.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7f6f33effc64abe15dd210c2f4cf53805bda858f
--- /dev/null
+++ b/master/bt5/slapos_cloud/PropertySheetTemplateItem/portal_property_sheets/SlaposCapacity/free_capacity_quantity_property.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+ -
+ categories
+
+
+ elementary_type/int
+
+
+
+ -
+ description
+
+
+
+
+ -
+ id
+ free_capacity_quantity_property
+
+ -
+ portal_type
+ Standard Property
+
+ -
+ property_default
+ python: 0
+
+
+
+
+
diff --git a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputerNetwork_getSoftwareReleaseAllocableState.py b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputerNetwork_getSoftwareReleaseAllocableState.py
deleted file mode 100644
index 3e05970f7a99b0bcd6f6f584d7879cd0d149bfce..0000000000000000000000000000000000000000
--- a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputerNetwork_getSoftwareReleaseAllocableState.py
+++ /dev/null
@@ -1,27 +0,0 @@
-network = context
-
-# XXX - The use of current authenticated person will return always 'Close' if
-# the person is administrator (such as 'zope' user) but not the owner of computer
-#
-# person = context.ERP5Site_getAuthenticatedMemberPersonValue()
-allocation_state = 'Close'
-software_type = ''
-filter_kw = {}
-
-for computer in network.getSubordinationRelatedValueList():
- person = computer.getSourceAdministrationValue()
- filter_kw['computer_guid']=computer.getReference()
- try:
- isAllowed = person.Person_restrictMethodAsShadowUser(shadow_document=person,
- callable_object=person.Person_findPartition,
- argument_list=[software_release_url, software_type, 'Software Instance',
- filter_kw],
- argument_dict={'test_mode': True}
- )
- if isAllowed:
- allocation_state = 'Open'
- break
- except:
- continue
-
-return allocation_state
diff --git a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputerNetwork_getSoftwareReleaseFreeAmount.py b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputerNetwork_getSoftwareReleaseFreeAmount.py
new file mode 100644
index 0000000000000000000000000000000000000000..3f2d5355ddb7272743b4bc742863c8ff39dccf84
--- /dev/null
+++ b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputerNetwork_getSoftwareReleaseFreeAmount.py
@@ -0,0 +1,12 @@
+network = context
+portal = context.getPortalObject()
+software_release = context.REQUEST.get('here')
+if software_release is None or software_release.portal_type != 'Software Release':
+ software_release = portal.portal_catalog.getResultValue(
+ portal_type='Software Release',
+ url_string=software_release_url,
+ )
+
+return sum([computer.Computer_getSoftwareReleaseFreePartitionCount(software_release.getUrlString())
+ for computer in network.getSubordinationRelatedValueList()
+ if computer.getAllocationScope() in ['open/public']])
diff --git a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputerNetwork_getSoftwareReleaseFreeAmount.xml b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputerNetwork_getSoftwareReleaseFreeAmount.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9d854f007a005679097c4c58dea8148717a25441
--- /dev/null
+++ b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputerNetwork_getSoftwareReleaseFreeAmount.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+ -
+ Script_magic
+ 3
+
+ -
+ _bind_names
+
+
+
+
+ -
+ _params
+ software_release_url=None, debug=False
+
+ -
+ id
+ ComputerNetwork_getSoftwareReleaseFreeAmount
+
+
+
+
+
diff --git a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Computer_checkAndUpdateCapacityScope.py b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Computer_checkAndUpdateCapacityScope.py
index e05d2501a904010524ec786f40ec0183b48311d5..10e3d61abdde4921752d8727be7fad0b021d8d99 100644
--- a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Computer_checkAndUpdateCapacityScope.py
+++ b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Computer_checkAndUpdateCapacityScope.py
@@ -10,6 +10,7 @@ if computer.getAllocationScope() not in ['open/public', 'open/subscription']:
return
can_allocate = True
+free_capacity = None
comment = ''
# First and simple way to see if computer is dead
@@ -59,43 +60,20 @@ if can_allocate:
software_release_capacity_dict = {}
consumed_capacity = 0
- def getSoftwareReleaseCapacity(instance):
+ def getSoftwareInstanceCapacity(instance):
software_release_url = instance.getUrlString()
software_type = instance.getSourceReference()
if software_release_url in software_release_capacity_dict:
return software_release_capacity_dict[software_release_url]
- software_release = portal.portal_catalog.getResultValue(
- portal_type='Software Release',
- url_string={'query': software_release_url, 'key': 'ExactMatch'})
-
- software_release_capacity = None
- if software_release is not None:
- # Search for Software Product Individual Variation with same reference
- software_product = software_release.getAggregateValue()
- if software_product is not None:
- for variation in software_product.searchFolder(
- portal_type="Software Product Individual Variation",
- reference=software_type):
- software_release_capacity = variation.getCapacityQuantity(None)
- if software_release_capacity is not None:
- break
-
- if software_release_capacity is None:
- software_release_capacity = software_product.getCapacityQuantity(None)
-
- if software_release_capacity is None:
- software_release_capacity = software_release.getCapacityQuantity(1)
-
- if software_release_capacity is None:
- software_release_capacity = 1
-
+ software_release_capacity = instance.SoftwareInstance_getCapacity()
software_release_capacity_dict[software_release_url] = software_release_capacity
+
return software_release_capacity
if allocated_instance is not None:
- software_release_capacity = getSoftwareReleaseCapacity(allocated_instance)
- consumed_capacity += software_release_capacity
+ software_instance_capacity = getSoftwareInstanceCapacity(allocated_instance)
+ consumed_capacity += software_instance_capacity
if consumed_capacity >= computer_capacity_quantity:
can_allocate = False
comment = 'Computer capacity limit exceeded'
@@ -106,13 +84,15 @@ if can_allocate:
portal_type=['Software Instance', 'Slave Instance'],
validation_state='validated'):
- software_release_capacity = getSoftwareReleaseCapacity(instance.getObject())
- consumed_capacity += software_release_capacity
+ software_instance_capacity = getSoftwareInstanceCapacity(instance.getObject())
+ consumed_capacity += software_instance_capacity
if consumed_capacity >= computer_capacity_quantity:
can_allocate = False
comment = 'Computer capacity limit exceeded'
break
+ free_capacity = computer_capacity_quantity - consumed_capacity
+
# if can_allocate:
# result_list = portal.portal_catalog.portal_catalog(
# parent_uid=computer.getUid(),
@@ -123,15 +103,18 @@ if can_allocate:
# can_allocate = False
# comment = 'No free partition left'
-new_value = None
-if can_allocate:
- if computer.getCapacityScope() == 'close':
- new_value = 'open'
-else:
- if computer.getCapacityScope() == 'open':
- new_value = 'close'
-
-if new_value is not None:
- computer.edit(capacity_scope=new_value)
+modified_data = {}
+
+capacity_scope = 'open' if can_allocate else 'close'
+if computer.getCapacityScope() != capacity_scope:
+ modified_data['capacity_scope'] = capacity_scope
+
+if free_capacity is None or free_capacity < 0:
+ free_capacity = 0
+if computer.getFreeCapacityQuantity() != free_capacity:
+ modified_data['free_capacity_quantity'] = free_capacity
+
+if len(modified_data) > 0:
+ computer.edit(**modified_data)
if comment:
portal.portal_workflow.doActionFor(computer, 'edit_action', comment=comment)
diff --git a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Computer_getSoftwareReleaseFreePartitionCount.py b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Computer_getSoftwareReleaseFreePartitionCount.py
new file mode 100644
index 0000000000000000000000000000000000000000..0ab9af945574fa7e9ce9ac4a45e7c908a32b6a8d
--- /dev/null
+++ b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Computer_getSoftwareReleaseFreePartitionCount.py
@@ -0,0 +1,35 @@
+computer = context
+# XXX: Temporary?
+if computer.getAllocationScope() not in ['open/public']:
+ return 0
+
+portal = context.getPortalObject()
+software_release = context.REQUEST.get('here')
+if software_release is None or software_release.portal_type != 'Software Release':
+ software_release = portal.portal_catalog.getResultValue(
+ portal_type='Software Release',
+ url_string=software_release_url,
+ )
+
+software_release_capacity = software_release.SoftwareRelease_getCapacity()
+computer_free_capacity = computer.getFreeCapacityQuantity()
+
+computer_instance_capacity = computer_free_capacity // software_release_capacity
+
+# If computer capacity is 0, it means infinite
+# In this case, only the partition count will be counted
+if computer.getCapacityQuantity() == 0:
+ computer_instance_capacity = float('inf')
+
+computer_free_partition_count = portal.portal_catalog.countResults(
+ parent_uid=computer.getUid(),
+ software_release_url=software_release.getUrlString(),
+ free_for_request=1,
+)[0][0]
+
+free_instance_count = min(
+ computer_free_partition_count,
+ computer_instance_capacity
+)
+
+return free_instance_count
diff --git a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Computer_getSoftwareReleaseFreePartitionCount.xml b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Computer_getSoftwareReleaseFreePartitionCount.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e58406d17c3f3de033ca502a60e67c16a2c389c6
--- /dev/null
+++ b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Computer_getSoftwareReleaseFreePartitionCount.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+ -
+ Script_magic
+ 3
+
+ -
+ _bind_names
+
+
+
+
+ -
+ _params
+ software_release_url=None
+
+ -
+ id
+ Computer_getSoftwareReleaseFreePartitionCount
+
+
+
+
+
diff --git a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Computer_viewCapacity.xml b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Computer_viewCapacity.xml
index 21766617fa05048b26552fd68147b0ccc187f677..6376e136d49fbdcee4efa22cdbbbd306041815c9 100644
--- a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Computer_viewCapacity.xml
+++ b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Computer_viewCapacity.xml
@@ -96,6 +96,7 @@
my_title
my_capacity_quantity
my_capacity_scope_translated_title
+ my_free_capacity_quantity
diff --git a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Computer_viewCapacity/my_free_capacity_quantity.xml b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Computer_viewCapacity/my_free_capacity_quantity.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a5a7d259d472d14ee8cc4b276f32805ae58e8b5f
--- /dev/null
+++ b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/Computer_viewCapacity/my_free_capacity_quantity.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+ -
+ delegated_list
+
+
+ editable
+ title
+
+
+
+ -
+ id
+ my_free_capacity_quantity
+
+ -
+ message_values
+
+
+
-
+ external_validator_failed
+ The input failed the external validator.
+
+
+
+
+ -
+ overrides
+
+
+
-
+ field_id
+
+
+ -
+ form_id
+
+
+ -
+ target
+
+
+
+
+
+ -
+ tales
+
+
+
-
+ field_id
+
+
+ -
+ form_id
+
+
+ -
+ target
+
+
+
+
+
+ -
+ values
+
+
+
-
+ editable
+ 0
+
+ -
+ field_id
+ my_integer_value
+
+ -
+ form_id
+ Base_viewFieldLibrary
+
+ -
+ target
+ Click to edit the target
+
+ -
+ title
+ Free capacity
+
+
+
+
+
+
+
+
diff --git a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareInstance_getCapacity.py b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareInstance_getCapacity.py
new file mode 100644
index 0000000000000000000000000000000000000000..328d2293cabef11361eb0f2ace19752ecd6c8c20
--- /dev/null
+++ b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareInstance_getCapacity.py
@@ -0,0 +1,30 @@
+software_instance = context
+portal = context.getPortalObject()
+
+software_type = software_instance.getSourceReference()
+software_release_url = software_instance.getUrlString()
+software_release = portal.portal_catalog.getResultValue(
+ portal_type='Software Release',
+ url_string={'query': software_release_url, 'key': 'ExactMatch'})
+
+software_instance_capacity = None
+if software_release is not None:
+ software_product = software_release.getAggregateValue()
+
+ # Search for Software Product Individual Variation with same reference
+ software_product = software_release.getAggregateValue()
+ if software_product is not None:
+ for variation in software_product.searchFolder(
+ portal_type="Software Product Individual Variation",
+ reference=software_type):
+ software_instance_capacity = variation.getCapacityQuantity(None)
+ if software_instance_capacity is not None:
+ break
+
+ if software_instance_capacity is None:
+ software_instance_capacity = software_release.SoftwareRelease_getCapacity()
+
+if software_instance_capacity is None:
+ software_instance_capacity = 1
+
+return software_instance_capacity
diff --git a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputerNetwork_getSoftwareReleaseAllocableState.xml b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareInstance_getCapacity.xml
similarity index 92%
rename from master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputerNetwork_getSoftwareReleaseAllocableState.xml
rename to master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareInstance_getCapacity.xml
index ec658c3e65d38838070ff4262971a6ed149c300e..bfe09a03cd226d174b070b1ef0afb4a9963cac0d 100644
--- a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/ComputerNetwork_getSoftwareReleaseAllocableState.xml
+++ b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareInstance_getCapacity.xml
@@ -50,11 +50,11 @@
-
_params
- software_release_url
+
-
id
- ComputerNetwork_getSoftwareReleaseAllocableState
+ SoftwareInstance_getCapacity
diff --git a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_getCapacity.py b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_getCapacity.py
new file mode 100644
index 0000000000000000000000000000000000000000..b3efb03fa69100c3f700b759129e1566ed9d4db1
--- /dev/null
+++ b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_getCapacity.py
@@ -0,0 +1,9 @@
+software_release = context
+
+software_product = software_release.getAggregateValue()
+software_release_capacity = software_product.getCapacityQuantity(None)
+
+if software_release_capacity is None:
+ software_release_capacity = software_release.getCapacityQuantity(1)
+
+return software_release_capacity
diff --git a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_getCapacity.xml b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_getCapacity.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dc26d067035dec490ee8bc603e96d05ee0b1ae4f
--- /dev/null
+++ b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_getCapacity.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+ -
+ Script_magic
+ 3
+
+ -
+ _bind_names
+
+
+
+
+ -
+ _params
+
+
+ -
+ id
+ SoftwareRelease_getCapacity
+
+
+
+
+
diff --git a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableComputerList.xml b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableComputerList.xml
index 89f43265f5fa42dbb329c8404bf061097268101b..7646b47d7409079c3aa060ddc65ed9c3f8698615 100644
--- a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableComputerList.xml
+++ b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableComputerList.xml
@@ -94,6 +94,7 @@
listbox_free_partition
listbox_amount
+ listbox_free_instance_partition_count
diff --git a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableComputerList/listbox.xml b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableComputerList/listbox.xml
index baecca81266b3db6c5dfa28d66f238244be90eea..b91e8c57b7f20b9075bb6efd6a6a281da108ecee 100644
--- a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableComputerList/listbox.xml
+++ b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableComputerList/listbox.xml
@@ -134,6 +134,10 @@
free_partition
Free Partition Count
+
+ free_instance_partition_count
+ Free Software Instance Count
+
allocation_scope_translated_title
Allocation Scope
diff --git a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableNetworkList/listbox_status.xml b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableComputerList/listbox_free_instance_partition_count.xml
similarity index 81%
rename from master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableNetworkList/listbox_status.xml
rename to master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableComputerList/listbox_free_instance_partition_count.xml
index ee38ba5fe73b3df66ce8f5146dbba0c5aa978bce..f5190cf2f45db7edda9310f5fd99b8cce802e31a 100644
--- a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableNetworkList/listbox_status.xml
+++ b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableComputerList/listbox_free_instance_partition_count.xml
@@ -11,7 +11,6 @@
default
- display_width
editable
title
@@ -19,7 +18,7 @@
-
id
- listbox_status
+ listbox_free_instance_partition_count
-
message_values
@@ -44,10 +43,6 @@
form_id
- -
- target
-
-
@@ -61,6 +56,10 @@
AAAAAAAAAAI=
+ -
+ editable
+
+
-
field_id
@@ -70,7 +69,7 @@
-
- target
+ title
@@ -84,29 +83,21 @@
default
- -
- display_width
- 20
-
-
editable
0
-
field_id
- my_string_field
+ my_integer_field
-
form_id
Base_viewFieldLibrary
- -
- target
- Click to edit the target
-
-
title
- Status
+ Free Instances Partitions
@@ -122,7 +113,7 @@
-
_text
- python: cell.ComputerNetwork_getSoftwareReleaseAllocableState(context.REQUEST.get(\'here\').getUrlString())
+ cell/Computer_getSoftwareReleaseFreePartitionCount
diff --git a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableNetworkList.xml b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableNetworkList.xml
index 95ece3a749ebb368481de8dda62b8e5e1acebea9..373b8e44af2b99c4f0f48c2c2136284ee3ce859e 100644
--- a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableNetworkList.xml
+++ b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableNetworkList.xml
@@ -59,7 +59,7 @@
listbox_amount
- listbox_status
+ listbox_free_instances_amount
diff --git a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableNetworkList/listbox.xml b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableNetworkList/listbox.xml
index 346b920adcec7aff156f91ca4309eb8ae6939d32..435b8483012f22255116ea473da8b27b269c818d 100644
--- a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableNetworkList/listbox.xml
+++ b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableNetworkList/listbox.xml
@@ -93,8 +93,8 @@
Instances Amount
- status
- Allocation Status
+ free_instances_amount
+ Free Instances Amount (on public computers)
diff --git a/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableNetworkList/listbox_free_instances_amount.xml b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableNetworkList/listbox_free_instances_amount.xml
new file mode 100644
index 0000000000000000000000000000000000000000..01f9b72a00920c1a54843d8b6a6b436c19a0c440
--- /dev/null
+++ b/master/bt5/slapos_cloud/SkinTemplateItem/portal_skins/slapos_cloud/SoftwareRelease_viewUsableNetworkList/listbox_free_instances_amount.xml
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+ -
+ delegated_list
+
+
+ default
+ editable
+ title
+
+
+
+ -
+ id
+ listbox_free_instances_amount
+
+ -
+ message_values
+
+
+
-
+ external_validator_failed
+ The input failed the external validator.
+
+
+
+
+ -
+ overrides
+
+
+
-
+ field_id
+
+
+ -
+ form_id
+
+
+
+
+
+ -
+ tales
+
+
+
-
+ default
+
+ AAAAAAAAAAI=
+
+
+ -
+ editable
+
+
+ -
+ field_id
+
+
+ -
+ form_id
+
+
+ -
+ title
+
+
+
+
+
+ -
+ values
+
+
+
-
+ default
+
+
+ -
+ editable
+ 0
+
+ -
+ field_id
+ my_integer_field
+
+ -
+ form_id
+ Base_viewFieldLibrary
+
+ -
+ title
+ Free Instances Amount
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+ _text
+ cell/ComputerNetwork_getSoftwareReleaseFreeAmount
+
+
+
+
+