<?xml version='1.0' encoding='utf-8' ?>
<!-- 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.
-->
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "file:///C:/Program%20Files%20(x86)/Publican/DocBook_DTD/docbookx.dtd" [
<!ENTITY % BOOK_ENTITIES SYSTEM "cloudstack.ent">
%BOOK_ENTITIES;
]>
<section id="configuring-projects">
    <title>Configuring Projects</title>
    <para>Before &PRODUCT; users start using projects, the &PRODUCT; administrator must set
        up various systems to support them, including membership invitations, limits on project
        resources, and controls on who can create projects.</para>
    <xi:include href="set-up-invitations.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
    <xi:include href="set-resource-limits-for-projects.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
    <xi:include href="set-projects-creator-permissions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
</section>
      
