<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <title>Brooklyn Location - brooklyn.location.jclouds.AbstractJcloudsSubnetSshMachineLocation</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
</head>
<body>
<div id="container">
    <div id="header">
        <div id="identity">
            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
        </div>
    </div>
    <div id="content" class="objectContent">
        <h1>brooklyn.location.jclouds.AbstractJcloudsSubnetSshMachineLocation</h1>
        <h2 class="typeLabel">Type:</h2><span id="type"></span>

        <h2>Config Keys</h2>
        <table id="configKeys">
            <tr>
                <th>Name</th>
                <th>Type</th>
                <th>Default Value</th>
                <th>Description</th>
            </tr>
        </table>
        <br>
    </div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
<script src="../items.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function () {
        var item = $.grep((items.locations), function (entity) {
            return entity.type == "brooklyn.location.jclouds.AbstractJcloudsSubnetSshMachineLocation";
        })[0];
        $("#type").html(item.type);
        item.config.forEach(function (element) {
            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
        });
    });
</script>
</body>
</html>
