<!--
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.MachineProvisioningLocation</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.MachineProvisioningLocation</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.MachineProvisioningLocation";
        })[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>
