|
|
| (16 intermediate revisions by one user not shown) |
| Line 2: |
Line 2: |
| | <meta name="description" content="ModulesGarden Wiki Contains All The Information You Need About The OpenStack VPS & Cloud For WHMCS Module."></meta> | | <meta name="description" content="ModulesGarden Wiki Contains All The Information You Need About The OpenStack VPS & Cloud For WHMCS Module."></meta> |
| | | | |
| − | <h4 style="color: #ff0000; font-weight:bold; text-align:center;">This article is currently being updated, so you might notice missing images, incomplete sections, or temporarily broken links. <br/>Thanks for your patience while we get everything up to date! | + | <h4 style="color: orange; font-weight:bold; text-align:center;"> |
| | + | Important: Please read the [[#Migration_To_Version_3.X|upgrade guide]] before updating to version 3.0.<br/> |
| | + | This release requires manually starting the migration tool to begin the process properly.<br/> |
| | + | Thank you for your understanding! |
| | </h4> | | </h4> |
| | | | |
| Line 212: |
Line 215: |
| | |} | | |} |
| | {| | | {| |
| − | |style="padding: 0px 0px 0px 30px;"|✔ Toggle VM Protection From WHMCS Reinstallation | + | |style="padding: 0px 0px 0px 30px;"|✔ Toggle VM Protection From Reinstallation |
| | |} | | |} |
| | {| | | {| |
| Line 443: |
Line 446: |
| | |} | | |} |
| | {| | | {| |
| − | |style="padding: 0px 0px 0px 30px;"|✔ Supports PHP 8.3 Back To PHP 8.1 | + | |style="padding: 0px 0px 0px 30px;"|✔ Supports PHP 8.3 Back To PHP 8.2 |
| | |} | | |} |
| | {| | | {| |
| − | |style="padding: 0px 0px 0px 30px;"|✔ Supports WHMCS Themes "Six", "Twenty-One" And "Lagom WHMCS Client Theme" | + | |style="padding: 0px 0px 0px 30px;"|✔ Supports WHMCS Themes "Six", "Twenty-One", "Nexus" And "Lagom WHMCS Client Theme" |
| | |} | | |} |
| | {| | | {| |
| − | |style="padding: 0px 0px 0px 30px;"|✔ Supports WHMCS V8.13 Back To WHMCS V8.10 | + | |style="padding: 0px 0px 0px 30px;"|✔ Supports WHMCS V9.X Back To WHMCS V8.10 |
| | |} | | |} |
| | {| | | {| |
| Line 535: |
Line 538: |
| | |style="padding: 0px 0px 15px 15px;"|'''10. Next, enter your server name and connection details.<br/> | | |style="padding: 0px 0px 15px 15px;"|'''10. Next, enter your server name and connection details.<br/> |
| | | | |
| − | '''''Important:''' The module supports OpenStack providers that allow access to the '''OpenStack API with project admin-level permissions or higher'''.<br/> The list in the 'Features' section includes key examples, but other providers can also be used, as long as the account has the necessary rights to 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.]'' <br/> | + | '''''Important:''' The module supports OpenStack providers that allow access to the '''OpenStack API with project admin-level permissions or higher'''.<br/> |
| | + | The list in the '' 'Features' '' section includes key examples, but other providers can also be used, provided that the account has sufficient permissions to perform the required 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.]''<br/> |
| | | | |
| − | * Provide your OpenStack '''IP address or hostname'''. | + | * Provide your OpenStack '''IP address or hostname'''. |
| | + | * '''Module''' – select '' 'OpenStack VPS & Cloud' '' from the dropdown menu. |
| | + | * '''Username''' and '''Password''' – enter your OpenStack administrator credentials. |
| | + | * Click '''Configure''' to open the server configuration window: |
| | + | ** '''Identity Port/Path''' – specify the API endpoint port or path, if required. You can find it in the OpenStack '' 'API Access' '' section under '' 'Service Endpoint' ''.<br/>The path segment appears between the hostname/IP address and the API version or port. Leave this field empty if it is not required. |
| | + | ** Click '''Load Versions''' to retrieve the supported OpenStack Identity API versions. |
| | + | ** '''Identity Version''' – select the OpenStack Identity API version ('''v2''' or '''v3''').<br/>'''''Important:''' If the dropdown list is empty, verify that the '' 'IP Address/Hostname' '', '' 'Identity Port/Path' '', '' 'Secure' '', and '' 'Port' '' fields have been configured correctly.'' |
| | + | ** '''Project ID''' – enter the ID of the OpenStack project used by the module.<br/>'''''Note:''' To locate the Project ID, log in to the OpenStack panel and navigate to '' 'Identity' '' → '' 'Projects' ''. Find the appropriate project and copy the value from the '' 'Project ID' '' column.'' |
| | + | ** '''Domain''' – optionally, provide your OpenStack domain name or leave '' 'Default' ''. |
| | + | ** '''Certificate''' – optionally, enter the full path to the SSL certificate used for verification. Leave this field empty if it is not applicable. |
| | + | ** '''Project Name''' – enter the name of the project associated with this server. Leave this field empty if it is not applicable. |
| | | | |
| − | * '''Module''' – select '''OpenStack VPS & Cloud''' from the dropdown menu. | + | * Click '''Reload Endpoints''' to retrieve the available regions and their service endpoints from OpenStack. |
| − | * '''Username''' and '''Password''' – enter your OpenStack administrator credentials.
| + | * The '''Endpoints''' section displays a separate tab for every detected region. Select a region tab and configure the endpoint interface used for each available service: |
| − | * Click the '''Configure''' button to open the server configuration window: | + | ** '''Compute''' |
| − | ** '''Identity Port/Path''' – specify the API endpoint port or path if used. You can find it in the OpenStack '''API Access''' section under '''Service Endpoint'''.<br/> The path segment appears between the hostname/IP and the port/API version. Leave this field empty if not required. | + | ** '''Identity''' |
| − | ** '''Identity Version''' – select the OpenStack Identity API version ('''v2''' or '''v3'''). <br/>'''''Important:''''' If the dropdown list is empty, verify that your '''IP/Hostname''', '''Identity Path''', '''Secure''', and '''Port''' fields are filled in correctly. | + | ** '''Image''' |
| − | ** '''Tenant ID''' – enter your administrator Tenant ID. <br/>'''''Note:''''' To locate the Tenant ID, log in to the OpenStack panel and navigate to '''Identity → Projects'''. Find your project row and copy the value from the '''Project ID''' column. | + | ** '''Network''' |
| − | ** '''Domain''' – optionally, provide your OpenStack domain name or leave as '''Default'''. | + | ** '''Volume''' |
| − | ** '''Certificate''' – optionally, enter the full path to your SSL certificate for verification (leave empty if not applicable).
| + | ** '''Metric''' |
| − | ** '''Project Name''' – enter the project name associated with this server (leave empty if not applicable).
| + | * Depending on your OpenStack setup, select the '''public''' or '''internal''' interface separately for each service in every region.<br/> |
| | + | The module supports multiple regions configured within a single WHMCS server connection. |
| | | | |
| − | * Click '''Reload Endpoints''' to automatically detect available service endpoints from OpenStack.
| + | * If your OpenStack environment uses HTTPS or a custom port, configure them using the '''Secure''' and '''Port''' fields. |
| − | | + | |
| − | * Additional fields:
| + | |
| − | ** '''Region''' – select the region (e.g., RegionOne).
| + | |
| − | ** '''Compute, Identity, Image, Network, Volume, Metric''' – choose between '''public''' or '''internal''' for each endpoint type, depending on your OpenStack setup.
| + | |
| − | | + | |
| − | * If your OpenStack environment uses HTTPS or a custom port, configure them using the '''Secure''' and '''Port''' fields. | + | |
| − | | + | |
| − | Finally, click '''Confirm''' - the system will automatically generate the '''Access Hash''' used for server communication.
| + | |
| | | | |
| | + | Finally, click '''Confirm'''. The system will automatically generate the '''Access Hash''' used for server communication. |
| | |} | | |} |
| | {| | | {| |
| Line 698: |
Line 707: |
| | |} | | |} |
| | {| | | {| |
| − | |style="padding: 0px 0px 15px 15px;"|'''21. Afterward, set up a network. Choose '' 'Fixed Network' '', '' 'Floating Network' '' and '' 'Default Number Of IP Addresses'.'' '''<br /> | + | |style="padding: 0px 0px 15px 15px;"|'''21. Afterward, configure the network settings.''' Choose '' 'Fixed Network' '', '' 'Floating Network' '', and define the '' 'Default Number Of IP Addresses'.''<br /><br /> |
| − | You can set up a network in two ways. You can find more information about the configuration [[#Network Configuration Cases|here]].<br />
| + | The network can be configured in two different ways. More details are available [[#Network Configuration Cases|here]].<br /> |
| − | We will create the network without a floating IP address as presented on the following screen.<br />
| + | In this example, the network is created without assigning a floating IP address, as shown in the screen below.<br /><br /> |
| − | Additionally, choose a quantity of IP addresses assigned to a product by typing it into '' 'Default Number Of IP Addresses'.''
| + | Specify the number of IP addresses assigned to the product by entering the value in '' 'Default Number Of IP Addresses'.''<br /><br /> |
| | + | If the '' 'Single Network Interface' '' option is enabled, multiple IPv4 addresses will be assigned to a single network interface instead of creating separate interfaces for each address.<br /> |
| | + | '''''Note:''' This option supports IPv4 only. Dual-stack configurations are not supported — enabling IPv6 will result in only one IPv6 address being attached.'' |
| | |} | | |} |
| | {| | | {| |
| Line 863: |
Line 874: |
| | | | |
| | '''''Important:''' When you are updating your module, and you do not want to overwrite your personalized ''additionalRules.json'' file you do not have to do anything.<br/> The file in the newest version of the module is named: '''additionalRules.json_sample''' and it will not overwrite the file in your system.'' | | '''''Important:''' When you are updating your module, and you do not want to overwrite your personalized ''additionalRules.json'' file you do not have to do anything.<br/> The file in the newest version of the module is named: '''additionalRules.json_sample''' and it will not overwrite the file in your system.'' |
| − | |}
| |
| − |
| |
| − | ===Custom Config Scripts===
| |
| − | {|
| |
| − | |style="padding: 10px 0px 15px 15px;"|'''30. In this area, you can write a custom script using [https://raymii.org/s/tutorials/Automating_Openstack_with_Cloud_init_run_a_script_on_VMs_first_boot.html Cloud-Init] and arrange it to be executed on newly created VMs.'''<br />
| |
| − | This way you can automate your work instead of making all kinds of specific images for specific tasks manually. <br /><br />
| |
| − | '''Important notes:'''
| |
| − | *Scripts can be written in standards like '''Bash''' or '''[https://yaml.org/about.html YAML]'''.
| |
| − | *You can find examplary clout-init config scripts [https://cloudinit.readthedocs.io/en/latest/topics/examples.html here].
| |
| − | *Initial scripts have to be supported by VPS operating system to be executed properly.
| |
| − | *Scripts should be used only by advanced users. The incorrect usage of the scripts may damage your system!
| |
| − | |}
| |
| − | {|
| |
| − | |style="padding: 0px 0px 20px 25px;"|[[File:OSVC44.png]]
| |
| − | |}
| |
| − | {|
| |
| − | |style="padding: 0px 0px 15px 15px;"|On the example below, we will show an exemplary script responsible for setting the password to '' 'newpass01' '' for the Ubuntu root user.<br />
| |
| − | You can achieve it by writing:
| |
| − |
| |
| − | #cloud-config
| |
| − | debug: True
| |
| − | ssh_pwauth: True
| |
| − | disable_root: false
| |
| − | chpasswd:
| |
| − | list: |
| |
| − | root:{$password}
| |
| − | expire: false
| |
| − | runcmd:
| |
| − | - sed -i'.orig' -e's/without-password/yes/' /etc/ssh/sshd_config
| |
| − | - service sshd restart
| |
| − |
| |
| − |
| |
| − | <!--
| |
| − | chpasswd:
| |
| − | list: |
| |
| − | ubuntu:newpass01
| |
| − | expire:False-->
| |
| − | |}
| |
| − | {|
| |
| − | |style="padding: 0px 0px 20px 25px;"|[[File:OSVC45.png]]
| |
| − | |}
| |
| − | {|
| |
| − | |style="padding: 0px 0px 15px 15px;"|You can configure scripts in the same format, but for clients' individual choice when ordering the product.<br />
| |
| − | All you need to do is add a new configurable option and assign it to the OpenStack VPS & Cloud product.<br />
| |
| − | '''''Note:''' These scripts are executed regardless of the script specified in the module settings.''<br />
| |
| − | The easiest way is through the edition of existing 'Configurable options for the OpenStack VPS & Cloud' group, and adding the new configurable option there.<br />
| |
| − | For example, if you want to offer the pre-installed PHP version depending on a client's choice, you can add a new option named '''script_PHP|PHP version''' and then define multiple options, like on the screenshot below:
| |
| − | |}
| |
| − | {|
| |
| − | |style="padding: 0px 0px 20px 25px;"|[[File:OSVC4_46.png]]
| |
| − | |}
| |
| − | {|
| |
| − | |style="padding: 0px 0px 20px 15px;"|Afterward, your clients can choose during the ordering process:
| |
| − | |}
| |
| − | {|
| |
| − | |style="padding: 0px 0px 20px 25px;"|[[File:OSV4_47.png]]
| |
| − | |}
| |
| − | {|
| |
| − | |style="padding: 0px 0px 0px 15px;"|
| |
| − | Using this method, you can perform assorted actions on newly created machines, e.g.: modifying files, preinstalling & preconfiguring software, executing any statements that would normally be executed via the terminal.<br /><br />
| |
| − | The general rule is that configurable option names should begin with '''script_prefix''' to be recognized as containing a custom script.<br />
| |
| − | Then, choices under the option have their own names, which are matched with the name of an existing file with the corresponding script under the
| |
| − | '''yourWHMCS/modules/servers/OpenStackVpsCloud/scripts''' path.<br />
| |
| − | Note that files with scripts have to have '''exactly''' extension corresponding to the given entries in the configurable options.<br /><br />
| |
| − | In the example above, there are two options: '''php82.yml''' and '''php83.yml''', therefore it makes the module read corresponding files:<br />
| |
| − | *modules/servers/OpenStackVpsCloud/scripts/php82.yml
| |
| − | or
| |
| − | *modules/servers/OpenStackVpsCloud/scripts/php83.yml
| |
| − | You can add many scripts in the exact way.
| |
| − | |}
| |
| − | {|
| |
| − | |style="padding: 0px 0px 15px 15px;"|You can also use the WHMCS variables of ordered products in your scripts. <br />
| |
| − | These variables can be managed in the same way as [https://docs.whmcs.com/Email_Templates#Merge_Fields merge fields] in email templates.<br/>
| |
| − | The exemplary execution of the clout-init test script is presented below:
| |
| − |
| |
| − | <pre>
| |
| − | #cloud-config
| |
| − |
| |
| − | runcmd:
| |
| − | - sudo echo "account id: {$accountid}" >> /tmp/whmcs_info.txt
| |
| − | - sudo echo "service id: {$serviceid}" >> /root/whmcs_info.txt
| |
| − | - sudo echo "addon id: {$addonId}" >> /var/log/whmcs_info.txt
| |
| − | - sudo echo "user id: {$userid}" >> ~/whmcs_info.txt
| |
| − | </pre>
| |
| − |
| |
| − | You will save IDs of the WHMCS '' 'account', 'service', 'addon' '' and '' 'client' '' into the '' 'whmcs_info.txt' '' files in various directories on the created instance. <br/>Of course, you can use the variables in any custom script according to your needs.<br/>
| |
| − |
| |
| − | '''''Important:''' If you want to use a '''{} sign''' in your script that has '''no variable''' inside, you must place it inside: '''{literal}{/literal}''', for example: '{literal}{"X": "Y"}{/literal}'. <br/>Otherwise, errors will occur.''<br/>
| |
| − |
| |
| − | Below you can find a complete list of supported variables that can be managed in your custom scripts:
| |
| − | |}
| |
| − |
| |
| − | {| class="wikitable" style="margin-left: 15px; margin-bottom: 30px; margin-top: 0px;"
| |
| − | ! Variable
| |
| − | ! Variable
| |
| − | ! Variable
| |
| − | ! Variable
| |
| − | ! Variable
| |
| − | |-
| |
| − | | {$accountid}
| |
| − | | {$configoption12}
| |
| − | | {$server}
| |
| − | | {$clientsdetails['password']}
| |
| − | | {$clientsdetails['allowSingleSignOn']}
| |
| − | |-
| |
| − | | {$serviceid}
| |
| − | | {$configoption13}
| |
| − | | {$serverip}
| |
| − | | {$clientsdetails['statecode']}
| |
| − | | {$clientsdetails['language']}
| |
| − | |-
| |
| − | | {$addonId}
| |
| − | | {$configoption14}
| |
| − | | {$serverhostname}
| |
| − | | {$clientsdetails['countryname']}
| |
| − | | {$clientsdetails['isOptedInToMarketingEmails']}
| |
| − | |-
| |
| − | | {$userid}
| |
| − | | {$configoption15}
| |
| − | | {$serverusername}
| |
| − | | {$clientsdetails['phonecc']}
| |
| − | | {$clientsdetails['lastlogin']}
| |
| − | |-
| |
| − | | {$domain}
| |
| − | | {$configoption16}
| |
| − | | {$serverpassword}
| |
| − | | {$clientsdetails['phonenumberformatted']}
| |
| − | | {$clientsdetails['authmodule']}
| |
| − | |-
| |
| − | | {$username}
| |
| − | | {$configoption17}
| |
| − | | {$serveraccesshash}
| |
| − | | {$clientsdetails['telephoneNumber']}
| |
| − | | {$clientsdetails['authdata']}
| |
| − | |-
| |
| − | | {$password}
| |
| − | | {$configoption18}
| |
| − | | {$serversecure}
| |
| − | | {$clientsdetails['billingcid']}
| |
| − | | {$clientsdetails['datecreated']}
| |
| − | |-
| |
| − | | {$sld}
| |
| − | | {$configoption19}
| |
| − | | {$serverhttpprefix}
| |
| − | | {$clientsdetails['notes']}
| |
| − | | {$clientsdetails['cardtype']}
| |
| − | |-
| |
| − | | {$tld}
| |
| − | | {$configoption20}
| |
| − | | {$serverport}
| |
| − | | {$clientsdetails['twofaenabled']}
| |
| − | | {$clientsdetails['cardlastfour']}
| |
| − | |-
| |
| − | | {$packageid}
| |
| − | | {$configoption21}
| |
| − | | {$clientsdetails['userid']}
| |
| − | | {$clientsdetails['currency']}
| |
| − | | {$clientsdetails['cardnum']}
| |
| − | |-
| |
| − | | {$pid}
| |
| − | | {$configoption22}
| |
| − | | {$clientsdetails['id']}
| |
| − | | {$clientsdetails['defaultgateway']}
| |
| − | | {$clientsdetails['startdate']}
| |
| − | |-
| |
| − | | {$serverid}
| |
| − | | {$configoption23}
| |
| − | | {$clientsdetails['uuid']}
| |
| − | | {$clientsdetails['cctype']}
| |
| − | | {$clientsdetails['expdate']}
| |
| − | |-
| |
| − | | {$status}
| |
| − | | {$configoption24}
| |
| − | | {$clientsdetails['firstname']}
| |
| − | | {$clientsdetails['cclastfour']}
| |
| − | | {$clientsdetails['issuenumber']}
| |
| − | |-
| |
| − | | {$type}
| |
| − | | {$customfields['vmID']}
| |
| − | | {$clientsdetails['lastname']}
| |
| − | | {$clientsdetails['gatewayid']}
| |
| − | | {$clientsdetails['bankname']}
| |
| − | |-
| |
| − | | {$producttype}
| |
| − | | {$customfields['privateFlavor']}
| |
| − | | {$clientsdetails['fullname']}
| |
| − | | {$clientsdetails['securityqid']}
| |
| − | | {$clientsdetails['banktype']}
| |
| − | |-
| |
| − | | {$moduletype}
| |
| − | | {$configoptions['flavor']}
| |
| − | | {$clientsdetails['companyname']}
| |
| − | | {$clientsdetails['securityqans']}
| |
| − | | {$clientsdetails['bankcode']}
| |
| − | |-
| |
| − | | {$configoption1}
| |
| − | | {$configoptions['isoImage']}
| |
| − | | {$clientsdetails['email']}
| |
| − | | {$clientsdetails['groupid']}
| |
| − | | {$clientsdetails['bankacct']}
| |
| − | |-
| |
| − | | {$configoption2}
| |
| − | | {$configoptions['ipAddresses']}
| |
| − | | {$clientsdetails['address1']}
| |
| − | | {$clientsdetails['status']}
| |
| − | | {$clientsdetails['ip']}
| |
| − | |-
| |
| − | | {$configoption3}
| |
| − | | {$configoptions['backupsFilesLimit']}
| |
| − | | {$clientsdetails['address2']}
| |
| − | | {$clientsdetails['credit']}
| |
| − | | {$clientsdetails['host']}
| |
| − | |-
| |
| − | | {$configoption4}
| |
| − | | {$configoptions['disk']}
| |
| − | | {$clientsdetails['city']}
| |
| − | | {$clientsdetails['taxexempt']}
| |
| − | | {$clientsdetails['pwresetkey']}
| |
| − | |-
| |
| − | | {$configoption5}
| |
| − | | {$configoptions['ram']}
| |
| − | | {$clientsdetails['fullstate']}
| |
| − | | {$clientsdetails['latefeeoveride']}
| |
| − | | {$clientsdetails['allow_sso']}
| |
| − | |-
| |
| − | | {$configoption6}
| |
| − | | {$configoptions['vcpus']}
| |
| − | | {$clientsdetails['state']}
| |
| − | | {$clientsdetails['overideduenotices']}
| |
| − | | {$clientsdetails['email_verified']}
| |
| − | |-
| |
| − | | {$configoption7}
| |
| − | | {$configoptions['totalRulesLimit']}
| |
| − | | {$clientsdetails['postcode']}
| |
| − | | {$clientsdetails['separateinvoices']}
| |
| − | | {$clientsdetails['created_at']}
| |
| − | |-
| |
| − | | {$configoption8}
| |
| − | | {$configoptions['inboundRulesLimit']}
| |
| − | | {$clientsdetails['countrycode']}
| |
| − | | {$clientsdetails['disableautocc']}
| |
| − | | {$clientsdetails['updated_at']}
| |
| − | |-
| |
| − | | {$configoption9}
| |
| − | | {$configoptions['outboundRulesLimit']}
| |
| − | | {$clientsdetails['country']}
| |
| − | | {$clientsdetails['emailoptout']}
| |
| − | | {$clientsdetails['pwresetexpiry']}
| |
| − | |-
| |
| − | | {$configoption10}
| |
| − | | {$configoptions['region']}
| |
| − | | {$clientsdetails['phonenumber']}
| |
| − | | {$clientsdetails['marketing_emails_opt_in']}
| |
| − | |
| |
| − | |-
| |
| − | | {$configoption11}
| |
| − | | {$configoptions['script_test']}
| |
| − | | {$clientsdetails['tax_id']}
| |
| − | | {$clientsdetails['overrideautoclose']}
| |
| − | |
| |
| | |} | | |} |
| | | | |
| Line 1,203: |
Line 954: |
| | {| | | {| |
| | |style="padding: 0px 0px 30px 25px;"|[[File:OSVC3_22_1.png]] | | |style="padding: 0px 0px 30px 25px;"|[[File:OSVC3_22_1.png]] |
| | + | |} |
| | + | |
| | + | ====Custom Scripts in App Templates==== |
| | + | {| |
| | + | |style="padding:10px 0px 5px 15px;"| |
| | + | The configuration of custom initialization scripts (Cloud-Init) has been moved from the module settings to the '''App Templates''' section in the addon module. <br/> |
| | + | Each application (image) can now include its own script defined in the '''user_data''' field, which will be executed automatically when the instance is created and booted for the first time. <br/> |
| | + | This approach allows scripts to be managed directly per application template, just like metadata. |
| | + | |} |
| | + | {| |
| | + | |style="padding:0px 0px 15px 15px;"| |
| | + | '''Important notes:''' |
| | + | * Scripts can be written in standards such as '''Bash''' or '''[https://yaml.org/about.html YAML]'''. |
| | + | * You can find example Cloud-Init configuration scripts [https://cloudinit.readthedocs.io/en/latest/topics/examples.html here]. |
| | + | * The script must be supported by the operating system used by the VPS instance. |
| | + | * Use only if you are familiar with Cloud-Init syntax; an incorrect script may prevent the instance from booting properly. |
| | + | |} |
| | + | {| |
| | + | |style="padding:0px 0px 20px 25px;"|[[File:OSVC3_cloudinit_1.png]] |
| | + | |} |
| | + | {| |
| | + | |style="padding:0px 0px 15px 15px;"| |
| | + | Below is an example of a simple Cloud-Init script defined in the '''user_data''' field that sets a new root password for Ubuntu: |
| | + | <pre> |
| | + | #cloud-config |
| | + | debug: True |
| | + | ssh_pwauth: True |
| | + | disable_root: false |
| | + | chpasswd: |
| | + | list: | |
| | + | root:newpass01 |
| | + | expire: False |
| | + | runcmd: |
| | + | - sed -i'.orig' -e's/without-password/yes/' /etc/ssh/sshd_config |
| | + | - service ssh restart |
| | + | </pre> |
| | + | This configuration ensures that the root password is updated and SSH access is properly enabled when the instance starts. |
| | + | |} |
| | + | {| |
| | + | |style="padding:0px 0px 20px 25px;"|[[File:OSVC3_cloudinit_2.png]] |
| | + | |} |
| | + | {| |
| | + | |style="padding:0px 0px 15px 15px;"| |
| | + | You can use the '''Related Field''' inside the '''user_data''' script to dynamically pass product or client information. |
| | + | <pre> |
| | + | #cloud-config |
| | + | runcmd: |
| | + | - echo "Client ID: {$userid}" >> /root/whmcs_info.txt |
| | + | - echo "Service ID: {$serviceid}" >> /root/whmcs_info.txt |
| | + | </pre> |
| | + | '''''Important:''' If you want to use braces '''{ }''' in your script without including a variable, wrap them with '''{literal}{/literal}''' to avoid template parsing errors.'' |
| | + | |} |
| | + | {| |
| | + | |style="padding:0px 0px 30px 25px;"|[[File:OSVC3_cloudinit_3.png]] |
| | |} | | |} |
| | | | |
| Line 1,293: |
Line 1,098: |
| | {| | | {| |
| | |style="padding: 10px 0px 15px 15px;"|Client area interface of OpenStack VPS & Cloud should look like the one on the screen below. As you can see, the control panel contains useful options needed for managing a virtual machine.<br /> | | |style="padding: 10px 0px 15px 15px;"|Client area interface of OpenStack VPS & Cloud should look like the one on the screen below. As you can see, the control panel contains useful options needed for managing a virtual machine.<br /> |
| − | The module allows your customers to easily start/stop, pause/unpause, resume, soft reboot, hard reboot, and reset network of their servers by pressing the specific button.<br /> | + | The module enables your customers to easily start/stop, pause/unpause, resume, soft reboot, and hard reboot their servers by pressing the corresponding button.<br /> |
| | Clients can also rebuild the server, access the VNC console, create a backup, manage firewalls, and view scheduled tasks.<br /> | | Clients can also rebuild the server, access the VNC console, create a backup, manage firewalls, and view scheduled tasks.<br /> |
| − | At '' 'Scheduled Tasks' '' your customers can view all requested tasks that were not yet completed.<br /> | + | At '' 'Scheduled Tasks' '', your customers can view all requested tasks that were not yet completed.<br /> |
| − | Each task has additional information bounded to them, like a type of task, attempts to perform tasks, or a last returned response. | + | Each task has additional information bound to it, like the type of task, the number of attempts to perform tasks, or the last returned response. |
| | |} | | |} |
| | {| | | {| |
| Line 1,610: |
Line 1,415: |
| | 3. Upload the '''new module files'''.<br/> | | 3. Upload the '''new module files'''.<br/> |
| | 4. '''Activate''' the new '''addon module''' and set the appropriate access control level for administrators.<br/> ''Note: The administrator responsible for configuring the product must have access to the OpenStack VPS & Cloud module addon.''<br/> | | 4. '''Activate''' the new '''addon module''' and set the appropriate access control level for administrators.<br/> ''Note: The administrator responsible for configuring the product must have access to the OpenStack VPS & Cloud module addon.''<br/> |
| − | 5. The '''migration tool''' should run automatically and transfer all your existing data. If it does not, manually initiate the version upgrade using the following '''cron command''': | + | 5. The '''migration tool must be triggered manually''', then your existing data will be automatically transferred to the new module. Use the following '''cron command''' to initiate the migration: |
| − | php -q /YOUR_WHMCS/modules/servers/OpenStackVpsCloud/cron/cron.php upgrade run 3.0.0 | + | php -q /YOUR_WHMCS/modules/servers/OpenStackVpsCloud/cron/cron.php upgrade run 3.0.0 |
| | | | |
| | 6. After a successful migration, run the <code>synchronize:networks</code> cron task to '''synchronize network information''' (IP addresses from OpenStack) with WHMCS for services created before the migration. | | 6. After a successful migration, run the <code>synchronize:networks</code> cron task to '''synchronize network information''' (IP addresses from OpenStack) with WHMCS for services created before the migration. |