| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="utf-8"> |
| <title>Firewalls</title> |
| <!-- Le HTML5 shim, for IE6-8 support of HTML elements --> |
| <!--[if lt IE 9]> |
| <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> |
| <![endif]--> |
| |
| <!-- Le JavaScript --> |
| <script src="/assets/js/jquery-1.7.1.min.js" type="text/javascript"></script> |
| <script src="/assets/js/bootstrap-dropdown.js" type="text/javascript"></script> |
| <script src="/assets/js/jquery.tweet.js" type="text/javascript"></script> |
| <script src="/assets/js/application.js" type="text/javascript"></script> |
| <script src="/assets/js/bootstrap-transition.js"></script> |
| <script src="/assets/js/bootstrap-alert.js"></script> |
| <script src="/assets/js/bootstrap-modal.js"></script> |
| <script src="/assets/js/bootstrap-scrollspy.js"></script> |
| <script src="/assets/js/bootstrap-tab.js"></script> |
| <script src="/assets/js/bootstrap-tooltip.js"></script> |
| <script src="/assets/js/bootstrap-popover.js"></script> |
| <script src="/assets/js/bootstrap-button.js"></script> |
| <script src="/assets/js/bootstrap-collapse.js"></script> |
| <script src="/assets/js/bootstrap-carousel.js"></script> |
| <script src="/assets/js/bootstrap-typeahead.js"></script> |
| |
| <!-- Le styles --> |
| <link href="/assets/css/bootstrap.css" rel="stylesheet"> |
| <link href="/assets/css/application.css" rel="stylesheet"> |
| <link rel="shortcut icon" href="/assets/img/favicon.ico"> |
| </head> |
| |
| <body> |
| |
| <div class="navbar navbar-fixed-top"> |
| <div class="navbar-inner"> |
| <div class="container"> |
| <a class="brand" href="/"><img src="/assets/img/logo.png" width="152" |
| alt="Deltacloud API"/></a> |
| <ul class="nav top-nav"> |
| <li><a href="/">Home</a></li> |
| <li class="dropdown"> |
| <a href="#" class="dropdown-toggle" data-toggle="dropdown">About<b class="caret"></b></a> |
| <ul class="dropdown-menu"> |
| <li><a href="/about.html">What is Deltacloud?</a></li> |
| <li><a href="/drivers.html#drivers">Supported Providers</a></li> |
| </ul> |
| </li> |
| <li><a href="/download.html">Download</a></li> |
| <li class="dropdown"> |
| <a href="#" class="dropdown-toggle" data-toggle="dropdown">Installation<b class="caret"></b></a> |
| <ul class="dropdown-menu"> |
| <li><a href="/install-deltacloud.html">Install Deltacloud</a></li> |
| <li><a href="/run-deltacloud-server.html">Run the Deltacloud Server</a></li> |
| </ul> |
| </li> |
| <li class="dropdown"> |
| <a href="/usage.html" class="dropdown-toggle" data-toggle="dropdown">Usage<b class="caret"></b></a> |
| <ul class="dropdown-menu"> |
| <li><a href="/usage.html#usingapi">Using API</a></li> |
| <li><a href="/usage.html#clients">Client Libraries</a></li> |
| <li><a href="/command-tools.html">Command Line Tools</a></li> |
| </ul> |
| </li> |
| <li class="dropdown"> |
| <a href="#" class="dropdown-toggle" data-toggle="dropdown">Contribute<b class="caret"></b></a> |
| <ul class="dropdown-menu"> |
| <li><a href="/getting-sources.html">Getting Sources</a></li> |
| <li><a href="/how-to-contribute.html">How Can I Contribute?</a></li> |
| </ul> |
| </li> |
| <li class="dropdown"> |
| <a href="#" class="dropdown-toggle" data-toggle="dropdown">API<b class="caret"></b></a> |
| <ul class="dropdown-menu"> |
| <li><a href="/rest-api.html">Deltacloud REST API</a></li> |
| <li><a href="/curl-examples.html">Deltacloud API cURL examples</a></li> |
| <li><a href="/drivers.html">Drivers API</a></li> |
| </ul> |
| </li> |
| <li class="dropdown"> |
| <a href="#" class="dropdown-toggle" data-toggle="dropdown">CIMI<b class="caret"></b></a> |
| <ul class="dropdown-menu"> |
| <li><a href="/cimi-rest.html">CIMI REST API</a></li> |
| <li><a href="/cimi-curl.html">CIMI cURL Examples</a></li> |
| </ul> |
| </li> |
| <li><a href="/contact.html">Contact</a></li> |
| </ul> |
| |
| </div> |
| </div> |
| |
| </div> |
| |
| <div class="container content"> |
| |
| <p><br></p> |
| |
| <div class="row"> |
| <div class="span9"> |
| |
| <h3 id="firewalls">Firewalls</h3> |
| |
| <p> |
| Firewalls represent sets of rules that govern the accessibility of a running instance over the public Internet. At present, only Amazon EC2 cloud (Amazon EC2 'Security Groups') and Fujitsu GCP support this collection. A firewall has these attributes: |
| </p> |
| |
| <ul> |
| <li>a <strong>name</strong> |
| </li> |
| <li>a <strong>description</strong> |
| </li> |
| <li>an <strong>owner_id</strong> |
| </li> |
| <li>set of <strong>rules</strong> |
| </li> |
| </ul> |
| |
| <p> |
| For Amazon EC2, an instance is launched into a firewall by specifying the <strong>firewalls1 ... firewallsN</strong> parameters in the <strong>POST /api/instances</strong> operation (see the <a href="instances.html#instance">Create an instance</a> section). |
| </p> |
| |
| <p> |
| Each <strong>firewall rule</strong> has a number of attributes describing the access granted to clients that want to communicate with the instance over the Internet. Each rule consists of |
| </p> |
| |
| <ul> |
| <li>an <strong>allow_protocol</strong> (tcp, udp or icmp);</li> |
| <li>a <strong>port_from</strong> and a <strong>port_to</strong> that delimit the port range for access; and</li> |
| <li>a <strong>sources</strong> list, which can contain firewalls (i.e. allow instances in another firewall to communicate with instances in the firewall in which this rule exists), or a number of IP addresses in CIDR format, or a mix of both.</li> |
| </ul> |
| |
| </div> |
| <div class="span3"> |
| |
| <ul class="nav nav-list well"> |
| <li class="nav-header"> |
| REST API |
| </li> |
| <li><a href="rest-api.html">Introduction</a></li> |
| <li><a href="api-entry-point.html">API entry point</a></li> |
| <li><a href="compute-resources.html">Compute resources</a></li> |
| <ul class="nav nav-list"> |
| <li><a href="compute-resources.html#realms">Realms</a></li> |
| <li><a href="hardware-profiles.html">Hardware profiles</a></li> |
| <li><a href="images.html">Images</a></li> |
| <li><a href="instance-states.html">Instance states</a></li> |
| <li><a href="instances.html">Instances</a></li> |
| <li><a href="keys.html">Keys</a></li> |
| <li class="active"><a href="#firewalls">Firewalls</a></li> |
| <li><a href="addresses.html">Addresses</a></li> |
| <li><a href="load-balancers.html">Load balancers</a></li> |
| </ul> |
| <li><a href="storage-resources.html">Storage resources</a></li> |
| </ul> |
| |
| </div> |
| </div> |
| |
| <p> |
| Each rule also specifies a <strong>direction</strong>, indicating whether it applies to ingress or egress traffic. A rule can also specify a <strong>rule_action</strong> (accept, deny), to indicate whether the firewall should accept or deny access for this traffic, and <strong>log_rule</strong> (true, false), to indicate whether an entry should be added to the log. |
| |
| </p> |
| |
| <p> |
| As Amazon EC2 has no notion of a firewall rule ID, the Deltacloud server constructs one ID for each rule as the concatenation of its attributes. The format used is: owner_id~protocol~from_port~to_port~@sources. |
| </p> |
| |
| <p> |
| As explained above a source can be the <strong>address</strong> type in which case it defines an IP type (ipv4/ipv6), an IP address and routing prefix (CIDR netmask). Sources of type <strong>group</strong> have an owner_id and a name. The <strong>owner_id</strong> is the identifier of the account that created the specified firewall. The <strong>name</strong> defines the firewall to which the access is being granted. |
| </p> |
| |
| <p> |
| An example of a rule id is: |
| </p> |
| |
| <pre> |
| 393485797142~tcp~22~22~@group,393485797142,default,@address,ipv4,10.1.2.3,24 |
| {owner_id~protocol~from_port~to_port~@sources} |
| </pre> |
| |
| <p> |
| By creating the rule identifier abstraction, the Deltacloud API supports deletion of an entire firewall rule as one operation. |
| </p> |
| |
| <p><br></p> |
| |
| <ul class="nav nav-pills"> |
| <li class="active"><a href="#tab1" data-toggle="tab">Get a list of all firewalls</a></li> |
| <li><a href="#tab2" data-toggle="tab">Get the details of a firewall</a></li> |
| <li><a href="#tab3" data-toggle="tab">Create/delete a firewall</a></li> |
| <li><a href="#tab4" data-toggle="tab">Create/delete a firewall rule</a></li> |
| </ul> |
| |
| <hr> |
| |
| <div class="tab-content"> |
| <div class="tab-pane active" id="tab1"> |
| |
| <h4>Get a list of all firewalls</h4> |
| |
| <p> |
| To retrieve a list of all firewalls use call <strong>GET /api/firewalls</strong>. |
| </p> |
| |
| <p>Example request:</p> |
| |
| <pre> |
| GET /api/firewalls?format=xml HTTP/1.1 |
| Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa== |
| User-Agent: curl/7.20.1 (i386-redhat-linux-gnu) |
| Host: localhost:3001 |
| Accept: */* |
| </pre> |
| |
| <p>Server response:</p> |
| |
| <pre> |
| HTTP/1.1 200 OK |
| Content-Type: application/xml |
| Date: Tue, 26 Jul 2011 15:56:04 GMT |
| Content-Length: 1640 |
| |
| <?xml version='1.0' encoding='utf-8' ?> |
| <firewalls> |
| <firewall href='http://localhost:3001/api/firewalls/default' id='default'> |
| <name><![CDATA[default]]></name> |
| <description><![CDATA[default group]]></description> |
| <owner_id>393485797142</owner_id> |
| <rules> |
| <rule id='393485797142~tcp~22~22~@address,ipv4,87.228.192.251,32'> |
| <allow_protocol>tcp</allow_protocol> |
| <port_from>22</port_from> |
| <port_to>22</port_to> |
| <direction>ingress</direction> |
| <sources> |
| <source address='87.228.192.251' family='ipv4' prefix='32' type='address'></source> |
| </sources> |
| </rule> |
| </rules> |
| </firewall> |
| <firewall href='http://localhost:3001/api/firewalls/test' id='test'> |
| <name><![CDATA[test]]></name> |
| <description><![CDATA[this is just a test]]></description> |
| <owner_id>393485797142</owner_id> |
| <rules> |
| <rule id='393485797142~tcp~22~22~@group,393485797142,default,@address,ipv4,10.1.2.3,24'> |
| <allow_protocol>tcp</allow_protocol> |
| <port_from>22</port_from> |
| <port_to>22</port_to> |
| <direction>ingress</direction> |
| <sources> |
| <source name='default' owner='393485797142' type='group'></source> |
| <source address='10.1.2.3' family='ipv4' prefix='24' type='address'></source> |
| </sources> |
| </rule> |
| </rules> |
| </firewall> |
| <firewall href='http://localhost:3001/api/firewalls/new_firewall' id='new_firewall'> |
| <name><![CDATA[new_firewall]]></name> |
| <description><![CDATA[new_one]]></description> |
| <owner_id>393485797142</owner_id> |
| <rules> |
| </rules> |
| </firewall> |
| </firewalls></pre> |
| |
| </div> |
| <div class="tab-pane" id="tab2"> |
| |
| <h4>Get the details of a specified firewall</h4> |
| |
| <p> |
| To retrieve details of a single specified firewall use call <strong>GET /api/firewalls/:id</strong>. |
| </p> |
| |
| <p>Example request:</p> |
| |
| <pre> |
| GET /api/firewalls/test?format=xml HTTP/1.1 |
| Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa== |
| User-Agent: curl/7.20.1 (i386-redhat-linux-gnu) |
| Host: localhost:3001 |
| Accept: */* |
| </pre> |
| |
| <p>Server reponse:</p> |
| |
| <pre> |
| HTTP/1.1 200 OK |
| Content-Type: application/xml |
| Date: Wed, 27 Jul 2011 08:20:29 GMT |
| Content-Length: 835 |
| |
| <?xml version='1.0' encoding='utf-8' ?> |
| <firewall href='http://localhost:3001/api/firewalls/test' id='test'> |
| <name><![CDATA[test]]></name> |
| <description><![CDATA[this is just a test]]></description> |
| <owner_id>393485797142</owner_id> |
| <rules> |
| <rule href='http://localhost:3001/api/firewalls/test/393485797142~tcp~22~22~@group,393485797142,default,@address,ipv4,10.1.2.3,24' id='393485797142~tcp~22~22~@group,393485797142,default,@address,ipv4,10.1.2.3,24'> |
| <allow_protocol>tcp</allow_protocol> |
| <port_from>22</port_from> |
| <port_to>22</port_to> |
| <direction>ingress</direction> |
| <sources> |
| <source name='default' owner='393485797142' type='group'></source> |
| <source address='10.1.2.3' family='ipv4' prefix='24' type='address'></source> |
| </sources> |
| </rule> |
| </rules> |
| </firewall> |
| </pre> |
| |
| </div> |
| <div class="tab-pane" id="tab3"> |
| |
| <h4>Create a new firewall</h4> |
| |
| <p> |
| To create a new firewall use call <strong>GET /api/firewalls/:id</strong>. Clients must specify the firewall name and description as parameters to the request. The Deltacloud server will respond with <strong>HTTP 201 Created</strong> to a succesful completion and return details of the newly created firewall. As with other POST operations in the Deltacloud API, a client may specify parameters as multipart/form-data or using the application/x-www-form-urlencoded content-type. |
| </p> |
| |
| <p>Example request:</p> |
| |
| <pre> |
| POST /api/firewalls?format=xml HTTP/1.1 |
| Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa== |
| User-Agent: curl/7.20.1 (i386-redhat-linux-gnu) |
| Host: localhost:3001 |
| Accept: */* |
| Content-Length: 64 |
| Content-Type: application/x-www-form-urlencoded |
| |
| name=Devel_Group&description=Access%20for%20all%20development%20machines |
| </pre> |
| |
| <p>Server response:</p> |
| |
| <pre> |
| HTTP/1.1 201 Created |
| Content-Type: application/xml |
| Date: Wed, 27 Jul 2011 08:35:43 GMT |
| Content-Length: 296 |
| |
| <?xml version='1.0' encoding='utf-8' ?> |
| <firewall href='http://localhost:3001/api/firewalls/Devel_Group' id='Devel_Group'> |
| <name><![CDATA[Devel_Group]]></name> |
| <description><![CDATA[Access for all development machines]]></description> |
| <owner_id></owner_id> |
| <rules> |
| </rules> |
| </firewall> |
| </pre> |
| |
| <h4>Delete a firewall</h4> |
| |
| <p> |
| To delete the specified firewall from the back-end cloud provider use call <strong>DELETE /api/firewalls/:id</strong>. The Deltacloud server will respond with <strong>HTTP 204 No Content</strong> after a successful deletion: |
| </p> |
| |
| <p>Example request:</p> |
| |
| <pre> |
| DELETE /api/firewalls/test?format=xml HTTP/1.1 |
| Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa== |
| User-Agent: curl/7.20.1 (i386-redhat-linux-gnu) |
| Host: localhost:3001 |
| Accept: */* |
| </pre> |
| |
| <p>Client response:</p> |
| |
| <pre> |
| HTTP/1.1 204 No Content |
| Date: Wed, 27 Jul 2011 09:47:43 GMT |
| </pre> |
| |
| <p> |
| The rules governing the deletion of a firewall are back-end cloud specific. |
| </p> |
| <p> |
| For Fujitsu GCP, as this operation destroys the virtual system with it, all instances in the system, including the firewall need to be in the STOPPED state. |
| </p> |
| <p> |
| For Amazon EC2, it is permitted to delete a firewall that has rules defined within it, with two exceptions. You cannot delete a firewall if it is referenced by another firewall; for instance <strong>firewall_1</strong> has a rule giving access to <strong>firewall_2</strong>. An attempt to delete firewall_2 will result in the error <strong>InvalidGroup.InUse</strong>, as you can see in the example below. The second exception is that you cannot delete a firewall if there are currently any running instances within that firewall (i.e. instances that specified the given firewall when they were launched). The error message in that case would be <strong>InvalidGroup.InUse: There are active instances using security group</strong>. In both cases the error messages are propagated from the back-end cloud provider to the requesting client. |
| </p> |
| |
| <p> |
| Example request (<strong>error deleting a firewall referenced by another firewall</strong>): |
| </p> |
| |
| <pre> |
| DELETE /api/firewalls/firewall_2?format=xml HTTP/1.1 |
| Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa== |
| User-Agent: curl/7.20.1 (i386-redhat-linux-gnu) |
| Host: localhost:3001 |
| Accept: */* |
| </pre> |
| |
| <p>Server response:</p> |
| |
| <pre> |
| HTTP/1.1 502 Bad Gateway |
| Content-Type: application/xml |
| Content-Length: 626 |
| |
| <error status='502' url='/api/firewalls/firewall_2?format=xml'> |
| <kind>backend_error</kind> |
| <backend driver='ec2'> |
| <code>502</code> |
| </backend> |
| <message><![CDATA[InvalidGroup.InUse: Group 393485797142:firewall_2 is used by groups: 393485797142:firewall_1 |
| REQUEST=ec2.us-east-1.amazonaws.com:443/?AWSAccessKeyId=AGG332FWWR5A11F327Q&Action=DeleteSecurityGroup&GroupName=firewall_2&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2011-07-27T08%3A50%3A50.000Z&Version=2010-08-31&Signature=g613223efwv5WAVhAosmPcrsfHqApAuw\nnwfYnZp0k3U%3D |
| REQUEST ID=8591fa20-a6ee-4db7-b30f-3022ecc9a9f5]]></message> |
| </error> |
| </pre> |
| |
| </div> |
| <div class="tab-pane" id="tab4"> |
| |
| <h4>Create a firewall rule</h4> |
| |
| <p> |
| To create a new firewall rule within a specified firewall use call <strong>POST /api/firewalls/:id/rules</strong>. This operation of the firewalls collection is not supported by Fujitsu GCP. A client must supply the <strong>protocol</strong> (one of udp, tcp or icmp), <strong>port_from</strong> and <strong>port_to</strong> as parameters. Of course the client must also specify the <strong>sources</strong> to which the given rule is applied. IP addresses are specified in CIDR format sequentially: ip_address1=192.168.10.10/24, ip_address2=10.1.1.1/16 ... ip_addressN=.... The IP address '0.0.0.0/0' acts as a wildcard to specify any IP address. Source firewalls are also specified sequentially, but the <strong>owner_id</strong> of the firewall prepared for authorization must also be supplied (this is an Amazon EC2 requirement): group1=name1, group1owner=1234567890, group2=name2, group2owner=0987654321, ... groupN=nameN, groupNowner=... |
| </p> |
| |
| <p> |
| The Deltacloud server responds with a <strong>HTTP 201 Created</strong> after a successful operation and adds the details of the given firewall. The example client request below specifies the required parameters as multipart/form-data. However clients may also legitimately use the application/x-www-form-urlencoded to provide firewall rule parameters. |
| </p> |
| |
| <p>Example request:</p> |
| |
| <pre> |
| POST /api/firewalls/default/rules?format=xml HTTP/1.1 |
| Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa== |
| User-Agent: curl/7.20.1 (i386-redhat-linux-gnu) |
| Host: localhost:3001 |
| Accept: */* |
| Content-Length: 1005 |
| Expect: 100-continue |
| Content-Type: multipart/form-data; boundary=----------------------------4c9e7fa0a35e |
| |
| ------------------------------4c9e7fa0a35e |
| Content-Disposition: form-data; name="protocol" |
| |
| tcp |
| ------------------------------4c9e7fa0a35e |
| Content-Disposition: form-data; name="port_from" |
| |
| 22 |
| ------------------------------4c9e7fa0a35e |
| Content-Disposition: form-data; name="port_to" |
| |
| 22 |
| ------------------------------4c9e7fa0a35e |
| Content-Disposition: form-data; name="group1" |
| |
| devel_group |
| ------------------------------4c9e7fa0a35e |
| Content-Disposition: form-data; name="group1owner" |
| |
| 393485797142 |
| ------------------------------4c9e7fa0a35e |
| Content-Disposition: form-data; name="group2" |
| |
| outside |
| ------------------------------4c9e7fa0a35e |
| Content-Disposition: form-data; name="group2owner" |
| |
| 393485797142 |
| ------------------------------4c9e7fa0a35e |
| Content-Disposition: form-data; name="ip_address1" |
| |
| 192.168.1.1/24 |
| ------------------------------4c9e7fa0a35e |
| Content-Disposition: form-data; name="ip_address2" |
| |
| 65.128.31.27/32 |
| ------------------------------4c9e7fa0a35e-- |
| </pre> |
| |
| <p>Server response:</p> |
| |
| <pre> |
| HTTP/1.1 201 Created |
| Content-Type: application/xml |
| Date: Wed, 27 Jul 2011 10:18:51 GMT |
| Content-Length: 1143 |
| |
| <firewall href='http://localhost:3001/api/firewalls/default' id='default'> |
| <name><![CDATA[default]]></name> |
| <description><![CDATA[default group]]></description> |
| <owner_id>393485797142</owner_id> |
| <rules> |
| <rule href='http://localhost:3001/api/firewalls/default/393485797142~tcp~22~22~@group,393485797142,devel_group,@group,393485797142,outside,@address,ipv4,192.168.1.1,24,@address,ipv4,65.128.31.27,32' id='393485797142~tcp~22~22~@group,393485797142,devel_group,@group,393485797142,outside,@address,ipv4,192.168.1.1,24,@address,ipv4,65.128.31.27,32'> |
| <allow_protocol>tcp</allow_protocol> |
| <port_from>22</port_from> |
| <port_to>22</port_to> |
| <direction>ingress</direction> |
| <sources> |
| <source name='devel_group' owner='393485797142' type='group'></source> |
| <source name='outside' owner='393485797142' type='group'></source> |
| <source address='192.168.1.1' family='ipv4' prefix='24' type='address'></source> |
| <source address='65.128.31.27' family='ipv4' prefix='32' type='address'></source> |
| </sources> |
| </rule> |
| </rules> |
| </firewall> |
| </pre> |
| |
| <h4 id="delete-rule">Delete a firewall rule</h4> |
| |
| <p> |
| To delete the specified firewall rule use call <strong>DELETE /api/firewalls/:id/:rule_id</strong>. The Deltacloud server will respond with <strong>HTTP 204 No Content</strong> on completion of a successful delete operation: |
| </p> |
| |
| <p>Example request:</p> |
| |
| <pre> |
| DELETE /api/firewalls/default/393485797142~tcp~0~0~@group,393485797142,devel_group,@group,393485797142,outside,@address,ipv4,192.168.1.1,24,@address,ipv4,65.128.31.27,32?format=xml HTTP/1.1 |
| Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa== |
| User-Agent: curl/7.20.1 (i386-redhat-linux-gnu) |
| Host: localhost:3001 |
| Accept: */* |
| </pre> |
| |
| <p>Server response:</p> |
| |
| <pre> |
| HTTP/1.1 204 No Content |
| Date: Wed, 27 Jul 2011 10:39:52 GMT |
| </pre> |
| |
| </div> |
| </div> |
| |
| <p><a class="btn btn-inverse btn-large" style="float: right" href="addresses.html">Addresses <i class="icon-arrow-right icon-white" style="vertical-align:baseline"> </i></a></p> |
| |
| <p><br></p> |
| |
| |
| <footer class="footer"> |
| <p class="pull-right"><span class='icon-circle-arrow-up'> </span><a href="#">Back to top</a></p> |
| <div class='row'> |
| <div class='span3'> |
| <img src="/assets/img/asf.png" alt="Apache Software Foundation"/> |
| </div> |
| <div class='span9'> |
| <strong>Apache Deltacloud</strong> is a top-level project at the <a |
| href="http://www.apache.org">Apache Software Foundation</a>, |
| having graduated from the ASF Incubator in October |
| 2011. Through a collaborative and meritocratic development process, Apache |
| projects deliver enterprise-grade, freely available software products that |
| attract large communities of users. |
| </div> |
| </div> |
| </footer> |
| |
| </div> <!-- /container --> |
| |
| <!-- Piwik --> |
| <script type="text/javascript"> |
| var pkBaseURL = (("https:" == document.location.protocol) ? "https://stats.salasaga.org/aeolus/piwik/" : "http://stats.salasaga.org/aeolus/piwik/"); |
| document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E")); |
| </script><script type="text/javascript"> |
| try { |
| var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 2); |
| piwikTracker.trackPageView(); |
| piwikTracker.enableLinkTracking(); |
| } catch( err ) {} |
| </script><noscript><p><img src="http://stats.salasaga.org/aeolus/piwik/piwik.php?idsite=2" style="border:0" alt="" /></p></noscript> |
| <!-- End Piwik Tracking Code --> |
| |
| </body> |
| </html> |