diff --git a/build/developer.xml b/build/developer.xml
index 9049c77c8e0..eee043521ce 100755
--- a/build/developer.xml
+++ b/build/developer.xml
@@ -384,8 +384,8 @@
+
-
@@ -396,5 +396,9 @@
-
+
+
+
+
+
diff --git a/setup/apidoc/XmlToHtmlConverter.java b/setup/apidoc/XmlToHtmlConverter.java
new file mode 100644
index 00000000000..455bd62352b
--- /dev/null
+++ b/setup/apidoc/XmlToHtmlConverter.java
@@ -0,0 +1,142 @@
+// jdk1.4.1
+import javax.xml.transform.*;
+import java.io.*;
+
+public class XmlToHtmlConverter extends XmlToHtmlConverterData {
+
+ // To turn off generation of API docs for certain roles, comment out
+ // the appropriate populateFor*() line(s) below.
+ public static void main(String[] args) {
+
+ XmlToHtmlConverter x = new XmlToHtmlConverter();
+ x.populateForRootAdmin();
+ x.populateForDomainAdmin();
+ x.populateForUser();
+ x.generateToc();
+ x.generateIndividualCommandPages();
+ }
+
+ public void generateToc() {
+ try {
+
+ TransformerFactory tFactory = TransformerFactory.newInstance();
+
+ // Generate the TOC for the API reference for User role
+ Transformer transformer =
+ tFactory.newTransformer
+ (new javax.xml.transform.stream.StreamSource
+ ("generatetocforuser.xsl"));
+
+ // The XML to be transformed must be at the location below.
+ // Modify this path to match your own setup.
+ transformer.transform
+ (new javax.xml.transform.stream.StreamSource
+ ("regular_user/regularUserSummary.xml"),
+ // Modify this path to your own desired output location.
+ new javax.xml.transform.stream.StreamResult
+ ( new FileOutputStream("html/TOC_User.html")));
+
+ // Generate the TOC for root administrator role
+ Transformer transformer1 =
+ tFactory.newTransformer
+ (new javax.xml.transform.stream.StreamSource
+ ("generatetocforadmin.xsl"));
+
+ // The XML to be transformed must be at the location below.
+ // Modify this path to match your own setup.
+ transformer1.transform
+ (new javax.xml.transform.stream.StreamSource
+ ("root_admin/rootAdminSummary.xml"),
+ // Modify this path to your own desired output location.
+ new javax.xml.transform.stream.StreamResult
+ ( new FileOutputStream("html/TOC_Root_Admin.html")));
+
+ // Generate the TOC for domain admin role
+ Transformer transformer2 =
+ tFactory.newTransformer
+ (new javax.xml.transform.stream.StreamSource
+ ("generatetocfordomainadmin.xsl"));
+
+ // The XML to be transformed must be at the location below.
+ // Modify this path to match your own setup.
+ transformer2.transform
+ (new javax.xml.transform.stream.StreamSource
+ ("domain_admin/domainAdminSummary.xml"),
+ // Modify this path to your own desired output location.
+ new javax.xml.transform.stream.StreamResult
+ ( new FileOutputStream("html/TOC_Domain_Admin.html")));
+
+ }
+ catch (Exception e) {
+ e.printStackTrace( );
+ }
+ }
+
+ // Create man pages
+ public void generateIndividualCommandPages() {
+ for(String commandName : rootAdminCommandNames) {
+
+ try {
+
+ TransformerFactory tFactory = TransformerFactory.newInstance();
+ Transformer transformer =
+ tFactory.newTransformer
+ (new javax.xml.transform.stream.StreamSource
+ ("generateadmincommands.xsl"));
+
+ transformer.transform
+ // Modify this path to the location of the input files on your system.
+ (new javax.xml.transform.stream.StreamSource
+ ("root_admin/"+commandName+".xml"),
+ // Modify this path with the desired output location.
+ new javax.xml.transform.stream.StreamResult
+ ( new FileOutputStream("html/root_admin/"+commandName+".html")));
+ } catch (Exception e) {
+ e.printStackTrace( );
+ }
+ }
+
+ for(String commandName : domainAdminCommandNames) {
+
+ try {
+
+ TransformerFactory tFactory = TransformerFactory.newInstance();
+ Transformer transformer =
+ tFactory.newTransformer
+ (new javax.xml.transform.stream.StreamSource
+ ("generatedomainadmincommands.xsl"));
+
+ transformer.transform
+ // Modify this path with the location of the input files on your system.
+ (new javax.xml.transform.stream.StreamSource
+ ("domain_admin/"+commandName+".xml"),
+ // Modify this path to the desired output location.
+ new javax.xml.transform.stream.StreamResult
+ ( new FileOutputStream("html/domain_admin/"+commandName+".html")));
+ } catch (Exception e) {
+ e.printStackTrace( );
+ }
+ }
+
+ for(String commandName : userCommandNames) {
+
+ try {
+
+ TransformerFactory tFactory = TransformerFactory.newInstance();
+
+ Transformer transformer =
+ tFactory.newTransformer
+ (new javax.xml.transform.stream.StreamSource
+ ("generateusercommands.xsl"));
+
+ transformer.transform
+ (new javax.xml.transform.stream.StreamSource
+ ("regular_user/"+commandName+".xml"),
+ new javax.xml.transform.stream.StreamResult
+ ( new FileOutputStream("html/user/"+commandName+".html")));
+ } catch (Exception e) {
+ e.printStackTrace( );
+ }
+ }
+ }
+}
diff --git a/setup/apidoc/build-apidoc.sh b/setup/apidoc/build-apidoc.sh
index fb317de91b7..ab410051a8a 100644
--- a/setup/apidoc/build-apidoc.sh
+++ b/setup/apidoc/build-apidoc.sh
@@ -23,6 +23,11 @@ TARGETJARDIR="$1"
shift
DEPSDIR="$1"
shift
+DISTDIR="$1"
+shift
+
+thisdir=$(readlink -f $(dirname "$0"))
+
PATHSEP=':'
if [[ $OSTYPE == "cygwin" ]] ; then
@@ -40,9 +45,35 @@ for file in $DEPSDIR/*.jar; do
CP=${CP}$PATHSEP$file
done
-java -cp $CP com.cloud.api.doc.ApiXmlDocWriter $*
+java -cp $CP com.cloud.api.doc.ApiXmlDocWriter -d "$DISTDIR" $*
if [ $? -ne 0 ]
then
exit 1
fi
+
+set -e
+(cd "$DISTDIR/xmldoc"
+ cp "$thisdir"/*.java .
+ cp "$thisdir"/*.xsl .
+ sed -e 's,%API_HEADER%,User API,g' "$thisdir/generatetoc_header.xsl" >generatetocforuser.xsl
+ sed -e 's,%API_HEADER%,Root Admin API,g' "$thisdir/generatetoc_header.xsl" >generatetocforadmin.xsl
+ sed -e 's,%API_HEADER%,Domain Admin API,g' "$thisdir/generatetoc_header.xsl" >generatetocfordomainadmin.xsl
+
+ python "$thisdir/gen_toc.py" $(find -type f)
+
+ cat generatetocforuser_include.xsl >>generatetocforuser.xsl
+ cat generatetocforadmin_include.xsl >>generatetocforadmin.xsl
+ cat generatetocfordomainadmin_include.xsl >>generatetocfordomainadmin.xsl
+
+ cat "$thisdir/generatetoc_footer.xsl" >>generatetocforuser.xsl
+ cat "$thisdir/generatetoc_footer.xsl" >>generatetocforadmin.xsl
+ cat "$thisdir/generatetoc_footer.xsl" >>generatetocfordomainadmin.xsl
+
+ mkdir -p html/user html/domain_admin html/root_admin
+ cp -r "$thisdir/includes" html
+ cp -r "$thisdir/images" html
+
+ javac -cp . *.java
+ java -cp . XmlToHtmlConverter
+)
diff --git a/setup/apidoc/gen_toc.py b/setup/apidoc/gen_toc.py
new file mode 100644
index 00000000000..a4d5c958e1d
--- /dev/null
+++ b/setup/apidoc/gen_toc.py
@@ -0,0 +1,245 @@
+#!/usr/bin/python
+
+import os
+import os.path
+import sys
+from xml.dom import minidom
+from xml.parsers.expat import ExpatError
+
+
+REGULAR_USER = 'u'
+DOMAIN_ADMIN = 'd'
+ROOT_ADMIN = 'r'
+
+user_to_func = {
+ REGULAR_USER: 'populateForUser',
+ DOMAIN_ADMIN: 'populateForDomainAdmin',
+ ROOT_ADMIN: 'populateForRootAdmin',
+ }
+
+
+user_to_cns = {
+ REGULAR_USER: 'userCommandNames',
+ DOMAIN_ADMIN: 'domainAdminCommandNames',
+ ROOT_ADMIN: 'rootAdminCommandNames',
+ }
+
+
+dirname_to_user = {
+ 'regular_user': REGULAR_USER,
+ 'domain_admin': DOMAIN_ADMIN,
+ 'root_admin': ROOT_ADMIN,
+ }
+
+
+dirname_to_dirname = {
+ 'regular_user': 'user',
+ 'domain_admin': 'domain_admin',
+ 'root_admin': 'root_admin',
+ }
+
+
+known_categories = {
+ 'SystemVm': 'System VM',
+ 'VirtualMachine': 'Virtual Machine',
+ 'VM': 'Virtual Machine',
+ 'Domain': 'Domain',
+ 'Template': 'Template',
+ 'Iso': 'ISO',
+ 'Volume': 'Volume',
+ 'Vlan': 'VLAN',
+ 'IpAddress': 'Address',
+ 'PortForwarding': 'Firewall',
+ 'Firewall': 'Firewall',
+ 'StaticNat': 'NAT',
+ 'IpForwarding': 'NAT',
+ 'Host': 'Host',
+ 'Cluster': 'Cluster',
+ 'Account': 'Account',
+ 'Snapshot': 'Snapshot',
+ 'User': 'User',
+ 'Os': 'Guest OS',
+ 'ServiceOffering': 'Service Offering',
+ 'DiskOffering': 'Disk Offering',
+ 'LoadBalancer': 'Load Balancer',
+ 'Router': 'Router',
+ 'SystemVm': 'System VM',
+ 'Configuration': 'Configuration',
+ 'Capabilities': 'Configuration',
+ 'Pod': 'Pod',
+ 'Zone': 'Zone',
+ 'NetworkOffering': 'Network Offering',
+ 'Network': 'Network',
+ 'Vpn': 'VPN',
+ 'Limit': 'Limit',
+ 'ResourceCount': 'Limit',
+ 'CloudIdentifier': 'Cloud Identifier',
+ 'InstanceGroup': 'VM Group',
+ 'StorageMaintenance': 'Storage Pool',
+ 'StoragePool': 'Storage Pool',
+ 'SecurityGroup': 'Security Group',
+ 'SSH': 'SSH',
+ 'register': 'Registration',
+ 'AsyncJob': 'Async job',
+ 'Certificate': 'Certificate',
+ 'Hypervisor': 'Hypervisor',
+ 'Alert': 'Alert',
+ 'Event': 'Event',
+ 'login': 'Login',
+ 'logout': 'Logout',
+ 'Capacity': 'System Capacity',
+ 'NetworkDevice': 'Network Device',
+ 'ExternalLoadBalancer': 'Ext Load Balancer',
+ 'ExternalFirewall': 'Ext Firewall',
+ 'Usage': 'Usage',
+ 'TrafficMonitor': 'Usage',
+ 'TrafficType': 'Usage',
+ 'Product': 'Product',
+ 'LB': 'Load Balancer',
+ 'ldap': 'LDAP',
+ 'Swift': 'Swift',
+ 'SecondaryStorage': 'Host',
+ 'Project': 'Project',
+ 'Lun': 'Storage',
+ 'Pool': 'Pool',
+ }
+
+
+categories = {}
+
+
+def choose_category(fn):
+ for k, v in known_categories.iteritems():
+ if k in fn:
+ return v
+ raise Exception(fn)
+
+
+for f in sys.argv:
+ dirname, fn = os.path.split(f)
+ if not fn.endswith('.xml'):
+ continue
+ if fn.endswith('Summary.xml'):
+ continue
+ if fn.endswith('SummarySorted.xml'):
+ continue
+ if fn == 'alert_types.xml':
+ continue
+ if dirname.startswith('./'):
+ dirname = dirname[2:]
+ try:
+ dom = minidom.parse(file(f))
+ name = dom.getElementsByTagName('name')[0].firstChild.data
+ isAsync = dom.getElementsByTagName('isAsync')[0].firstChild.data
+ category = choose_category(fn)
+ if category not in categories:
+ categories[category] = []
+ categories[category].append({
+ 'name': name,
+ 'dirname': dirname_to_dirname[dirname],
+ 'async': isAsync == 'true',
+ 'user': dirname_to_user[dirname],
+ })
+ except ExpatError, e:
+ pass
+ except IndexError, e:
+ print fn
+
+
+def xml_for(command):
+ name = command['name']
+ async = command['async'] and ' (A)' or ''
+ dirname = command['dirname']
+ return '''
+%(async)s
+
+''' % locals()
+
+
+def write_xml(out, user):
+ with file(out, 'w') as f:
+ cat_strings = []
+
+ for category in categories.keys():
+ strings = []
+ for command in categories[category]:
+ if command['user'] == user:
+ strings.append(xml_for(command))
+ if strings:
+ all_strings = ''.join(strings)
+ cat_strings.append((len(strings), category, all_strings))
+
+ cat_strings.sort(reverse=True)
+
+ i = 0
+ for _1, category, all_strings in cat_strings:
+ if i == 0:
+ print >>f, '
'
+ print >>f, '''
+
+''' % locals()
+ if i == 3:
+ print >>f, '
'
+ i = 0
+ else:
+ i += 1
+ if i != 0:
+ print >>f, ''
+
+
+def java_for(command, user):
+ name = command['name']
+ cns = user_to_cns[user]
+ return '''%(cns)s.add("%(name)s");
+''' % locals()
+
+
+def java_for_user(user):
+ strings = []
+ for category in categories.keys():
+ for command in categories[category]:
+ if command['user'] == user:
+ strings.append(java_for(command, user))
+ func = user_to_func[user]
+ all_strings = ''.join(strings)
+ return '''
+ public void %(func)s() {
+ %(all_strings)s
+ }
+''' % locals()
+
+
+def write_java(out):
+ with file(out, 'w') as f:
+ print >>f, '''/* Generated using gen_toc.py. Do not edit. */
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class XmlToHtmlConverterData {
+
+ Set rootAdminCommandNames = new HashSet();
+ Set domainAdminCommandNames = new HashSet();
+ Set userCommandNames = new HashSet();
+
+'''
+ print >>f, java_for_user(REGULAR_USER)
+ print >>f, java_for_user(ROOT_ADMIN)
+ print >>f, java_for_user(DOMAIN_ADMIN)
+
+ print >>f, '''
+}
+'''
+
+
+write_xml('generatetocforuser_include.xsl', REGULAR_USER)
+write_xml('generatetocforadmin_include.xsl', ROOT_ADMIN)
+write_xml('generatetocfordomainadmin_include.xsl', DOMAIN_ADMIN)
+write_java('XmlToHtmlConverterData.java')
diff --git a/setup/apidoc/generateadmincommands.xsl b/setup/apidoc/generateadmincommands.xsl
new file mode 100644
index 00000000000..7b566db123a
--- /dev/null
+++ b/setup/apidoc/generateadmincommands.xsl
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
+
+
+CloudStack | The Power Behind Your Cloud
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CloudStack v2.2.13 - 2.2.14 Root Admin API Reference
+
+
+
+
+
+
+
+
+
+
+
+
Request parameters
+
+
+ | Parameter Name |
+
+ Description |
+ Required |
+
+
+
+
+ |
+ |
+ |
+
+
+ |
+ |
+ |
+
+
+
+
+
+
+
+
+
Response Tags
+
+
+ | Response Name |
+ Description |
+
+
+
+
+ |
+ |
+
+
+ |
+ |
+
+
+
+ |
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/setup/apidoc/generatecommand.xsl b/setup/apidoc/generatecommand.xsl
new file mode 100644
index 00000000000..5914e7db253
--- /dev/null
+++ b/setup/apidoc/generatecommand.xsl
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+
+
+
+CloudStack | The Power Behind Your Cloud
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Request parameters
+
+
+ | Parameter Name |
+
+ Description |
+ Required |
+
+
+
+ |
+ |
+ |
+
+
+
+
+
+
+
+
+
Response Tags
+
+
+ | Response Name |
+ Description |
+
+
+
+
+ |
+ |
+
+
+ |
+ |
+
+
+
+ |
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/setup/apidoc/generatecustomcommand.xsl b/setup/apidoc/generatecustomcommand.xsl
new file mode 100644
index 00000000000..16c6c64e87f
--- /dev/null
+++ b/setup/apidoc/generatecustomcommand.xsl
@@ -0,0 +1,47 @@
+
+
+
+
+Cloudstack API
+
+
+
+| Name |
+Description |
+Request Parameters |
+Response Parameters |
+
+
+
+ |
+ |
+
+
+ Name:
+Description:
+ Required:
+
+ |
+
+
+ Name:
+Description:
+
+ Name:
+Description:
+
+ Name:
+Description:
+
+
+
+
+ |
+
+
+
+
+
+
+
diff --git a/setup/apidoc/generatedomainadmincommands.xsl b/setup/apidoc/generatedomainadmincommands.xsl
new file mode 100644
index 00000000000..f500c0095a5
--- /dev/null
+++ b/setup/apidoc/generatedomainadmincommands.xsl
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+
+
+
+CloudStack | The Power Behind Your Cloud
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CloudStack v2.2.13 - 2.2.14 Domain Admin API Reference
+
+
+
+
+
+
+
+
+
+
+
+
Request parameters
+
+
+ | Parameter Name |
+
+ Description |
+ Required |
+
+
+
+
+ |
+ |
+ |
+
+
+ |
+ |
+ |
+
+
+
+
+
+
+
+
+
Response Tags
+
+
+ | Response Name |
+ Description |
+
+
+
+
+ |
+ |
+
+
+ |
+ |
+
+
+
+ |
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/setup/apidoc/generategenericcommand.xsl b/setup/apidoc/generategenericcommand.xsl
new file mode 100644
index 00000000000..bf055802f10
--- /dev/null
+++ b/setup/apidoc/generategenericcommand.xsl
@@ -0,0 +1,39 @@
+
+
+
+
+Cloudstack API
+
+
+
+| Name |
+Description |
+Request Parameters |
+Response Parameters |
+
+
+
+ |
+ |
+
+
+ Name:
+Description:
+ Required:
+
+ |
+
+
+ Name:
+Description:
+
+
+ |
+
+
+
+
+
+
+
diff --git a/setup/apidoc/generatetoc.xsl b/setup/apidoc/generatetoc.xsl
new file mode 100644
index 00000000000..ab209db8003
--- /dev/null
+++ b/setup/apidoc/generatetoc.xsl
@@ -0,0 +1,1128 @@
+
+
+
+
+Cloudstack API
+
+
+
+Cloudstack API Version 2.2
+
+Table of Contents
+Name |
+Description |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+OS Specific Commands
|
+OS Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Domain Specific Commands
|
+Domain Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Virtual Machine Specific Commands
|
+Virtual Machine Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Hypervisor Specific Commands
|
+Hypervisor Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+
+Lun Specific Commands
|
+Lun Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Template Specific Commands
|
+Template Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Storage Pool Specific Commands
|
+Storage Pool Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Firewall Specific Commands
|
+Firewall Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+VM Group Specific Commands
|
+VM Group Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Vlan Specific Commands
|
+Vlan Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Router Specific Commands
|
+Router Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+
+Service Offering Specific Commands
|
+Service Offering Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Network Specific Commands
|
+Network Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Configuration Specific Commands
|
+Configuration Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Account Specific Commands
|
+Account Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Registration Specific Commands
|
+Registration Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Zone Specific Commands
|
+Zone Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+
+Security Group Specific Commands
|
+Security Group Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Alert Specific Commands
|
+Alert Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Pod Specific Commands
|
+Pod Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Async job Specific Commands
|
+Async job Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Resource limit Specific Commands
|
+Resource limit Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Cloudstack Specific Commands
|
+Cloudstack Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Network Offering Specific Commands
|
+Network Offering Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Volume Specific Commands
|
+Volume Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Ip Address Specific Commands
|
+Ip Address Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+VPN Specific Commands
|
+VPN Address Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+
+Event Specific Commands
|
+Event Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Load Balancer Specific Commands
|
+Load Balancer Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Iso Specific Commands
|
+Iso Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Certificate Specific Commands
|
+Certificate Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Host Specific Commands
|
+Host Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+
+Snapshot Specific Commands
|
+Snapshot Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Disk Offering Specific Commands
|
+Disk Offering Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+NAT Specific Commands
|
+NAT Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+Capacity Specific Commands
|
+Capacity Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+User Specific Commands
|
+User Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+
+System VM Specific Commands
|
+System VM Specific Command Descriptions
|
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+ |
+ |
+
+
+
+
+
+
+
+
diff --git a/setup/apidoc/generatetoc_footer.xsl b/setup/apidoc/generatetoc_footer.xsl
new file mode 100644
index 00000000000..fc5bd393706
--- /dev/null
+++ b/setup/apidoc/generatetoc_footer.xsl
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+