Personal tools
Namespaces

Variants
Actions

OpenStack Projects For WHMCS

From ModulesGarden Wiki
(Difference between revisions)
Jump to: navigation, search
(Upgrade Guide)
(Tips)
 
(86 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
<meta name="keywords" content="<meta name="keywords" content="openstack projects for whmcs, openstack projects configuration, whmcs openstack projects management, whmcs openstack projects installation, whmcs openstack projects common problems, about whmcs openstack projects, whmcs openstack projects documentation, whmcs openstack projects faq, whmcs openstack projects help, whmcs openstack projects guide, whmcs openstack projects wiki, whmcs openstack projects tutorial, whmcs openstack projects tips, whmcs openstack projects wiki">
 
<meta name="keywords" content="<meta name="keywords" content="openstack projects for whmcs, openstack projects configuration, whmcs openstack projects management, whmcs openstack projects installation, whmcs openstack projects common problems, about whmcs openstack projects, whmcs openstack projects documentation, whmcs openstack projects faq, whmcs openstack projects help, whmcs openstack projects guide, whmcs openstack projects wiki, whmcs openstack projects tutorial, whmcs openstack projects tips, whmcs openstack projects wiki">
 
<meta name="description" content="ModulesGarden Wiki Contains All The Information You Need About The OpenStack Projects For WHMCS Module."></meta>
 
<meta name="description" content="ModulesGarden Wiki Contains All The Information You Need About The OpenStack Projects For WHMCS Module."></meta>
 
<h4 style="color: #ff0000; font-weight:bold; text-align:center;">Are you going to update your module to version 1.8.0?<br/>
 
Be sure to review our tips in "[[#Update_Instructions|Update Instructions]]" to prevent any potential issues</h4>
 
  
 
=About [https://www.modulesgarden.com/products/whmcs/openstack-projects OpenStack Projects For WHMCS]=
 
=About [https://www.modulesgarden.com/products/whmcs/openstack-projects OpenStack Projects For WHMCS]=
Line 28: Line 25:
 
{|
 
{|
 
|style="padding: 0px 0px 0px 30px;"|✔ View Scheduled Tasks
 
|style="padding: 0px 0px 0px 30px;"|✔ View Scheduled Tasks
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ View Block Storage Limits Usage Statistics
 
|}
 
|}
 
{|
 
{|
Line 54: Line 54:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 45px;"|✔ Define User Roles
+
|style="padding: 0px 0px 0px 45px;"|✔ Define Project User Roles
 
|}
 
|}
 
{|
 
{|
Line 91: Line 91:
 
{|
 
{|
 
|style="padding: 0px 0px 0px 45px;"|✔ Toggle Password Removal After Project Creation
 
|style="padding: 0px 0px 0px 45px;"|✔ Toggle Password Removal After Project Creation
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 45px;"|✔ Toggle Opening Management Panel In New Window
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 45px;"|✔ Select Block Storage Limits For Usage Statistics Widget
 
|}
 
|}
 
{|
 
{|
Line 159: Line 165:
 
{|
 
{|
 
|style="padding: 0px 0px 0px 30px;"|✔ View Project Servers
 
|style="padding: 0px 0px 0px 30px;"|✔ View Project Servers
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ View Block Storage Limits Usage Statistics
 
|}
 
|}
 
{|
 
{|
Line 178: Line 187:
 
*'''Configurable Options:'''
 
*'''Configurable Options:'''
 
{|
 
{|
|style="padding: 10px 0px 0px 30px;"|✔ Backup Gigabytes
+
|style="padding: 10px 0px 0px 30px;"|✔ Backups
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ Backups
+
|style="padding: 0px 0px 0px 30px;"|✔ Bandwidth Limit
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ Bandwidth Limit Rules - Max Egress (kbps)
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ Bandwidth Limit Rules - Max Egress Burst (kbps)
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ Bandwidth Limit Rules - Max Ingress (kbps)
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ Backundwidth Limit Rules - Max Ingress Burst (kbps)
 
|}
 
|}
 
{|
 
{|
 
|style="padding: 0px 0px 0px 30px;"|✔ Cores
 
|style="padding: 0px 0px 0px 30px;"|✔ Cores
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ Endpoint Group
 
|}
 
|}
 
{|
 
{|
Line 206: Line 230:
 
{|
 
{|
 
|style="padding: 0px 0px 0px 30px;"|✔ Health Monitor
 
|style="padding: 0px 0px 0px 30px;"|✔ Health Monitor
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ Ike Policy
 
|}
 
|}
 
{|
 
{|
Line 218: Line 245:
 
{|
 
{|
 
|style="padding: 0px 0px 0px 30px;"|✔ Instances
 
|style="padding: 0px 0px 0px 30px;"|✔ Instances
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ IPsec Policy
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ IPsec Site Connection
 
|}
 
|}
 
{|
 
{|
Line 235: Line 268:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ Network
+
|style="padding: 0px 0px 0px 30px;"|✔ Minimum Bandwidth
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ Per Volume Gigabytes
+
|style="padding: 0px 0px 0px 30px;"|✔ Minimum Bandwidth Rates Rules - Min Egress (kbps)
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ Pool
+
|style="padding: 0px 0px 0px 30px;"|✔ Minimum Bandwidth LimitRate Rules - Min Ingress (kbps)<
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ Port
+
|style="padding: 0px 0px 0px 30px;"|✔ Network
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ QoS Minimum Bandwidth Rates Rules
+
|style="padding: 0px 0px 0px 30px;"|✔ Per Volume Gigabytes
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ QoS Maximum Bandwidth Limit Rules
+
|style="padding: 0px 0px 0px 30px;"|✔ Pool
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ Port
 
|}
 
|}
 
{|
 
{|
Line 263: Line 299:
 
{|
 
{|
 
|style="padding: 0px 0px 0px 30px;"|✔ Security Group
 
|style="padding: 0px 0px 0px 30px;"|✔ Security Group
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ Security Group Device
 
|}
 
|}
 
{|
 
{|
Line 292: Line 331:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 10px 30px;"|✔ Volumes
+
|style="padding: 0px 0px 0px 30px;"|✔ Volumes
 +
|}
 +
{|
 +
|style="padding: 0px 0px 10px 30px;"|✔ VPN Service
 
|}
 
|}
  
Line 309: Line 351:
 
{|
 
{|
 
|style="padding: 0px 0px 0px 30px;"|✔ Multi-Language Support
 
|style="padding: 0px 0px 0px 30px;"|✔ Multi-Language Support
 +
|}
 +
{|
 +
|style="padding: 0px 0px 0px 30px;"|✔ Supports All Providers That Grant Access To OpenStack API On System Admin Level
 
|}
 
|}
 
{|
 
{|
Line 320: Line 365:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ Supports PHP 8.1 Back To PHP 7.4
+
|style="padding: 0px 0px 0px 30px;"|✔ PHP 8.2 Back To PHP 8.1
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ Supports WHMCS Metric Billing - Integration: CPU, Compute Instance Booting Time, Disk Device Read Bytes, Disk Device Read Requests, Disk Device Write Bytes, Disk Device Write Requests, Disk Ephemeral Size, Disk Root Size, Floating IP Addresses, IP Addresses, Load Balancers, Memory, Memory Usage, Network Incoming Bytes, Network Incoming Packets, Network Outgoing Bytes, Network Outgoing Packets, OS Images, VCPUs, Volume Size, Volumes Usage
+
|style="padding: 0px 0px 0px 30px;"|✔ Supports WHMCS Metric Billing - Integration: CPU, Compute Instance Booting Time, Custom Floating IP Addresses, Custom IP Addresses, Custom Network Incoming Bytes, Custom Network Incoming Packets, Custom Network Outgoing Bytes, Custom Network Outgoing Packets, Default Storage, Disk Device Read Bytes, Disk Device Read Requests, Disk Device Write Bytes, Disk Device Write Requests, Disk Ephemeral Size, Disk Root Size, Floating IP Addresses, IP Addresses, Image Size, Load Balancers, Memory, Memory Usage, Network Incoming Bytes, Network Incoming Packets, Network Outgoing Bytes, Network Outgoing Packets, OS ImagesSnapshot Size, VCPUs, Volume Size, VolumResources OS VCPU Usage, Resources SSD
 
|}
 
|}
 
{|
 
{|
Line 329: Line 374:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ Supports WHMCS V8.9 Back To WHMCS V8.6
+
|style="padding: 0px 0px 0px 30px;"|✔ Supports WHMCS V8.12 Back To WHMCS V8.9
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 0px 30px;"|✔ Requires ionCube Loader V12 Or Later
+
|style="padding: 0px 0px 0px 30px;"|✔ Requires ionCube Loader V14 Or Later
 
|}
 
|}
 
{|
 
{|
Line 340: Line 385:
 
=Installation and Configuration=  
 
=Installation and Configuration=  
 
{|
 
{|
|style="padding: 10px 0px 30px 0px;"|'''This tutorial will show you how to successfully install and configure [https://www.modulesgarden.com//products/whmcs/openstack-projects OpenStack Projects For WHMCS] smoothly.''' <br />
+
|style="padding: 10px 0px 30px 0px;"|'''This tutorial will show you how to successfully install and configure [https://www.modulesgarden.com/products/whmcs/openstack-projects OpenStack Projects For WHMCS] smoothly.''' <br />
 
We will guide you step by step through the whole installation and configuration process.
 
We will guide you step by step through the whole installation and configuration process.
 
|}
 
|}
Line 372: Line 417:
 
|style="padding: 0px 0px 20px 25px;"|[[File:OSP_4.png]]
 
|style="padding: 0px 0px 20px 25px;"|[[File:OSP_4.png]]
 
|}
 
|}
{|
+
<!--{|
 
|style="padding: 0px 0px 15px 15px;"|'''5. Now, set up the  '' 'storage' '' folder as recursively writable.'''<br />
 
|style="padding: 0px 0px 15px 15px;"|'''5. Now, set up the  '' 'storage' '' folder as recursively writable.'''<br />
 
This folder is available at '' '/yourWHMCS/modules/servers/OpenStackProjects/'. ''
 
This folder is available at '' '/yourWHMCS/modules/servers/OpenStackProjects/'. ''
Line 378: Line 423:
 
{|
 
{|
 
|style="padding: 0px 0px 20px 25px;"|[[File:OSP_5.png]]
 
|style="padding: 0px 0px 20px 25px;"|[[File:OSP_5.png]]
|}
+
|}-->
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|'''6. Now you have to activate the module in your WHMCS system.'''<br />
+
|style="padding: 0px 0px 15px 15px;"|'''5. Now you have to activate the module in your WHMCS system.'''<br />
 
Log in to your WHMCS administrator area. Go to '' 'System Settings' '' → '' 'Addon Modules'. ''<br />
 
Log in to your WHMCS administrator area. Go to '' 'System Settings' '' → '' 'Addon Modules'. ''<br />
 
Afterwards, find '' 'OpenStack Projects' '' and press '' 'Activate' '' button.
 
Afterwards, find '' 'OpenStack Projects' '' and press '' 'Activate' '' button.
Line 388: Line 433:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|'''7. In the next step, you need to permit access to the module.'''<br />
+
|style="padding: 0px 0px 15px 15px;"|'''6. In the next step, you need to permit access to the module.'''<br />
 
To do so, click on the'' 'Configure' '' button, select administrator groups that should have access to this addon and press '' 'Save Changes'. ''
 
To do so, click on the'' 'Configure' '' button, select administrator groups that should have access to this addon and press '' 'Save Changes'. ''
 
|}
 
|}
Line 395: Line 440:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|'''8. Finally, set up the cron command line provided below and define its frequency (1 minute interval is suggested).'''
+
|style="padding: 0px 0px 15px 15px;"|'''7. Finally, set up the cron command line provided below and define its frequency (1 minute interval is suggested).'''
 
  php -q /yourWHMCS/modules/servers/OpenstackProjects/cron/cron.php queue
 
  php -q /yourWHMCS/modules/servers/OpenstackProjects/cron/cron.php queue
 
This enables tasks such as '' 'suspend resources,' '' '' 'unsuspend resources,' '' '' 'terminate resources,' '' and '' 'lock account' '' to queue and run.
 
This enables tasks such as '' 'suspend resources,' '' '' 'unsuspend resources,' '' '' 'terminate resources,' '' and '' 'lock account' '' to queue and run.
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 30px 15px;"|'''9. You have just successfully installed OpenStack Projects For WHMCS!'''<br />
+
|style="padding: 0px 0px 30px 15px;"|'''8. You have just successfully installed OpenStack Projects For WHMCS!'''<br />
 
You can access your module under '' 'Addons' '' → '' 'OpenStack Projects'. ''
 
You can access your module under '' 'Addons' '' → '' 'OpenStack Projects'. ''
 
|}
 
|}
Line 418: Line 463:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 15px;"|'''6. Now, log in to your WHMCS and proceed to '' 'Setup' '' → '' 'Products/Services' '' → '' 'Servers' '' and press '' 'Add New Server'.''
+
|style="padding: 0px 0px 20px 15px;"|'''9. Now, log in to your WHMCS and proceed to '' 'System Settings' '' → '' 'Products/Services' '' → '' 'Servers' '' and press '' 'Add New Server'.''
 
|}
 
|}
 
{|
 
{|
Line 424: Line 469:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|'''7. Next, enter your server '' 'Name' '', '' 'Hostname' '', '' 'IP Address' '' and select '' 'Openstack Projects' '' from the '' 'Module' '' field.'''<br/>
+
|style="padding: 0px 0px 15px 15px;"|'''10. Next, enter your server '' 'Name' '', '' 'Hostname' '', '' 'IP Address' '' and select '' 'Openstack Projects' '' from the '' 'Module' '' field.'''<br/>
Now, provide your '' 'OpenStack Server Details' ''. To download the '' 'Identity Version' '', you need to click '' 'Get Versions' '' next to '' 'Identity Port/Path' '' . <br/> Make sure that your server connection is correct and save changes.  
+
Now, provide your '' 'OpenStack Server Details' ''. To download the '' 'Identity Version' '', you need to click '' 'Get Versions' '' next to '' 'Identity Port/Path' '' . <br/> Make sure that your server connection is correct and save changes. <br/>
 +
 
 +
'''''Important:''' The module supports '''OpenStack providers that allow access to the OpenStack API with system admin-level permissions'''.<br/> To ensure proper operation, use an account with the necessary rights to manage projects and perform actions through the API. <br/> Learn more about access roles in the [https://docs.openstack.org/keystone/latest/admin/service-api-protection.html OpenStack API guide].''
 
|}
 
|}
 
{|
 
{|
Line 446: Line 493:
 
* '''Module:''' OpenStack Projects
 
* '''Module:''' OpenStack Projects
  
* '''Username:''' admin
+
* '''Username:''' admin
 +
 
 +
* '''Password'''
 +
 
 +
* '''User Type:''' Select between "System Admin" and "Domain Admin"
  
 
* '''Identity Port/Path:''' 5000
 
* '''Identity Port/Path:''' 5000
Line 464: Line 515:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 15px;"|'''8. It is time to create a server group. To do so, click on '' 'Create New Group' ''.'''
+
|style="padding: 0px 0px 20px 15px;"|'''11. It is time to create a server group. To do so, click on '' 'Create New Group' ''.'''
 
|}
 
|}
 
{|
 
{|
Line 470: Line 521:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 15px;"|'''9. Enter a name, click on your previously created server, press '' 'Add' '' and afterward '' 'Save Changes' ''.'''<br/>
+
|style="padding: 0px 0px 20px 15px;"|'''12. Enter a name, click on your previously created server, press '' 'Add' '' and afterward '' 'Save Changes' ''.'''<br/>
 
'''''Important:''' Please '''do not''' add more than one server into a single server group, as the module always fetches data from the first server listed in the group.<br/> It is recommended to create one group per server configuration to prevent potential issues.''  
 
'''''Important:''' Please '''do not''' add more than one server into a single server group, as the module always fetches data from the first server listed in the group.<br/> It is recommended to create one group per server configuration to prevent potential issues.''  
 
|}
 
|}
Line 479: Line 530:
 
==Configuration of Product==
 
==Configuration of Product==
 
{|
 
{|
|style="padding: 10px 0px 15px 15px;"|'''10. In order to create and configure a product, go to '' 'Setup' '' → '' 'Products/Services' '' → '' 'Products/Services'.'''''<br />
+
|style="padding: 10px 0px 15px 15px;"|'''13. In order to create and configure a product, go to '' 'System Settings' '' → '' 'Products/Services' '' → '' 'Products/Services'.'''''<br />
 
Click on '' 'Create a New Group'.''
 
Click on '' 'Create a New Group'.''
 
|}
 
|}
Line 486: Line 537:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 15px;"|'''11. Enter your product group name and press '' 'Save Changes'.'''''
+
|style="padding: 0px 0px 20px 15px;"|'''14. Enter your product group name and press '' 'Save Changes'.'''''
 
|}
 
|}
 
{|
 
{|
Line 492: Line 543:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|'''12. Once you have a product group, you can create a new product.'''<br />
+
|style="padding: 0px 0px 15px 15px;"|'''15. Once you have a product group, you can create a new product.'''<br />
To do so, first click on '' 'Create a New Product'.''  
+
To do so, click'' 'Create a New Product'.''  
 
|}
 
|}
 
{|
 
{|
Line 499: Line 550:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|'''13. Afterward, choose your product type, enter your product name, choose module and the product group from the dropdown menus. Press '' 'Continue'. '' '''<br />
+
|style="padding: 0px 0px 15px 15px;"|'''16. Afterward, choose your product type, enter your product name, choose module and the product group from the dropdown menus. Press '' 'Continue'. '' '''
<!-- '' 'Product Type' '' should be set to '' 'Server/VPS'. '' -->
+
 
|}
 
|}
 
{|
 
{|
Line 506: Line 556:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|'''14. Now, go to the '' 'Module Settings' '' section, choose your previously created server group from the dropdown menu.'''<br />
+
|style="padding: 0px 0px 20px 15px;"|'''17. Now, go to the '' 'Module Settings' '' section, choose your previously created server group from the dropdown menu.'''
If you did not set the proper permissions, you will be asked to do it now.
+
 
|}
 
|}
 
{|
 
{|
Line 513: Line 562:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|'''15. Now, let's start configuring the settings.'''<br />
+
|style="padding: 0px 0px 15px 15px;"|'''18. Now, let's start configuring the settings.'''<br />
 
'''''Note:''' The below description refers to the "VHI" product configuration.'' <br />
 
'''''Note:''' The below description refers to the "VHI" product configuration.'' <br />
  
 
'' '''Configuration:''' ''
 
'' '''Configuration:''' ''
* '''Default Domain''' - choose a default domain for new projects based on this product.
+
* '''Default Domain''' - choose a default domain for new projects based on this product or create a new domain. '''''Note:''' The option to create new domains is not available if "Domain Admin" is set as the ''User Type'' in the server configuration.''
 
* '''Client Projects Mode''' - select a preferred mode that defines how new hostings will be created.
 
* '''Client Projects Mode''' - select a preferred mode that defines how new hostings will be created.
 
* '''Project User Roles''' - define default roles for a new user. Keep in mind that the choice of roles determines the level of allowed permissions. For example, select the ''image_upload'' role if you wish to be allowed to upload OS images.
 
* '''Project User Roles''' - define default roles for a new user. Keep in mind that the choice of roles determines the level of allowed permissions. For example, select the ''image_upload'' role if you wish to be allowed to upload OS images.
Line 526: Line 575:
 
* '''OpenStack Panel Web Address''' - is the web address for the login page to the OpenStack panel.
 
* '''OpenStack Panel Web Address''' - is the web address for the login page to the OpenStack panel.
 
* '''Default Domain Name''' - enter a domain that will be used when the domain name is not provided. Available variables: ''{clientId}, {serviceId}'' and ''{rand}''.
 
* '''Default Domain Name''' - enter a domain that will be used when the domain name is not provided. Available variables: ''{clientId}, {serviceId}'' and ''{rand}''.
* '''Default Project Name''' - enter a project name that will be used when creating a new project. If left empty, the domain name will be used instead. Available variables: ''{clientId}, {serviceId}'' and ''{rand}''.
+
* '''Default Project Name''' - enter a project name used when creating a new project. If left empty, the domain name will be used instead. Available variables: ''{clientId}, {serviceId}'' and ''{rand}''.
* '''Default User Name''' - enter a user name that will be used when creating a new user. Available variables: ''{clientId}, {serviceId}'' and ''{rand}''.
+
* '''Default User Name''' - enter a user name used when creating a new user. Available variables: ''{clientId}, {serviceId}'' and ''{rand}''.
 
* '''Domain Field Content''' - specify the content data that will overwrite the WHMCS Domain Field.
 
* '''Domain Field Content''' - specify the content data that will overwrite the WHMCS Domain Field.
* '''Client Area Login Information''' - select which of the login elements should be visible in the "Server Information" table in the client area. Choose from: ''username, password, domain'' and ''web address.''
+
* '''Client Area Login Information''' - select which login elements should be visible in the "Server Information" table in the client area. Choose from: ''username, password, domain'' and ''web address.''
* '''Log API Requests''' - if you enable, information on API requests will be stored in the 'Module Log' section in your WHMCS.
+
* '''Log API Requests''' - if you enable it, information on API requests will be stored in the 'Module Log' section in your WHMCS.
* '''Login Restrictions''' - this enables a feature, that enhances security by only issuing temporary passwords which ensure access is granted only for as long as it is needed.
+
* '''Login Restrictions''' - this enables a feature that enhances security by only issuing temporary passwords that ensure access is granted only for as long as needed.
 
* '''Remove Password''' - if enabled, the password will be removed from the database as soon as the project is created.
 
* '''Remove Password''' - if enabled, the password will be removed from the database as soon as the project is created.
 +
* '''Open Management Panel In New Window''' - decide whether the management panel should open in the same or a new window.
 +
* '''Block Storage Limits Widget''' - block storage resource usage can be displayed in the admin and client area, include at least one resource to enable.
 
<!--
 
<!--
 
* '''Overwrite WHMCS Domain''' - if enabled, during the create action, the domain assigned to hosting in WHMCS will be overwritten with the domain name assigned to the project in the OpenStack panel.
 
* '''Overwrite WHMCS Domain''' - if enabled, during the create action, the domain assigned to hosting in WHMCS will be overwritten with the domain name assigned to the project in the OpenStack panel.
Line 542: Line 593:
 
{|
 
{|
 
|style="padding: 0px 0px 15px 15px;"|
 
|style="padding: 0px 0px 15px 15px;"|
'' '''Compute, Block-Storage, Network, Load Balancer, Container Infrastructure, Traits, QoS Policy: 'Minimum Bandwidth Rate Rules' ''' '' and ''' '' 'Bandwidth Limit Rules' ''' '' - <br/> these sections may vary depending on the project, some of them might be unavailable for your OpenStack project. You may easily adjust your product to your needs by modifying the available options. Type '' '-1' '' for unlimited.<br/>
+
'' '''Compute, Block Storage, Network, Load Balancer, Container Infrastructure, Traits''' '' - <br/> These sections may vary depending on the project, some of them might be unavailable for your OpenStack project. You may easily adjust your product to your needs by modifying the available options. Type '' '-1' '' for unlimited.<br/>
'''''Note:''' Keep in mind that in the case of Virtuozzo server 'Traits' stand for 'Placement Groups' endpoints.''
+
'''''Note:''' Keep in mind that in the case of the Virtuozzo server 'Traits' stand for 'Placement Groups' endpoints.''
 
|}
 
|}
 
{|
 
{|
Line 549: Line 600:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 15px;"|
+
|style="padding: 0px 0px 20px 15px;"|In the '''QoS Rules''' configuration, certain QoS rules are consolidated into a single rule and respectively into a single configurable option.
'' '''Module Custom Web Hooks''' ''  - here you may add the URL with WHMCS parameters to perform additional actions after the ''create/suspend/unsuspend/terminate/change package'' actions.
+
<!--
 +
* '''Packet Rate Limit Rules - Max Egress (kpps)''' and '''Packet Rate Limit Rules - Max Egress Burst (kpps)'''
 +
* '''Packet Rate Limit Rules - Max Ingress (kpps)''' and '''Packet Rate Limit Rules - Max Ingress Burst (kpps)'''
 +
* '''Bandwidth Limit Rules - Max Egress (kbps)''' and '''Bandwidth Limit Rules - Max Egress Burst (kbps)'''
 +
* '''Bandwidth Limit Rules - Max Ingress (kbps)''' and '''Bandwidth Limit Rules - Max Ingress Burst (kbps)'''
 +
-->
 +
|}
 +
{|
 +
|style="padding: 0px 0px 30px 25px;"|[[File:OSP_16_5.png]]
 +
|}
 +
===Module Hooks===
 +
{|
 +
|style="padding: 10px 0px 15px 15px;"|
 +
'' '''Module Custom Web Hooks''' ''  - here you may add the URL with WHMCS parameters to perform additional actions after the ''create/suspend/unsuspend/terminate/change package'' actions.<br/> These hooks allow you to trigger actions on external servers or services via HTTP requests when certain events occur in WHMCS.
 
|}
 
|}
 
{|
 
{|
Line 556: Line 620:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 20px 15px;"|
+
|style="padding: 0px 0px 15px 15px;"|
'' '''Module Custom Shell Hooks''' ''  - enter the commands with WHMCS parameters to perform additional actions after the ''create/suspend/unsuspend/terminate/change package'' actions.<br/>
+
'' '''Module Custom Shell Hooks''' ''  - enter the commands with WHMCS parameters to perform additional actions after the ''create/suspend/unsuspend/terminate/change package'' actions.<br/>These hooks allow you to execute shell commands on your server when specific WHMCS package actions are triggered.<br/>
 
Please refer to the following section to correctly set up the [[#OpenID_Configuration_.28VHI.29|openID configuration]] to connect to VHI correctly.
 
Please refer to the following section to correctly set up the [[#OpenID_Configuration_.28VHI.29|openID configuration]] to connect to VHI correctly.
  
Line 565: Line 629:
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|'''16. Optionally, you may configure the "Usage Billing Settings" that will be utilized for the Advanced Billing For WHMCS integration.'''<br/>
+
|style="padding: 0px 0px 15px 15px;"|'''19. Optionally, you may configure the "Usage Billing Settings" that will be utilized for the Advanced Billing For WHMCS integration.'''<br/>
Select specific networks and IP address versions for custom parameter calculations.
+
Select specific networks and IP address versions for custom parameter calculations.<br/>
|}
+
 
 +
'''''Important:''' Virtual Machines are billed only when they are directly connected to a custom network marked for billing by the administrator '(Custom Network Metric Statistics)'. <br/>If a VM is connected to the administrator's network via an intermediary router, that network will not be billed. Only networks directly assigned to the VM are considered billable.''<br/>
 +
 
 +
'''''Note:''' Advanced Billing For WHMCS version 4.x is required, previous versions are not supported.''
 +
|}  
 
{|
 
{|
|style="padding: 0px 0px 20px 25px;"|[[File:OSP_16_4.png]]
+
|style="padding: 0px 0px 30px 25px;"|[[File:OSP_16_4.png]]
 
|}
 
|}
 +
===Configurable Options===
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|'''17. At the end of the configuration process, you can enable '' 'Metric Billing' '' and decide whether you want to generate configurable options for the product.'''<br/>
+
|style="padding: 10px 0px 15px 15px;"|'''20. At the end of the configuration process, you can enable '' 'Metric Billing' '' and decide whether you want to generate configurable options for the product.'''<br/>
  
Configurable options can be used by your clients to select each virtual machine parameter individually during order placement.<br/> Otherwise, if configurable options are not defined, then the fixed parameters specified in the earlier configuration will be used instead.<br/> If you decide to use configurable options, select the configurable options unit and then press the 'Create Configurable Options' button.<br/>
+
'''Configurable options''' can be used by your clients to select each virtual machine parameter individually during order placement.<br/> Otherwise, if configurable options are not defined, then the fixed parameters specified in the earlier configuration will be used instead.<br/> If you decide to use configurable options, select the configurable options unit and then press the 'Create Configurable Options' button.<br/>
  
 
There is also an '' 'Alternative Mode' '' available, which changes the way the configurable options values are verified and calculated. <br/> Select single configurable options and their values will be summed with the default product configuration values instead of overwriting them.
 
There is also an '' 'Alternative Mode' '' available, which changes the way the configurable options values are verified and calculated. <br/> Select single configurable options and their values will be summed with the default product configuration values instead of overwriting them.
Line 589: Line 658:
 
{|
 
{|
 
|style="padding: 0px 0px 30px 25px;"|[[File:OSP_18.png]]
 
|style="padding: 0px 0px 30px 25px;"|[[File:OSP_18.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 15px 15px;"|There are specific exceptions where options must be configured together to create a functional rule. <br/> The following rules must be set together, as the API requires several parameters to be specified, therefore they are now combined into one configurable option for your comfort of use. These are:
 +
* '''Packet Rate Limit''' combines the following:
 +
** '''Packet Rate Limit Rules - Max Egress (kpps)''' - <code>maxEgressKpps: 0</code>
 +
** '''Packet Rate Limit Rules - Max Egress Burst (kpps)''' - <code>maxEgressBurstKpps: 0</code>
 +
** '''Packet Rate Limit Rules - Max Ingress (kpps)''' - <code>maxIngressKpps: 0</code>
 +
** '''Packet Rate Limit Rules - Max Ingress Burst (kpps)''' - <code>maxIngressBurstKpps: 0</code> <br/>
 +
Configured as: <code>maxEgressKpps: 0,maxEgressBurstKpps: 0,maxIngressKpps: 0,maxIngressBurstKpps: 0|Unit</code>
 +
 +
* '''Bandwidth Limit''' combines the following:
 +
** '''Bandwidth Limit Rules - Max Egress (kbps)''' - <code>maxEgressKbps: 0</code>
 +
** '''Bandwidth Limit Rules - Max Egress Burst (kbps)''' - <code>maxEgressBurstKbps: 0</code>
 +
** '''Bandwidth Limit Rules - Max Ingress (kbps)''' - <code>maxIngressKbps: 0</code>
 +
** '''Bandwidth Limit Rules - Max Ingress Burst (kbps)''' - <code>maxIngressBurstKbps: 0</code><br/>
 +
 +
Configured as: <code>maxEgressKbps: 0,maxEgressBurstKbps: 0,maxIngressKbps: 0,maxIngressBurstKbps: 0|Unit</code>
 +
 +
* '''Minimum Bandwidth''' combines the following:
 +
** '''Minimum Bandwidth Rate Rules - Min Egress (kbps)''' - <code>minEgressKbps: 0</code>
 +
** '''Minimum Bandwidth Rate Rules - Min Ingress (kbps)'''  - <code>minIngressKbps: 0</code><br/>
 +
Configured as: <code>minEgressKbps: 0,minIngressKbps: 0|Unit</code> 
 +
 +
* '''Minimum Packet Rate''' combines the following:
 +
** '''Minimum Packet Rate Rules - Min Egress (kbps)''' - <code>minEgressKpps: 0</code>
 +
** '''Minimum Packet Rate Rules - Min Ingress (kbps)''' - <code>minIngressKpps: 0</code>
 +
Configured as: <code>minEgressKpps: 0,minIngressKpps: 0|Unit</code>
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:OSP_16_7.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 15px 15px;"|For example:
 +
In the QoS Policy generate the following configurable options:
 +
* '''Minimum Bandwidth''':  <code>minEgressKbps: 50,minIngressKbps: 60|Unit</code>
 +
* '''Bandwidth Limit''': <code>maxEgressKbps: 70,maxEgressBurstKbps: 80,maxIngressKbps: 90,maxIngressBurstKbps: 100|Unit</code><br/>
 +
 +
This will result in the following configuration (overwriting the product configuration QoS Rules):
 +
|}
 +
{|
 +
|style="padding: 0px 0px 30px 25px;"|[[File:OSP_16_6.png]]
 
|}
 
|}
  
Line 624: Line 734:
 
{|
 
{|
 
|style="padding: 0px 0px 30px 15px;"|'''''Important:''' When '''upgrading''' from 1.3.0 to 1.4.0 module version and you do '''not''' save changes in the module settings the roles will work as in the previous version.''
 
|style="padding: 0px 0px 30px 15px;"|'''''Important:''' When '''upgrading''' from 1.3.0 to 1.4.0 module version and you do '''not''' save changes in the module settings the roles will work as in the previous version.''
 +
|}
 +
 +
===Quota Configuraton Guide===
 +
====Adding Quotas Using CLI====
 +
{|
 +
|style="padding: 10px 0px 15px 15px;"|Before configuring quotas, it's essential to identify which quotas your OpenStack environment supports.<br/> 
 +
To set quotas via the module, they must be added to the <code>quotas.json</code> file at: ''/modules/servers/OpenstackProjects/app/Config/quotas.json''. This file defines the default quota values for projects managed by the module.<br/>
 +
 +
'''Use the following CLI commands to list available quotas from your OpenStack environment:''' 
 +
openstack quota show --compute -f json
 +
openstack quota show --network -f json
 +
openstack quota show --volume -f json
 +
openstack loadbalancer quota show default -f json
 +
openstack coe quota list
 +
openstack trait list 
 +
|}
 +
{|
 +
|style="padding: 0px 0px 15px 15px;"|Next, edit the '' 'quotas.json','' ensure that the quotas specified align with the capabilities and limitations of your OpenStack setup.<br/>
 +
'''Important:'''<br/>
 +
Please note that the values defined in the '' 'quotas.json' '' file serve as '''default settings'''.<br/> You can override these default settings in individual product configurations to create specific project requirements. <br/> For instance, setting a quota value to '''-1''' indicates an unlimited allocation for that resource.
 +
|}
 +
{|
 +
|style="padding: 0px 0px 15px 15px;"|'''Example Configuration For Compute, Network, and Volume Quotas'''
 +
* Run the command: <code>openstack quota show --compute -f json</code>
 +
* The following output may return:
 +
  [
 +
  {
 +
    "Resource": "cores",
 +
    "Limit": -1
 +
  },
 +
  {
 +
    "Resource": "instances",
 +
    "Limit": -1
 +
  },
 +
  {
 +
    "Resource": "ram",
 +
    "Limit": -1
 +
  },
 +
  {
 +
    "Resource": "fixed_ips",
 +
    "Limit": null
 +
  },
 +
  {
 +
    "Resource": "floating_ips",
 +
    "Limit": null
 +
  },
 +
  {
 +
    "Resource": "networks",
 +
    "Limit": null
 +
  },
 +
  {
 +
    "Resource": "security_group_rules",
 +
    "Limit": null
 +
  },
 +
  {
 +
    "Resource": "security_groups",
 +
    "Limit": null
 +
  },
 +
  {
 +
    "Resource": "injected-file-size",
 +
    "Limit": 10240
 +
  },
 +
  {
 +
    "Resource": "injected-path-size",
 +
    "Limit": 255
 +
  },
 +
  {
 +
    "Resource": "injected-files",
 +
    "Limit": 5
 +
  },
 +
  {
 +
    "Resource": "key-pairs",
 +
    "Limit": -1
 +
  },
 +
  {
 +
    "Resource": "properties",
 +
    "Limit": 128
 +
  },
 +
  {
 +
    "Resource": "server-group-members",
 +
    "Limit": -1
 +
  },
 +
  {
 +
    "Resource": "server-groups",
 +
    "Limit": -1
 +
  }
 +
  ]
 +
* Following the structure: 
 +
  "compute": {
 +
  "quota_resource_name": "default_limit_value"
 +
  }
 +
* The corresponding quotas.json entry would be: 
 +
  "compute": {
 +
  "cores": -1,
 +
  "instances": -1,
 +
  "ram": -1,
 +
  "fixed_ips": null,
 +
  "floating_ips": null,
 +
  "networks": null,
 +
  "security_group_rules": null,
 +
  "security_groups": null,
 +
  "injected-file-size": 10240,
 +
  "injected-path-size": 255,
 +
  "injected-files": 5,
 +
  "key-pairs": -1,
 +
  "properties": 128,
 +
  "server-group-members": -1,
 +
  "server-groups": -1
 +
  }
 +
|}
 +
{|
 +
|style="padding: 0px 0px 15px 15px;"|'''Example Configuration For Load Balancer Quota'''
 +
* Run the command: <code>openstack loadbalancer quota show default -f json</code>
 +
* The following output may return: 
 +
  {
 +
  "load_balancer": 0,
 +
  "listener": -1,
 +
  "pool": -1,
 +
  "health_monitor": -1,
 +
  "member": -1,
 +
  "l7policy": -1,
 +
  "l7rule": -1
 +
  } 
 +
* This should be added to quotas.json under the <code>loadBalancer</code> key: 
 +
  "loadBalancer": {
 +
  "load_balancer": 0,
 +
  "listener": -1,
 +
  "pool": -1,
 +
  "health_monitor": -1,
 +
  "member": -1,
 +
  "l7policy": -1,
 +
  "l7rule": -1
 +
  } 
 +
|}
 +
{|
 +
|style="padding: 0px 0px 15px 15px;"|'''Example Configuration For Container Infrastructure Quota'''
 +
* Running the command: <code>openstack coe quota list</code>
 +
* May return: 
 +
|}
 +
{| class="wikitable" style="margin-left: 15px; margin-bottom: 20px; margin-top: 0px; text-align: left;"
 +
|-
 +
! style="text-align:left; background-color:#efefef;" | project_id
 +
! style="background-color:#efefef;" | resource
 +
! style="background-color:#efefef;" | hard_limit
 +
|- style="font-weight:normal;"
 +
| 5dcda23cb9bd4718b32610bbe18a1382
 +
| Cluster
 +
| 20
 +
|}
 +
{|
 +
|style="padding: 0px 0px 15px 15px;"|
 +
* This should be added under the <code>containerInfra</code> key: 
 +
"containerInfra": {
 +
  "hard_limit": 20
 +
 +
|}
 +
{|
 +
|style="padding: 0px 0px 15px 15px;"|'''Example Configuration For Placement / Traits'''
 +
* Running the command: <code>openstack trait list</code>
 +
* May return:
 +
|}
 +
{| class="wikitable" style="margin-left: 15px; margin-bottom: 20px; margin-top: 0px; text-align: left;"
 +
|-
 +
! style="text-align:left; background-color:#efefef;" |name
 +
|-
 +
| COMPUTE_NET_VIF_MODEL_SRIOV 
 +
|-
 +
| HW_CPU_AARCH64_FCMA
 +
|-
 +
| HW_CPU_X86_AMD_SSBD
 +
|-
 +
| HW_NIC_OFFLOAD_GSO     
 +
|-
 +
| CUSTOM_MG
 +
|-
 +
| CUSTOM_HCI_5EDCF1C91EEC41839078D7C9FF3F6A46
 +
|-
 +
| CUSTOM_HCI_9F5665A0B47C40438E20F0B866B79703
 +
|-
 +
| CUSTOM_HCI_D3E179EFBF1F42FF854C791410C82B66
 +
|}
 +
{|
 +
|style="padding: 0px 0px 30px 15px;"|
 +
* For example, if <code>CUSTOM_MG</code> is required, add:
 +
"traits": {
 +
  "CUSTOM_MG": 1
 +
 +
|}
 +
 +
====Block Storage Quota Configuration====
 +
{|
 +
|style="padding: 10px 0px 30px 15px;"|To configure available quotas, update the following file: 
 +
modules/servers/OpenstackProjects/app/Config/quotas.json 
 +
Manually add additional storage types to block storage as needed. To set a volume size limit for block storage, modify the <code>blockStorage</code> configuration object.
 +
 +
'''Example Configuration for SSD Volume Type'''
 +
 +
To specify an unlimited quota for SSD volumes, use the following setting:
 +
"gigabytes_ssd": -1 
 +
 +
 +
After making changes, the <code>blockStorage</code> section of the file should resemble: 
 +
 +
  "blockStorage": {
 +
    ....
 +
    "gigabytes_default": -1,
 +
    "gigabytes_ssd": -1
 +
  }
 +
Once the file is updated and the page is refreshed, the new quota will be reflected in the Block Storage section.<br/><br/>
 +
'''''Important:''' If you have multiple OpenStack Project servers connected to WHMCS and use more than one OpenStack product, remember that the quotas configuration is global.<br/> All linked servers must support the same settings defined in <code>quotas.json</code>.<br/> If a server lacks a particular feature, provisioning may fail unless you either align all server configurations or leave the affected quota fields empty to skip them.''
 +
|}
 +
 +
====Default Quota Configuration==== 
 +
{|
 +
|style="padding: 10px 0px 30px 15px;"|Below is an example of the default <code>quotas.json</code> configuration. <br/> By ensuring these settings are correctly configured, your OpenStack Projects For WHMCS module will properly enforce quotas across your environment. 
 +
 +
  {
 +
  "compute": {
 +
    "cores": -1,
 +
    "fixed_ips": -1,
 +
    "floating_ips": -1,
 +
    "injected_file_content_bytes": 10240,
 +
    "injected_file_path_bytes": 255,
 +
    "injected_files": 5,
 +
    "instances": -1,
 +
    "key_pairs": -1,
 +
    "metadata_items": 128,
 +
    "ram": -1,
 +
    "security_group_rules": -1,
 +
    "security_groups": -1,
 +
    "server_group_members": -1,
 +
    "server_groups": 30
 +
  },
 +
  "blockStorage": {
 +
    "volumes": 100,
 +
    "per_volume_gigabytes": 50,
 +
    "snapshots": 100,
 +
    "gigabytes": 300,
 +
    "backups": 10,
 +
    "backup_gigabytes": 200,
 +
    "volumes_default": -1,
 +
    "gigabytes_default": -1,
 +
    "snapshots_default": -1,
 +
    "groups": 10
 +
  },
 +
  "network": {
 +
    "network": -1,
 +
    "subnet": -1,
 +
    "subnetpool": -1,
 +
    "port": -1,
 +
    "router": -1,
 +
    "floatingip": -1,
 +
    "rbac_policy": -1,
 +
    "security_group": -1,
 +
    "security_group_rule": -1,
 +
    "security_group_device": -1,
 +
    "endpoint_group": -1,
 +
    "vpnservice": -1,
 +
    "ipsec_site_connection": -1,
 +
    "ipsecpolicy": -1,
 +
    "ikepolicy": -1
 +
  },
 +
  "loadBalancer": {
 +
    "load_balancer": -1,
 +
    "listener": -1,
 +
    "member": -1,
 +
    "pool": -1,
 +
    "health_monitor": -1
 +
  },
 +
  "containerInfra": {
 +
    "hard_limit": 20
 +
  },
 +
  "traits": {}
 +
  } 
 
|}
 
|}
  
Line 638: Line 1,022:
 
===Queue===
 
===Queue===
 
{|
 
{|
|style="padding: 10px 0px 15px 15px;"|Cron job tasks sent to the server through the module can be viewed and managed here. <br/> The basic information includes:
+
|style="padding: 10px 0px 15px 15px;"|At the top of this section you will find information regarding the cron job.<br/>
 +
The task cards can be used to filter the task table underneath.
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:OSP_18_2_1.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 15px 15px;"|Cron job tasks sent to the server through the module can be viewed and managed here. <br/> The basic information includes:
 
*'''ID''' - identification number unique to each task.
 
*'''ID''' - identification number unique to each task.
 
*'''Related Item''' - the product related to the task. Clicking on it will take you to its product page.
 
*'''Related Item''' - the product related to the task. Clicking on it will take you to its product page.
Line 666: Line 1,057:
 
|style="padding: 0px 0px 20px 15px;"| Moreover, you can change additional settings by clicking on the three dots above the basic actions.
 
|style="padding: 0px 0px 20px 15px;"| Moreover, you can change additional settings by clicking on the three dots above the basic actions.
 
*'''Auto Prune''' - toggle the switch on to enable the task auto prune feature, which will delete the tasks after the specified time has passed.
 
*'''Auto Prune''' - toggle the switch on to enable the task auto prune feature, which will delete the tasks after the specified time has passed.
*''' Auto Prune Older Than''' - specify the number of days that have to pass before a task is automatically pruned.
+
*'''Auto Prune Older Than''' - specify the number of days that have to pass before a task is automatically pruned.
 +
*'''Display 'Cron Job Configuration' Hint''' - disable to hide the cron job information.
 
|}
 
|}
 
{|
 
{|
Line 700: Line 1,092:
 
** Change Package – upgrading resources of the project.
 
** Change Package – upgrading resources of the project.
 
** Change Password – changing the password of the main user in the project. <br /> ''Note: To change the password input the new password in the 'Password' field, scroll down to the bottom of the page to 'Save Changes' and when the page reloads, click on 'Change Password'.''
 
** Change Password – changing the password of the main user in the project. <br /> ''Note: To change the password input the new password in the 'Password' field, scroll down to the bottom of the page to 'Save Changes' and when the page reloads, click on 'Change Password'.''
* Scheduled Tasks - data on all scheduled tasks, their status, attempts, and dates
+
* Scheduled Tasks - data on all scheduled tasks, their status, attempts, and dates.
 +
* Block Storage Limits - if the option is enabled in the module settings, block storage resources usage will be displayed here.
 
* Metric Statistics - the section is completed with all metrics the module can observe.
 
* Metric Statistics - the section is completed with all metrics the module can observe.
 
|}
 
|}
Line 707: Line 1,100:
 
|}
 
|}
  
==Ordering==
+
==Ordering New Projects==
 
{|
 
{|
|style="padding: 10px 0px 15px 15px;"|Thanks to configurable options, you are able to offer a product which your clients can match to their needs.<br />Additionally, you are able to set up pricing for each configurable option, which makes your offer even more competitive.<br/>
+
|style="padding: 10px 0px 15px 15px;"|Thanks to configurable options, you are able to offer a product that your clients can match to their needs.<br />Additionally, you are able to set up pricing for each configurable option, which makes your offer even more competitive.
 
+
 
|}
 
|}
 
{|
 
{|
 
|style="padding: 0px 0px 30px 25px;"|[[File:OSP_20.png]]
 
|style="padding: 0px 0px 30px 25px;"|[[File:OSP_20.png]]
 
|}
 
|}
 +
 +
==Importing Existing Project==
 +
{|
 +
|style="padding: 10px 0px 15px 15px;"|You can easily import existing projects into the module by following the instructions provided below:<br/>
 +
1. Find a client to whom you want to assign a project. <br/>
 +
2. Create a new service, but do not use the '' 'Create' '' action.<br/>
 +
3. Edit the service by entering the information in every field highlighted in the image below, besides the Dedicated IP.<br/>
 +
4. Ensure that product settings mirror the ones set up on the OpenStack side.<br/>
 +
5. Change the service status to active.<br/>
 +
6. Press the '' 'Save Changes' '' button.
 +
|}
 +
{|
 +
|style="padding: 0px 0px 30px 25px;"|[[File:OSP_20_1.png]]
 +
|}
 +
 
==Client Area==
 
==Client Area==
 
{|
 
{|
Line 735: Line 1,142:
  
 
==OpenID Configuration (VHI)==
 
==OpenID Configuration (VHI)==
{|
+
===Customer Domain===
|style="padding: 10px 0px 15px 15px;"|Follow the below instruction step by step to allow adding OpenID configuration automatically:<br/>
+
{|
 +
|style="padding: 10px 0px 15px 15px;"|Follow the below instruction step by step to allow adding OpenID configuration automatically:<br/>
 
'''1.''' Configure OpenID in WHMCS, read the [https://docs.whmcs.com/OpenID_Connect following article] to learn how to proceed.<br/>
 
'''1.''' Configure OpenID in WHMCS, read the [https://docs.whmcs.com/OpenID_Connect following article] to learn how to proceed.<br/>
 
'''2.''' Open file: '''''vhi-integration/vinfra-cmd''''' and enter the below enumerated data:  
 
'''2.''' Open file: '''''vhi-integration/vinfra-cmd''''' and enter the below enumerated data:  
Line 810: Line 1,218:
 
{|
 
{|
 
|style="padding: 0px 0px 30px 25px;"|[[File:OSP_22_4.png]]
 
|style="padding: 0px 0px 30px 25px;"|[[File:OSP_22_4.png]]
 +
|}
 +
===Predefined Domain===
 +
{|
 +
|style="padding: 10px 0px 15px 15px;"|Follow the below instruction step by step to use a predefined domain for OpenID configuration:<br/>
 +
'''1.''' Configure OpenID in WHMCS, read the [https://docs.whmcs.com/OpenID_Connect following article] to learn how to proceed.<br/>
 +
'''2.''' Make sure your product '' 'project_admin' '' included in '' 'Project User Roles' '' and a domain under '' 'Default Domain' '' in the product configuration.<br/>
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:OSP_22_5.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 15px 15px;"|'''3.''' Configure OpenID in VHI.<br/> Remember to include the same domain that has been used during product configuration in WHMCS after the '' '=' '' symbol in '' 'Metadata URL'.''
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:OSP_22_7.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 15px;"|'''4.''' Select '' 'Authorization Code Flow'.''
 +
|}
 +
{|
 +
|style="padding: 0px 0px 30px 25px;"|[[File:OSP_22_8.png]]
 +
|}
 +
 +
==Custom Scope Configuration==
 +
{|
 +
|style="padding: 10px 0px 30px 15px;"|Due to differences in policy configurations across various OpenStack environments, each API request now has a configurable authentication method.<br/> This configuration is managed through the '''auth.yml''' file located in <code>app/Config/auth.yml</code>. The file contains settings for two user types: '''System Admin''' and '''Domain Admin'''.<br/> The appropriate configuration is loaded based on the server settings.
 +
|}
 +
===Configuration Structure===
 +
{|
 +
|style="padding: 10px 0px 30px 15px;"|The '''auth.yml''' file is structured into two sections:
 +
* '''systemAdmin''' – Contains authentication settings for requests made by System Admin user type.
 +
* '''domainAdmin''' – Contains authentication settings for requests made by Domain Admin user type.<br/>
 +
Each section contains:
 +
* '''default''' - A default authentication method, used when no specific request configuration is defined.
 +
* Custom authentication methods for specific API requests that require unique authorization.
 +
|}
 +
===Exemplary Configuration===
 +
{|
 +
|style="padding: 10px 0px 15px 15px;"|'''System Admin Configuration'''
 +
 
 +
  systemAdmin:
 +
  default:
 +
    authUrl: "{$server.authUrl}"
 +
    auth:
 +
      identity:
 +
        methods:
 +
          - "password"
 +
        password:
 +
          user:
 +
            name: "{$server.username}"
 +
            domain:
 +
              name: "{$server.domain}"
 +
            password: "{$server.password}"
 +
      scope:
 +
        project:
 +
          id: "{$server.projectId}"
 +
  "network.v2.actions.floating_ips.get.get":
 +
    auth:
 +
      identity:
 +
        methods:
 +
          - "password"
 +
        password:
 +
          user:
 +
            name: "{$server.username}"
 +
            domain:
 +
              name: "{$server.domain}"
 +
            password: "{$server.password}"
 +
      scope:
 +
        project:
 +
          id: "{$service.projectId}"
 +
          domain:
 +
            name: "{$service.domainName}"
 +
 
 +
'''Domain Admin Configuration'''
 +
 
 +
  domainAdmin:
 +
  default:
 +
    authUrl: "{$server.authUrl}"
 +
    auth:
 +
      identity:
 +
        methods:
 +
          - "password"
 +
        password:
 +
          user:
 +
            name: "{$server.username}"
 +
            domain:
 +
              name: "{$server.domain}"
 +
            password: "{$server.password}"
 +
      scope:
 +
        project:
 +
          id: "{$server.projectId}"
 +
          domain:
 +
            name: "{$server.domain}"
 +
  "identity.v3.actions.users.delete.delete":
 +
    auth:
 +
      identity:
 +
        methods:
 +
          - "password"
 +
        password:
 +
          user:
 +
            name: "{$server.username}"
 +
            domain:
 +
              name: "{$server.domain}"
 +
            password: "{$server.password}"
 +
      scope:
 +
        domain:
 +
          name: "{$server.domain}" 
 +
|}
 +
{|
 +
|style="padding: 0px 0px 30px 15px;"|'''Explanation:'''
 +
* The default authentication method is used for general API requests and for retrieving the service catalog.
 +
* If a specific request requires a unique authentication method, it is explicitly defined within the configuration.<br/> For example: 
 +
** <code>network.v2.actions.floating_ips.get.get</code> for System Admins overrides the default configuration
 +
** <code>identity.v3.actions.users.delete.delete</code> for Domain Admins uses a custom authentication scope.
 +
|}
 +
 +
===Adding Custom Authentication Scope===
 +
{|
 +
|style="padding: 10px 0px 15px 15px;"|If a specific API request is not functioning as expected due to scope limitations, a custom authentication method can be defined. To do this:
 +
'''1. Enable API logging in the module settings: ''Log API Requests''. '''
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:OSP_24.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 15px;"|'''2. Identify the problematic API request from the logs.'''
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:OSP_24_1.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 15px 15px;"|'''3. Add a new authentication scope to '''auth.yml''' for the relevant user type.'''<br/>
 +
To add custom authentication for the <code>network.v2.actions.qo_s_policy.create.post</code> request under Domain Admin, modify the '''auth.yml''' file: 
 +
 +
domainAdmin:
 +
  "network.v2.actions.qo_s_policy.create.post":
 +
    auth:
 +
      identity:
 +
        methods:
 +
          - "password"
 +
        password:
 +
          user:
 +
            name: "{$server.username}"
 +
            domain:
 +
              name: "{$server.domain}"
 +
            password: "{$server.password}"
 +
      scope:
 +
        project:
 +
          id: "{$service.projectId}"
 +
          domain:
 +
            name: "{$service.domainName}"
 +
 
 +
After this modification, the request <code>network.v2.actions.qo_s_policy.create.post</code> will no longer use the default authentication but instead use the newly defined scope.
 +
|}
 +
{|
 +
|style="padding: 0px 0px 30px 25px;"|[[File:OSP_24_2.png]]
 +
|}
 +
 +
===Replacement Fields===
 +
{|
 +
|style="padding: 10px 0px 20px 15px;"|In the '''auth.yml''' configuration, several replacement fields dynamically pull values from the OpenStack environment and server configuration:
 +
|}
 +
 +
{|class="wikitable" style="margin-left: 15px; margin-bottom: 30px; margin-top: 0px; text-align: left;"
 +
|- style="font-weight:bold;"
 +
! style="font-weight:normal;" |
 +
! style="text-align:center; background-color:#efefef;" | Replacement Fields
 +
! style="background-color:#efefef;" | Description
 +
|-
 +
| 1.
 +
| <code>$service.password</code>
 +
| Password from the service.
 +
|-
 +
| 2.
 +
| <code>$service.username</code>
 +
| Username from the service.
 +
|-
 +
| 3.
 +
| <code>$service.domainName</code>
 +
| Domain name from the <code>DomainName</code> field.
 +
|-
 +
| 4.
 +
| <code>$service.domainId</code>
 +
| Domain ID from the <code>DomainId</code> field.
 +
|-
 +
| 5.
 +
| <code>$service.projectId</code>
 +
| Project ID from the <code>ProjectId</code> field.
 +
|-
 +
| 6.
 +
| <code>$server.host</code>
 +
| Server IP address.
 +
|-
 +
| 7.
 +
| <code>$server.protocol</code>
 +
| HTTP/HTTPS based on server settings.
 +
|-
 +
| 8.
 +
| <code>$server.username</code>
 +
| Username from the server configuration.
 +
|-
 +
| 9.
 +
| <code>$server.password</code>
 +
| Password from the server configuration.
 +
|-
 +
| 10.
 +
| <code>$server.domain</code>
 +
| Domain from the server configuration.
 +
|-
 +
| 11.
 +
| <code>$server.projectId</code>
 +
| Project ID from the server configuration.
 +
|-
 +
| 12.
 +
| <code>$server.userType</code>
 +
| User type (<code>Domain Admin</code> / <code>System Admin</code>).
 +
|-
 +
| 13.
 +
| <code>$server.identityVersion</code>
 +
| Identity version from server configuration.
 +
|-
 +
| 14.
 +
| <code>$server.identityPath</code>
 +
| Identity path from the server configuration.
 +
|}
 +
 +
==Manual Configuration in File==
 +
{|
 +
|style="padding: 10px 0px 5px 15px;"|The <code>configuration.yml</code> file located at <code>/yourWHMCS/modules/servers/OpenstackProjects/app/Config/configuration.yml</code> allows you to configure advanced options:
 +
|}
 +
{|
 +
|style="padding: 0px 0px 15px 15px;"|1. '''Usage metrics calculation''' <br/> Metrics can be calculated based on total or average usage for a given period. Modify this in <code>configuration.yml</code> by setting the <code>averageBilling</code> option: 
 +
<code>averageBilling: 'false'  # Total usage</code> 
 +
<code>averageBilling: 'true'  # Average usage</code>
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:OSP_22.png]]
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 15px;"|2. '''Disabling usage metrics''' <br/> If you have a large database, disabling usage metrics may improve performance. Set the <code>disableUsageMetrics</code> option:
 +
disableUsageMetrics: true  # Disables usage metrics
 +
|}
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:OSP_23.png]]
 +
|}<!--
 +
{|
 +
|style="padding: 0px 0px 20px 25px;"|[[File:OSP_22.png]]
 +
|}-->
 +
{|
 +
|style="padding: 0px 0px 0px 15px;"|3. '''Disabling module termination option''' <br/> To completely disable the termination function in the module, set the <code>disableTerminate:</code> option in the <code>configuration.yml</code> file to <code>true</code>:
 +
  disableTerminate: 'true'  # Disables termination
 +
|}
 +
{|
 +
|style="padding: 0px 0px 30px 25px;"|[[File:OSP_23_1.png]]
 
|}
 
|}
  
 
=Tips=
 
=Tips=
 
{|
 
{|
|style="padding: 10px 0px 15px 15px;"|1. Please remember that if you integrate OpenStack Projects For WHMCS with [https://www.modulesgarden.com/products/whmcs/advanced-billing Advanced Billing For WHMCS], the cron task should be set no more than once for an hour.  
+
|style="padding: 10px 0px 5px 15px;"|1. The module supports '''OpenStack providers that grant access to the OpenStack API on system admin level'''.<br/> Make sure the account you use has sufficient permissions to manage projects and perform required actions through the API. For more details, see the [https://docs.openstack.org/keystone/latest/admin/service-api-protection.html OpenStack API documentation].  
 
|}
 
|}
 
{|
 
{|
|style="padding: 0px 0px 15px 15px;"|2. Metrics can be calculated basing on '''total''' or '''average usage''' for a given period of time. You can edit this in the following file:
+
|style="padding: 0px 0px 10px 15px;"|2. Please remember that if you integrate OpenStack Projects For WHMCS with [https://www.modulesgarden.com/products/whmcs/advanced-billing Advanced Billing For WHMCS], the cron task should be set no more than once for an hour.
<pre>/yourWHMCS/modules/servers/OpenstackProjects/app/Config/configuration.yml</pre>
+
Find the 'averageBilling' option and set:
+
*'false' for total usage
+
*'true' for average usage
+
 
|}
 
|}
 +
 
{|
 
{|
|style="padding: 0px 0px 30px 25px;"|[[File:OSP_22.png]]
+
|style="padding: 0px 0px 30px 15px;"|3. When using multiple OpenStack servers or products, keep in mind that the quotas configuration ''(quotas.json)'' is shared globally.<br/> To avoid issues during provisioning, make sure all linked servers support the same quota options or leave unsupported ones empty to skip them.
 
|}
 
|}
  
 
=Update Instructions=
 
=Update Instructions=
 
{|
 
{|
|style="padding: 10px 0px 15px 15px;"|An essential guidance through the process of updating the module is offered '''[https://www.docs.modulesgarden.com/How_To_Update_WHMCS_Module here]'''.<br/> '''Before updating''' your OpenStack Projects For WHMCS module '''to version 1.8.0''', it is strongly recommended to '''delete all files (excluding license.php) located in: /yourWHMCS/modules/servers/OpenStackProjects/'''. <br> After a successful upgrade, please proceed to the product's module settings section to ensure a smooth transition.   
+
|style="padding: 10px 0px 20px 15px;"|An essential guidance through the process of updating the module is offered '''[https://www.docs.modulesgarden.com/How_To_Update_WHMCS_Module here]'''.<br/> '''Before updating''' your OpenStack Projects For WHMCS module '''to version 1.8.0''', it is strongly recommended to '''delete all files (excluding license.php) located in: /yourWHMCS/modules/servers/OpenStackProjects/'''. <br> After a successful upgrade, please proceed to the product's module settings section to ensure a smooth transition.   
 
|}
 
|}
 +
 
=Upgrade Guide=
 
=Upgrade Guide=
 
{|
 
{|
|style="padding: 10px 0px 30px 15px;"|Seeking a solution that offers greater flexibility, customization tailored to your precise needs, and unrestricted availability?<br/> There is an option that not only proves to be cost-effective in the long run but also includes prioritized support services, making it a truly valuable investment.<br/>
+
|style="padding: 10px 0px 20px 15px;"|Seeking a solution that offers greater flexibility, customization tailored to your precise needs, and unrestricted availability?<br/> There is an option that not only proves to be cost-effective in the long run but also includes prioritized support services, making it a truly valuable investment.<br/>
  
 
Opt for the [https://www.modulesgarden.com/products/whmcs/openstack-projects#open-source-version Open Source version] of your OpenStack Projects For WHMCS module to unlock these benefits.<br/> Simply click on either the '''Get Source Code''' or '''Upgrade To Lifetime''' button found on the product's page in our client area to complete the one-step upgrade process, with a '''dedicated discount''' already applied.<br/>  
 
Opt for the [https://www.modulesgarden.com/products/whmcs/openstack-projects#open-source-version Open Source version] of your OpenStack Projects For WHMCS module to unlock these benefits.<br/> Simply click on either the '''Get Source Code''' or '''Upgrade To Lifetime''' button found on the product's page in our client area to complete the one-step upgrade process, with a '''dedicated discount''' already applied.<br/>  
Line 842: Line 1,502:
 
=Common Problems=
 
=Common Problems=
 
{|
 
{|
|style="padding: 10px 0px 20px 15px;"|'''1. When you have problems with connection, check whether your SELinux or firewall does not block ports.'''
+
|style="padding: 10px 0px 10px 15px;"|'''1. When you have problems with connection, check whether your SELinux or firewall does not block ports.'''
 
|}
 
|}
 
{|
 
{|
 
|style="padding: 0px 0px 30px 15px;"|2. If you encounter a connection error in the module settings: <br/>
 
|style="padding: 0px 0px 30px 15px;"|2. If you encounter a connection error in the module settings: <br/>
 
'' 'Error:Connection Error: No route to host (Action: GET https://compute-api.svc.vstoragedomain.:8784/v2.1/5dcda23cb9bd4718b32610bbe18a1382/os-availability-zone). Check WHMCS module log for more information' ''<br/>
 
'' 'Error:Connection Error: No route to host (Action: GET https://compute-api.svc.vstoragedomain.:8784/v2.1/5dcda23cb9bd4718b32610bbe18a1382/os-availability-zone). Check WHMCS module log for more information' ''<br/>
 
 
Please make sure the API IP address is public or there is a domain setup. For more details please refer to the official Virtuozzo Hybrid Infrastructure  [https://docs.virtuozzo.com/virtuozzo_hybrid_infrastructure_5_4_admins_guide/index.html#setting-dns-name-for-the-compute-api.html documentation].
 
Please make sure the API IP address is public or there is a domain setup. For more details please refer to the official Virtuozzo Hybrid Infrastructure  [https://docs.virtuozzo.com/virtuozzo_hybrid_infrastructure_5_4_admins_guide/index.html#setting-dns-name-for-the-compute-api.html documentation].
 
|}
 
|}

Latest revision as of 15:30, 16 April 2025

Contents

[edit] About OpenStack Projects For WHMCS

OpenStack Projects For WHMCS is a module that will allow you to provision virtual projects to your customers in a fully automatic manner.
The module has been designed in such a way that your customers can place orders and overview them in the client area.
As an administrator, you are equipped with all key features to keep track of your customers’ projects.
  • Admin Area Features:
✔ Create/Suspend/Unsuspend/Terminate OpenStack Projects
✔ Change Package/Password
✔ Log In To Panel:
✔ With Single Sign-On Support To Virtuozzo Hybrid Infrastructure
✔ View Created Project/User/Domain IDs
✔ View Scheduled Tasks
✔ View Block Storage Limits Usage Statistics
✔ Set Up Project Configuration:
✔ Define Default Domain
✔ Define Client Projects Mode:
✔ Default
✔ Only One Domain Per Client
✔ With Domain Permissions
✔ Without Domain Permissions
✔ Only One Domain And User Per Client
✔ Define Project User Roles
✔ Hide User Password In Client Area
✔ Inherit Domain Roles
✔ Provide OpenStack Panel Web Address
✔ Provide Default Domain/Project/User Name
✔ Select WHMCS Domain Field Content:
✔ Project Name
✔ Domain Name
✔ Disabled
✔ Select Client Area Login Information
✔ Toggle Logging API Requests
✔ Enable Login Restrictions
✔ Toggle Password Removal After Project Creation
✔ Toggle Opening Management Panel In New Window
✔ Select Block Storage Limits For Usage Statistics Widget
✔ Set Up Limits For:
✔ Compute
✔ Block Storage
✔ Network
✔ Load Balancer
✔ Container Infrastructure
✔ Kubernetes
✔ Traits (OpenStack) / Placement Groups (Virtuozzo)
✔ QoS Policy - Minimum Bandwidth Rate Rules
✔ QoS Policy - Maximum Bandwidth Limit Rules
✔ Set Up Module Custom Web And Shell Hooks
✔ Set Up Usage Billing Settings
✔ Set Up Configurable Options Settings
✔ Generate Configurable Options
✔ Set Up OpenID Connect For Single Sign-On To Virtuozzo Hybrid Infrastructure
✔ Run Server Connection Test
  • Client Area Features:
✔ View Project Details:
✔ Web Address
✔ Domain
✔ Username
✔ Password
✔ View Project Servers
✔ View Block Storage Limits Usage Statistics
✔ Manage Login Restrictions:
✔ Enable Temporary Passwords Valid Only For Predefined Time
✔ Secure User Accounts To Prevent Access
✔ Log In To Panel
✔ With Single Sign-On Support To Virtuozzo Hybrid Infrastructure
  • Configurable Options:
✔ Backups
✔ Bandwidth Limit
✔ Bandwidth Limit Rules - Max Egress (kbps)
✔ Bandwidth Limit Rules - Max Egress Burst (kbps)
✔ Bandwidth Limit Rules - Max Ingress (kbps)
✔ Backundwidth Limit Rules - Max Ingress Burst (kbps)
✔ Cores
✔ Endpoint Group
✔ Fixed IP Addresses
✔ Floating IP Address
✔ Floating IP Addresses
✔ Gigabytes
✔ Groups
✔ Hard Limit
✔ Health Monitor
✔ Ike Policy
✔ Injected File Content [Bytes]
✔ Injected File Path [Bytes]
✔ Injected Files
✔ Instances
✔ IPsec Policy
✔ IPsec Site Connection
✔ Key Pairs
✔ Listener
✔ Load Balancer
✔ Member
✔ Metadata Items
✔ Minimum Bandwidth
✔ Minimum Bandwidth Rates Rules - Min Egress (kbps)
✔ Minimum Bandwidth LimitRate Rules - Min Ingress (kbps)<
✔ Network
✔ Per Volume Gigabytes
✔ Pool
✔ Port
✔ RAM [MB]
✔ Role-based Access Control Policy (RBAC Policy)
✔ Router
✔ Security Group
✔ Security Group Device
✔ Security Group Rule
✔ Security Group Rules
✔ Security Groups
✔ Server Group Members
✔ Server Groups
✔ Snapshots
✔ Subnet
✔ Subnet Pool
✔ Traits (OpenStack) / Placement Groups (Virtuozzo)
✔ Volumes
✔ VPN Service
  • Required Components:
✔ Gnocchi (Required For Billing)
  • General Info:
✔ Integrated With Advanced Billing For WHMCS - Actual Project Resource Usage Billing
✔ Integrated With Products Reseller For WHMCS - End-To-End Solution For Products And Servers Reselling
✔ Multi-Language Support
✔ Supports All Providers That Grant Access To OpenStack API On System Admin Level
✔ Supports Latest Stable OpenStack and Previous
✔ Supports OpenStack Gnocchi
✔ Supports Virtuozzo Hybrid Infrastructure
✔ PHP 8.2 Back To PHP 8.1
✔ Supports WHMCS Metric Billing - Integration: CPU, Compute Instance Booting Time, Custom Floating IP Addresses, Custom IP Addresses, Custom Network Incoming Bytes, Custom Network Incoming Packets, Custom Network Outgoing Bytes, Custom Network Outgoing Packets, Default Storage, Disk Device Read Bytes, Disk Device Read Requests, Disk Device Write Bytes, Disk Device Write Requests, Disk Ephemeral Size, Disk Root Size, Floating IP Addresses, IP Addresses, Image Size, Load Balancers, Memory, Memory Usage, Network Incoming Bytes, Network Incoming Packets, Network Outgoing Bytes, Network Outgoing Packets, OS ImagesSnapshot Size, VCPUs, Volume Size, VolumResources OS VCPU Usage, Resources SSD
✔ Supports WHMCS Themes "Six" And "Twenty-One"
✔ Supports WHMCS V8.12 Back To WHMCS V8.9
✔ Requires ionCube Loader V14 Or Later
✔ Easy Module Upgrade To Open Source Version

[edit] Installation and Configuration

This tutorial will show you how to successfully install and configure OpenStack Projects For WHMCS smoothly.

We will guide you step by step through the whole installation and configuration process.

[edit] Installation

1. Log in to our client area and download the module.
OSP 1.png
2. Upload and extract the extension into the main WHMCS directory.

Extracted files in your WHMCS directory should look like this:

OSP 2.png
3. When you install OpenStack Projects For WHMCS for the first time, you have to rename the 'license_RENAME.php' file.

The file is located in '/yourWHMCS/modules/servers/OpenStackProjects/license_RENAME.php'. Rename it from 'license_RENAME.php' to 'license.php'.

OSP 3.png
4. In order to configure your license key, you have to edit the previously renamed 'license.php' file.

Enter your license key between the quotation marks as presented on the following screen.
You can find your license key in our client area → 'My Products'.

OSP 4.png
5. Now you have to activate the module in your WHMCS system.

Log in to your WHMCS administrator area. Go to 'System Settings' 'Addon Modules'.
Afterwards, find 'OpenStack Projects' and press 'Activate' button.

OSP 5 1.png
6. In the next step, you need to permit access to the module.

To do so, click on the 'Configure' button, select administrator groups that should have access to this addon and press 'Save Changes'.

OSP 5 2.png
7. Finally, set up the cron command line provided below and define its frequency (1 minute interval is suggested).
php -q /yourWHMCS/modules/servers/OpenstackProjects/cron/cron.php queue

This enables tasks such as 'suspend resources,' 'unsuspend resources,' 'terminate resources,' and 'lock account' to queue and run.

8. You have just successfully installed OpenStack Projects For WHMCS!

You can access your module under 'Addons' 'OpenStack Projects'.

[edit] Configuration of Server

Before you can go on, you need to copy your 'API Details' . You will need them to connect with the server successfully.

Proceed to your 'OpenStack' panel. All necessary information will be found in the 'View Credentials' section under 'API Access' .

OSP 6.png
9. Now, log in to your WHMCS and proceed to 'System Settings' 'Products/Services' 'Servers' and press 'Add New Server'.
OSP 7.png
10. Next, enter your server 'Name' , 'Hostname' , 'IP Address' and select 'Openstack Projects' from the 'Module' field.

Now, provide your 'OpenStack Server Details' . To download the 'Identity Version' , you need to click 'Get Versions' next to 'Identity Port/Path' .
Make sure that your server connection is correct and save changes.

Important: The module supports OpenStack providers that allow access to the OpenStack API with system admin-level permissions.
To ensure proper operation, use an account with the necessary rights to manage projects and perform actions through the API.
Learn more about access roles in the OpenStack API guide.

OSP 8.png
Integration with Virtuozzo Hybrid Infrastructure

If you you use Virtuozzo Hybrid Infrastructure (VHI) – OpenStack from Virtuozzo, please use the following guide:

1. WHMCS server must have access to VHI OpenStack API, please open the required ports according to the guide

2. Configure OpenStack endpoint OpenStack endpoint

3. Use system admin or domain admin credentials to access the cluster from WHMCS side:

  • Name: any name
  • Hostname: VHI domain name
  • Module: OpenStack Projects
  • Username: admin
  • Password
  • User Type: Select between "System Admin" and "Domain Admin"
  • Identity Port/Path: 5000
  • Identity Version: V3
  • Domain: Default
  • Project ID: ID of the “admin” project from the Default domain
  • Secure: Yes

Use the above data to fill out the server creation form in the WHMCS admin area.

OSP 8 1.png
11. It is time to create a server group. To do so, click on 'Create New Group' .
OSP 9.png
12. Enter a name, click on your previously created server, press 'Add' and afterward 'Save Changes' .

Important: Please do not add more than one server into a single server group, as the module always fetches data from the first server listed in the group.
It is recommended to create one group per server configuration to prevent potential issues.

OSP 10.png

[edit] Configuration of Product

13. In order to create and configure a product, go to 'System Settings' 'Products/Services' 'Products/Services'.

Click on 'Create a New Group'.

OSP 11.png
14. Enter your product group name and press 'Save Changes'.
OSP 12.png
15. Once you have a product group, you can create a new product.

To do so, click 'Create a New Product'.

OSP 13.png
16. Afterward, choose your product type, enter your product name, choose module and the product group from the dropdown menus. Press 'Continue'.
OSP 14.png
17. Now, go to the 'Module Settings' section, choose your previously created server group from the dropdown menu.
OSP 15.png
18. Now, let's start configuring the settings.

Note: The below description refers to the "VHI" product configuration.

Configuration:

  • Default Domain - choose a default domain for new projects based on this product or create a new domain. Note: The option to create new domains is not available if "Domain Admin" is set as the User Type in the server configuration.
  • Client Projects Mode - select a preferred mode that defines how new hostings will be created.
  • Project User Roles - define default roles for a new user. Keep in mind that the choice of roles determines the level of allowed permissions. For example, select the image_upload role if you wish to be allowed to upload OS images.
    • Inherit Domain Roles - enable if the Domain User Role should be inherited from the Project User Roles or defined separately.
      Note that this option is dependent on the 'Default Domain' setting. More about User Roles can be found here.
    • Domain User Roles - if the above 'Inherit Domain Roles' is disabled, this setting appears; here you may choose a default role in the domain for a new user based on this product.
      This setting, if not left empty, overwrites the 'with and without domain permissions' selections in the 'Client Projects Mode' option.
  • Hide User Password - enable to hide the user password after project creation, the feature is particularly useful for authentication with the OpenID protocol.
  • OpenStack Panel Web Address - is the web address for the login page to the OpenStack panel.
  • Default Domain Name - enter a domain that will be used when the domain name is not provided. Available variables: {clientId}, {serviceId} and {rand}.
  • Default Project Name - enter a project name used when creating a new project. If left empty, the domain name will be used instead. Available variables: {clientId}, {serviceId} and {rand}.
  • Default User Name - enter a user name used when creating a new user. Available variables: {clientId}, {serviceId} and {rand}.
  • Domain Field Content - specify the content data that will overwrite the WHMCS Domain Field.
  • Client Area Login Information - select which login elements should be visible in the "Server Information" table in the client area. Choose from: username, password, domain and web address.
  • Log API Requests - if you enable it, information on API requests will be stored in the 'Module Log' section in your WHMCS.
  • Login Restrictions - this enables a feature that enhances security by only issuing temporary passwords that ensure access is granted only for as long as needed.
  • Remove Password - if enabled, the password will be removed from the database as soon as the project is created.
  • Open Management Panel In New Window - decide whether the management panel should open in the same or a new window.
  • Block Storage Limits Widget - block storage resource usage can be displayed in the admin and client area, include at least one resource to enable.
OSP 16.png

Compute, Block Storage, Network, Load Balancer, Container Infrastructure, Traits -
These sections may vary depending on the project, some of them might be unavailable for your OpenStack project. You may easily adjust your product to your needs by modifying the available options. Type '-1' for unlimited.
Note: Keep in mind that in the case of the Virtuozzo server 'Traits' stand for 'Placement Groups' endpoints.

OSP 16 1.png
In the QoS Rules configuration, certain QoS rules are consolidated into a single rule and respectively into a single configurable option.
OSP 16 5.png

[edit] Module Hooks

Module Custom Web Hooks - here you may add the URL with WHMCS parameters to perform additional actions after the create/suspend/unsuspend/terminate/change package actions.
These hooks allow you to trigger actions on external servers or services via HTTP requests when certain events occur in WHMCS.

OSP 16 2.png

Module Custom Shell Hooks - enter the commands with WHMCS parameters to perform additional actions after the create/suspend/unsuspend/terminate/change package actions.
These hooks allow you to execute shell commands on your server when specific WHMCS package actions are triggered.
Please refer to the following section to correctly set up the openID configuration to connect to VHI correctly.

OSP 16 0.png
19. Optionally, you may configure the "Usage Billing Settings" that will be utilized for the Advanced Billing For WHMCS integration.

Select specific networks and IP address versions for custom parameter calculations.

Important: Virtual Machines are billed only when they are directly connected to a custom network marked for billing by the administrator '(Custom Network Metric Statistics)'.
If a VM is connected to the administrator's network via an intermediary router, that network will not be billed. Only networks directly assigned to the VM are considered billable.

Note: Advanced Billing For WHMCS version 4.x is required, previous versions are not supported.

OSP 16 4.png

[edit] Configurable Options

20. At the end of the configuration process, you can enable 'Metric Billing' and decide whether you want to generate configurable options for the product.

Configurable options can be used by your clients to select each virtual machine parameter individually during order placement.
Otherwise, if configurable options are not defined, then the fixed parameters specified in the earlier configuration will be used instead.
If you decide to use configurable options, select the configurable options unit and then press the 'Create Configurable Options' button.

There is also an 'Alternative Mode' available, which changes the way the configurable options values are verified and calculated.
Select single configurable options and their values will be summed with the default product configuration values instead of overwriting them.

OSP 16 3.png
OSP 17.png
Now, select which options you want to generate and confirm by clicking 'Create' .
Note that the configuration for disabled options will still be taken from the configuration of the main product.
More information about how to use configurable options can be found here or in the official WHMCS documentation.
OSP 18.png
There are specific exceptions where options must be configured together to create a functional rule.
The following rules must be set together, as the API requires several parameters to be specified, therefore they are now combined into one configurable option for your comfort of use. These are:
  • Packet Rate Limit combines the following:
    • Packet Rate Limit Rules - Max Egress (kpps) - maxEgressKpps: 0
    • Packet Rate Limit Rules - Max Egress Burst (kpps) - maxEgressBurstKpps: 0
    • Packet Rate Limit Rules - Max Ingress (kpps) - maxIngressKpps: 0
    • Packet Rate Limit Rules - Max Ingress Burst (kpps) - maxIngressBurstKpps: 0

Configured as: maxEgressKpps: 0,maxEgressBurstKpps: 0,maxIngressKpps: 0,maxIngressBurstKpps: 0|Unit

  • Bandwidth Limit combines the following:
    • Bandwidth Limit Rules - Max Egress (kbps) - maxEgressKbps: 0
    • Bandwidth Limit Rules - Max Egress Burst (kbps) - maxEgressBurstKbps: 0
    • Bandwidth Limit Rules - Max Ingress (kbps) - maxIngressKbps: 0
    • Bandwidth Limit Rules - Max Ingress Burst (kbps) - maxIngressBurstKbps: 0

Configured as: maxEgressKbps: 0,maxEgressBurstKbps: 0,maxIngressKbps: 0,maxIngressBurstKbps: 0|Unit

  • Minimum Bandwidth combines the following:
    • Minimum Bandwidth Rate Rules - Min Egress (kbps) - minEgressKbps: 0
    • Minimum Bandwidth Rate Rules - Min Ingress (kbps) - minIngressKbps: 0

Configured as: minEgressKbps: 0,minIngressKbps: 0|Unit

  • Minimum Packet Rate combines the following:
    • Minimum Packet Rate Rules - Min Egress (kbps) - minEgressKpps: 0
    • Minimum Packet Rate Rules - Min Ingress (kbps) - minIngressKpps: 0

Configured as: minEgressKpps: 0,minIngressKpps: 0|Unit

OSP 16 7.png
For example:

In the QoS Policy generate the following configurable options:

  • Minimum Bandwidth: minEgressKbps: 50,minIngressKbps: 60|Unit
  • Bandwidth Limit: maxEgressKbps: 70,maxEgressBurstKbps: 80,maxIngressKbps: 90,maxIngressBurstKbps: 100|Unit

This will result in the following configuration (overwriting the product configuration QoS Rules):

OSP 16 6.png

[edit] User Roles Configuration

Roles, or in other words permissions, in OpenStack can be assigned to users, they can be associated with either a domain or a project.
  • Domain - on top of the hierarchy in OpenStack, domain includes all projects and users
    • User - a user can have domain roles and project roles assigned, when you log into OpenStack, you log into a user
    • Project - projects are created with the OpenStack Project For WHMCS module. It includes all remaining elements that are visible after logging into the user's panel, for example: virtual machines or networks
Move to 'Products/Services' → 'Module Settings' → 'Configuration'. There you will find all the options associated with the roles configuration:
OSP 18 1.png
  • Default Domain:
    • {exemplary_domain} - 'Project' and ' User' are created in a selected domain; the 'Inherit Domain Roles' switcher and 'Domain User Roles' dropdown disappear, this is where permissions to the domain are not granted
    • Create New One - if this option is selected, look at the 'Client Projects Mode' setting, as its selection is decisive now (a new domain per client or per service in WHMCS is created, all client services must have all projects assigned to one domain).
  • Client Projects Mode
    • Default - every hosting creates a new domain (project and user), in this case name generated in 'Default Domain Name' should be unique (e.g. dependent on the Service ID in WHMCS)
    • Only one domain per client (with domain permissions) - the first service of the clients creates a domain, every next one assigns project and the new user to that domain (a user has all the permissions to the domain)
    • Only one domain per client (without domain permissions) - the first service of the clients creates a domain, every next one assigns project and the new user to that domain (a user has no permissions to the domain)
    • Only one domain and user per client - the first service of the client creates a domain and a user, every next service creates a project only within the existing domain
  • Project User Roles - assigning project roles to a user, for example you need to select here the "image_upload" role to allow uploading images
  • Inherit Domain Roles - if enabled, the user has the same roles assigned for both the domain and for the project
  • Domain User Roles - if the above 'Inherit Domain Roles' option is disabled, the user has the selected here domain roles assigned and the 'with/without domain permissions' settings are overwritten.
    If left empty, the 'with/without domain permissions' setting is taken into consideration.
Important: When upgrading from 1.3.0 to 1.4.0 module version and you do not save changes in the module settings the roles will work as in the previous version.

[edit] Quota Configuraton Guide

[edit] Adding Quotas Using CLI

Before configuring quotas, it's essential to identify which quotas your OpenStack environment supports.

To set quotas via the module, they must be added to the quotas.json file at: /modules/servers/OpenstackProjects/app/Config/quotas.json. This file defines the default quota values for projects managed by the module.

Use the following CLI commands to list available quotas from your OpenStack environment:

openstack quota show --compute -f json
openstack quota show --network -f json
openstack quota show --volume -f json
openstack loadbalancer quota show default -f json
openstack coe quota list
openstack trait list   
Next, edit the 'quotas.json', ensure that the quotas specified align with the capabilities and limitations of your OpenStack setup.

Important:
Please note that the values defined in the 'quotas.json' file serve as default settings.
You can override these default settings in individual product configurations to create specific project requirements.
For instance, setting a quota value to -1 indicates an unlimited allocation for that resource.

Example Configuration For Compute, Network, and Volume Quotas
  • Run the command: openstack quota show --compute -f json
  • The following output may return:
 [
 {
   "Resource": "cores",
   "Limit": -1
 },
 {
   "Resource": "instances",
   "Limit": -1
 },
 {
   "Resource": "ram",
   "Limit": -1
 },
 {
   "Resource": "fixed_ips",
   "Limit": null
 },
 {
   "Resource": "floating_ips",
   "Limit": null
 },
 {
   "Resource": "networks",
   "Limit": null
 },
 {
   "Resource": "security_group_rules",
   "Limit": null
 },
 {
   "Resource": "security_groups",
   "Limit": null
 },
 {
   "Resource": "injected-file-size",
   "Limit": 10240
 },
 {
   "Resource": "injected-path-size",
   "Limit": 255
 },
 {
   "Resource": "injected-files",
   "Limit": 5
 },
 {
   "Resource": "key-pairs",
   "Limit": -1
 },
 {
   "Resource": "properties",
   "Limit": 128
 },
 {
   "Resource": "server-group-members",
   "Limit": -1
 },
 {
   "Resource": "server-groups",
   "Limit": -1
 }
 ]
  • Following the structure:
 "compute": {
  "quota_resource_name": "default_limit_value"
 }
  • The corresponding quotas.json entry would be:
 "compute": {
  "cores": -1,
  "instances": -1,
  "ram": -1,
  "fixed_ips": null,
  "floating_ips": null,
  "networks": null,
  "security_group_rules": null,
  "security_groups": null,
  "injected-file-size": 10240,
  "injected-path-size": 255,
  "injected-files": 5,
  "key-pairs": -1,
  "properties": 128,
  "server-group-members": -1,
  "server-groups": -1
 }
Example Configuration For Load Balancer Quota
  • Run the command: openstack loadbalancer quota show default -f json
  • The following output may return:
 {
  "load_balancer": 0,
  "listener": -1,
  "pool": -1,
  "health_monitor": -1,
  "member": -1,
  "l7policy": -1,
  "l7rule": -1
 }   
  • This should be added to quotas.json under the loadBalancer key:
 "loadBalancer": {
  "load_balancer": 0,
  "listener": -1,
  "pool": -1,
  "health_monitor": -1,
  "member": -1,
  "l7policy": -1,
  "l7rule": -1
 }  
Example Configuration For Container Infrastructure Quota
  • Running the command: openstack coe quota list
  • May return:
project_id resource hard_limit
5dcda23cb9bd4718b32610bbe18a1382 Cluster 20
  • This should be added under the containerInfra key:
"containerInfra": {
 "hard_limit": 20
}  
Example Configuration For Placement / Traits
  • Running the command: openstack trait list
  • May return:
name
COMPUTE_NET_VIF_MODEL_SRIOV
HW_CPU_AARCH64_FCMA
HW_CPU_X86_AMD_SSBD
HW_NIC_OFFLOAD_GSO
CUSTOM_MG
CUSTOM_HCI_5EDCF1C91EEC41839078D7C9FF3F6A46
CUSTOM_HCI_9F5665A0B47C40438E20F0B866B79703
CUSTOM_HCI_D3E179EFBF1F42FF854C791410C82B66
  • For example, if CUSTOM_MG is required, add:
"traits": {
 "CUSTOM_MG": 1
}  

[edit] Block Storage Quota Configuration

To configure available quotas, update the following file:
modules/servers/OpenstackProjects/app/Config/quotas.json  

Manually add additional storage types to block storage as needed. To set a volume size limit for block storage, modify the blockStorage configuration object.

Example Configuration for SSD Volume Type

To specify an unlimited quota for SSD volumes, use the following setting:

"gigabytes_ssd": -1  


After making changes, the blockStorage section of the file should resemble:

 "blockStorage": {
   ....
   "gigabytes_default": -1,
   "gigabytes_ssd": -1
 }

Once the file is updated and the page is refreshed, the new quota will be reflected in the Block Storage section.

Important: If you have multiple OpenStack Project servers connected to WHMCS and use more than one OpenStack product, remember that the quotas configuration is global.
All linked servers must support the same settings defined in quotas.json.
If a server lacks a particular feature, provisioning may fail unless you either align all server configurations or leave the affected quota fields empty to skip them.

[edit] Default Quota Configuration

Below is an example of the default quotas.json configuration.
By ensuring these settings are correctly configured, your OpenStack Projects For WHMCS module will properly enforce quotas across your environment.
 {
 "compute": {
   "cores": -1,
   "fixed_ips": -1,
   "floating_ips": -1,
   "injected_file_content_bytes": 10240,
   "injected_file_path_bytes": 255,
   "injected_files": 5,
   "instances": -1,
   "key_pairs": -1,
   "metadata_items": 128,
   "ram": -1,
   "security_group_rules": -1,
   "security_groups": -1,
   "server_group_members": -1,
   "server_groups": 30
 },
 "blockStorage": {
   "volumes": 100,
   "per_volume_gigabytes": 50,
   "snapshots": 100,
   "gigabytes": 300,
   "backups": 10,
   "backup_gigabytes": 200,
   "volumes_default": -1,
   "gigabytes_default": -1,
   "snapshots_default": -1,
   "groups": 10
 },
 "network": {
   "network": -1,
   "subnet": -1,
   "subnetpool": -1,
   "port": -1,
   "router": -1,
   "floatingip": -1,
   "rbac_policy": -1,
   "security_group": -1,
   "security_group_rule": -1,
   "security_group_device": -1,
   "endpoint_group": -1,
   "vpnservice": -1,
   "ipsec_site_connection": -1,
   "ipsecpolicy": -1,
   "ikepolicy": -1
 },
 "loadBalancer": {
   "load_balancer": -1,
   "listener": -1,
   "member": -1,
   "pool": -1,
   "health_monitor": -1
 },
 "containerInfra": {
   "hard_limit": 20
 },
 "traits": {}
 }  

[edit] Management

OpenStack Projects For WHMCS is a module that will allow you to provision virtual projects to your customers in a fully automatic manner.

Check the manual below to learn how to configure the module to take all the advantages it has to offer.

[edit] Addon Module

While management of specific projects mostly takes place in the admin area, functions that affect the whole module can be found in the addon.
See the section below for an in depth explanation of each of them.

[edit] Queue

At the top of this section you will find information regarding the cron job.

The task cards can be used to filter the task table underneath.

OSP 18 2 1.png
Cron job tasks sent to the server through the module can be viewed and managed here.
The basic information includes:
  • ID - identification number unique to each task.
  • Related Item - the product related to the task. Clicking on it will take you to its product page.
  • Status - the current status of the task (finished, running, pending, waiting or error).
  • Task - specific action that the task attempts to run, these are:
    • Lock Account
    • Suspend Resources
    • Unsuspend Resources
    • Terminate Resources
  • Attempts - the number of times the task was attempted.
  • Created At - the date when the task was first created.
  • Updated At - the date when the status of the task was last updated.
OSP 18 2.png
On the right side of the tasks list you will find the action buttons. These are in order:
  • Details - access more in-depth information about the task, including error logs.
  • Run - attempt to run the task one more time.
  • Delete - remove the task from the queue and the list.
OSP 18 3.png
Moreover, you can change additional settings by clicking on the three dots above the basic actions.
  • Auto Prune - toggle the switch on to enable the task auto prune feature, which will delete the tasks after the specified time has passed.
  • Auto Prune Older Than - specify the number of days that have to pass before a task is automatically pruned.
  • Display 'Cron Job Configuration' Hint - disable to hide the cron job information.
OSP 18 6.png
Remember to make use of the search bar when you need to find a specific task, and the mass action feature, when you need to delete multiple tasks at once.
OSP 18 4.png

[edit] Translations

Customizing language files is now extremely easy with the "Translations" tool that is now available directly in the addon.
Its user-friendly design makes managing various language file tweaks a smooth and efficient process.

Prepare translations for the original English files with this handy built-in tool. For specific instructions on how to use this tool please refer to its dedicated article, you will find it here.

OSP 18 5.png

[edit] Admin Area

OpenStack Projects For WHMCS allows you to supervise and manage your customer products from the admin area of your WHMCS system.

This includes supervision of such features as:

  • Log In To Control Panel – redirecting to the OpenStack login page.
  • Configurable options that enable you to view the chosen server details (if applicable)
  • Module commands to allow easy and quick management of the server
    • Create – creating a new user, a new project with a set of limits.
    • Suspend – unassigning a project from the user to prevent a user from managing their resources.
    • Unsuspend – assigning back a project from a user.
    • Terminate – removing a project and removing a user (if they do not have any other projects assigned at OpenStack).
    • Change Package – upgrading resources of the project.
    • Change Password – changing the password of the main user in the project.
      Note: To change the password input the new password in the 'Password' field, scroll down to the bottom of the page to 'Save Changes' and when the page reloads, click on 'Change Password'.
  • Scheduled Tasks - data on all scheduled tasks, their status, attempts, and dates.
  • Block Storage Limits - if the option is enabled in the module settings, block storage resources usage will be displayed here.
  • Metric Statistics - the section is completed with all metrics the module can observe.
OSP 19.png

[edit] Ordering New Projects

Thanks to configurable options, you are able to offer a product that your clients can match to their needs.
Additionally, you are able to set up pricing for each configurable option, which makes your offer even more competitive.
OSP 20.png

[edit] Importing Existing Project

You can easily import existing projects into the module by following the instructions provided below:

1. Find a client to whom you want to assign a project.
2. Create a new service, but do not use the 'Create' action.
3. Edit the service by entering the information in every field highlighted in the image below, besides the Dedicated IP.
4. Ensure that product settings mirror the ones set up on the OpenStack side.
5. Change the service status to active.
6. Press the 'Save Changes' button.

OSP 20 1.png

[edit] Client Area

The client area interface of OpenStack Projects For WHMCS looks like this.

As you can see, you may easily be redirected to the 'OpenStack' login page. Moreover, you can check the 'Configurable Options ' and 'Metrics Billing'.
At the bottom of the page, you may find the 'Project Servers' list, which allows you to tell each server's status at a glance.
You can change your password by clicking on the button under 'Actions' in the side menu.

OSP 21.png
If the 'Login Restrictions feature is enabled for your product, you will also find an additional quick access shortcut.
  • Secure Account - use the lock icon to secure the user account to make it inaccessible until an administrator manually intervenes to reset the password or restore user access.
  • Temporary Access - use the key icon to generate a password for the user, that will work only for a specified time.
OSP 21 2.png

[edit] OpenID Configuration (VHI)

[edit] Customer Domain

Follow the below instruction step by step to allow adding OpenID configuration automatically:

1. Configure OpenID in WHMCS, read the following article to learn how to proceed.
2. Open file: vhi-integration/vinfra-cmd and enter the below enumerated data:

 ### VHI ACCESS DETAILS
 export VINFRA_PORTAL=
 export VINFRA_USERNAME=
 export VINFRA_PASSWORD=""
 export VINFRA_PROJECT=""
 
 ### WHMCS OPENID CONFIGURATION
 ISSUER="" 
 CLIENT_ID=""
 CLIENT_SECRET="" 

3. Move to the product 'Module settings' → 'Module Custom Shell Hooks' section. There add content to the 'Create' and ' Terminate' actions, for example:
Create:

 /home/yourWHMCS/vhi-integration/vinfra-cmd -d {$customfields.DomainName} -a create -n {$customfields.DomainName}

Terminate:

 /home/yourWHMCS/vhi-integration/vinfra-cmd -d {$customfields.DomainName} -a delete -n {$customfields.DomainName}
OSP 22 2.png
4. Again, in the 'Module Settings → 'Configuration' → 'Default Domain' select the Create New One option.
OSP 22 0.png

5. Run 'Create' module command.
6. Press the 'Log into Panel ' button, and you will be redirected to the "Sign in" pop-up, press Sign in with 'your_user_name'.

Important: You must have the vinfra program installed in /usr/bin catalog. Please contact the Virtuozzo team to get it.

OSP 22 6.png
Additional steps required:

1. OpenID Connect → Authorized Redirect URIs. Type in the VHI address that connects to your WHMCS, use the formula:

https://VHI_DOMAIN:8800 

and/or

https://VHI_DOMAIN:8800/api/v2/login/idp/
OSP 22 1.png
2. Add the below lines to the .htaccess file:
Order allow,deny
Allow from 138.128.150.246
Allow from 192.168.5.91
satisfy any


RewriteEngine On
RewriteRule ^.well-known/openid-configuration ./oauth/openid-configuration.php [L,NC]
3. Domain and WHMCS system URLs must have https protocol:
OSP 22 3.png
4. Enter the login link into the OpenStack Panel web address
OSP 22 4.png

[edit] Predefined Domain

Follow the below instruction step by step to use a predefined domain for OpenID configuration:

1. Configure OpenID in WHMCS, read the following article to learn how to proceed.
2. Make sure your product 'project_admin' included in 'Project User Roles' and a domain under 'Default Domain' in the product configuration.

OSP 22 5.png
3. Configure OpenID in VHI.
Remember to include the same domain that has been used during product configuration in WHMCS after the '=' symbol in 'Metadata URL'.
OSP 22 7.png
4. Select 'Authorization Code Flow'.
OSP 22 8.png

[edit] Custom Scope Configuration

Due to differences in policy configurations across various OpenStack environments, each API request now has a configurable authentication method.
This configuration is managed through the auth.yml file located in app/Config/auth.yml. The file contains settings for two user types: System Admin and Domain Admin.
The appropriate configuration is loaded based on the server settings.

[edit] Configuration Structure

The auth.yml file is structured into two sections:
  • systemAdmin – Contains authentication settings for requests made by System Admin user type.
  • domainAdmin – Contains authentication settings for requests made by Domain Admin user type.

Each section contains:

  • default - A default authentication method, used when no specific request configuration is defined.
  • Custom authentication methods for specific API requests that require unique authorization.

[edit] Exemplary Configuration

System Admin Configuration
 systemAdmin:
 default:
   authUrl: "{$server.authUrl}"
   auth:
     identity:
       methods:
         - "password"
       password:
         user:
           name: "{$server.username}"
           domain:
             name: "{$server.domain}"
           password: "{$server.password}"
     scope:
       project:
         id: "{$server.projectId}"
 "network.v2.actions.floating_ips.get.get":
   auth:
     identity:
       methods:
         - "password"
       password:
         user:
           name: "{$server.username}"
           domain:
             name: "{$server.domain}"
           password: "{$server.password}"
     scope:
       project:
         id: "{$service.projectId}"
         domain:
           name: "{$service.domainName}"
 

Domain Admin Configuration

 domainAdmin:
 default:
   authUrl: "{$server.authUrl}"
   auth:
     identity:
       methods:
         - "password"
       password:
         user:
           name: "{$server.username}"
           domain:
             name: "{$server.domain}"
           password: "{$server.password}"
     scope:
       project:
         id: "{$server.projectId}"
         domain:
           name: "{$server.domain}"
 "identity.v3.actions.users.delete.delete":
   auth:
     identity:
       methods:
         - "password"
       password:
         user:
           name: "{$server.username}"
           domain:
             name: "{$server.domain}"
           password: "{$server.password}"
     scope:
       domain:
         name: "{$server.domain}"  
Explanation:
  • The default authentication method is used for general API requests and for retrieving the service catalog.
  • If a specific request requires a unique authentication method, it is explicitly defined within the configuration.
    For example:
    • network.v2.actions.floating_ips.get.get for System Admins overrides the default configuration
    • identity.v3.actions.users.delete.delete for Domain Admins uses a custom authentication scope.

[edit] Adding Custom Authentication Scope

If a specific API request is not functioning as expected due to scope limitations, a custom authentication method can be defined. To do this:

1. Enable API logging in the module settings: Log API Requests.

OSP 24.png
2. Identify the problematic API request from the logs.
OSP 24 1.png
3. Add a new authentication scope to auth.yml for the relevant user type.

To add custom authentication for the network.v2.actions.qo_s_policy.create.post request under Domain Admin, modify the auth.yml file:

domainAdmin:
 "network.v2.actions.qo_s_policy.create.post":
   auth:
     identity:
       methods:
         - "password"
       password:
         user:
           name: "{$server.username}"
           domain:
             name: "{$server.domain}"
           password: "{$server.password}"
     scope:
       project:
         id: "{$service.projectId}"
         domain:
           name: "{$service.domainName}"
 

After this modification, the request network.v2.actions.qo_s_policy.create.post will no longer use the default authentication but instead use the newly defined scope.

OSP 24 2.png

[edit] Replacement Fields

In the auth.yml configuration, several replacement fields dynamically pull values from the OpenStack environment and server configuration:
Replacement Fields Description
1. $service.password Password from the service.
2. $service.username Username from the service.
3. $service.domainName Domain name from the DomainName field.
4. $service.domainId Domain ID from the DomainId field.
5. $service.projectId Project ID from the ProjectId field.
6. $server.host Server IP address.
7. $server.protocol HTTP/HTTPS based on server settings.
8. $server.username Username from the server configuration.
9. $server.password Password from the server configuration.
10. $server.domain Domain from the server configuration.
11. $server.projectId Project ID from the server configuration.
12. $server.userType User type (Domain Admin / System Admin).
13. $server.identityVersion Identity version from server configuration.
14. $server.identityPath Identity path from the server configuration.

[edit] Manual Configuration in File

The configuration.yml file located at /yourWHMCS/modules/servers/OpenstackProjects/app/Config/configuration.yml allows you to configure advanced options:
1. Usage metrics calculation
Metrics can be calculated based on total or average usage for a given period. Modify this in configuration.yml by setting the averageBilling option:
averageBilling: 'false'  # Total usage  
averageBilling: 'true'   # Average usage
OSP 22.png
2. Disabling usage metrics
If you have a large database, disabling usage metrics may improve performance. Set the disableUsageMetrics option:
disableUsageMetrics: true  # Disables usage metrics 
OSP 23.png
3. Disabling module termination option
To completely disable the termination function in the module, set the disableTerminate: option in the configuration.yml file to true:
 disableTerminate: 'true'  # Disables termination
OSP 23 1.png

[edit] Tips

1. The module supports OpenStack providers that grant access to the OpenStack API on system admin level.
Make sure the account you use has sufficient permissions to manage projects and perform required actions through the API. For more details, see the OpenStack API documentation.
2. Please remember that if you integrate OpenStack Projects For WHMCS with Advanced Billing For WHMCS, the cron task should be set no more than once for an hour.
3. When using multiple OpenStack servers or products, keep in mind that the quotas configuration (quotas.json) is shared globally.
To avoid issues during provisioning, make sure all linked servers support the same quota options or leave unsupported ones empty to skip them.

[edit] Update Instructions

An essential guidance through the process of updating the module is offered here.
Before updating your OpenStack Projects For WHMCS module to version 1.8.0, it is strongly recommended to delete all files (excluding license.php) located in: /yourWHMCS/modules/servers/OpenStackProjects/.
After a successful upgrade, please proceed to the product's module settings section to ensure a smooth transition.

[edit] Upgrade Guide

Seeking a solution that offers greater flexibility, customization tailored to your precise needs, and unrestricted availability?
There is an option that not only proves to be cost-effective in the long run but also includes prioritized support services, making it a truly valuable investment.

Opt for the Open Source version of your OpenStack Projects For WHMCS module to unlock these benefits.
Simply click on either the Get Source Code or Upgrade To Lifetime button found on the product's page in our client area to complete the one-step upgrade process, with a dedicated discount already applied.

Follow a comprehensive guide covering the transition process, the advantages it brings, and step-by-step instructions on what to do next after the order has been successfully finalized.

[edit] Common Problems

1. When you have problems with connection, check whether your SELinux or firewall does not block ports.
2. If you encounter a connection error in the module settings:

'Error:Connection Error: No route to host (Action: GET https://compute-api.svc.vstoragedomain.:8784/v2.1/5dcda23cb9bd4718b32610bbe18a1382/os-availability-zone). Check WHMCS module log for more information'
Please make sure the API IP address is public or there is a domain setup. For more details please refer to the official Virtuozzo Hybrid Infrastructure documentation.

Navigation
WHMCS Modules
WHMCS Widgets
Tools And Applications
Translations
cPanel Modules
General
FAQ
Community
OpenStack Projects For WHMCS