<!--
  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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>cloudstack-plugins</artifactId>
    <name>Apache CloudStack Plugin POM</name>
    <packaging>pom</packaging>
    <parent>
        <groupId>org.apache.cloudstack</groupId>
        <artifactId>cloudstack</artifactId>
        <version>4.17.2.0</version>
    </parent>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <executions>
                    <execution>
                        <id>cloudstack-checkstyle</id>
                        <phase>none</phase>
                        <inherited>false</inherited>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <modules>
        <!-- keep in alphabetic order -->
        <module>acl/dynamic-role-based</module>
        <module>acl/static-role-based</module>
        <module>acl/project-role-based</module>

        <module>affinity-group-processors/explicit-dedication</module>
        <module>affinity-group-processors/host-affinity</module>
        <module>affinity-group-processors/host-anti-affinity</module>

        <module>alert-handlers/snmp-alerts</module>
        <module>alert-handlers/syslog-alerts</module>

        <module>api/discovery</module>
        <module>api/rate-limit</module>
        <module>api/solidfire-intg-test</module>

        <module>backup/dummy</module>

        <module>ca/root-ca</module>

        <module>database/quota</module>

        <module>dedicated-resources</module>

        <module>deployment-planners/implicit-dedication</module>
        <module>deployment-planners/user-concentrated-pod</module>
        <module>deployment-planners/user-dispersing</module>

        <module>event-bus/inmemory</module>
        <module>event-bus/kafka</module>
        <module>event-bus/rabbitmq</module>

        <module>ha-planners/skip-heurestics</module>

        <module>host-allocators/random</module>

        <module>hypervisors/baremetal</module>
        <module>hypervisors/hyperv</module>
        <module>hypervisors/kvm</module>
        <module>hypervisors/ovm3</module>
        <module>hypervisors/ovm</module>
        <module>hypervisors/ucs</module>
        <module>hypervisors/xenserver</module>

        <module>integrations/cloudian</module>
        <module>integrations/prometheus</module>
        <module>integrations/kubernetes-service</module>

        <module>metrics</module>

        <module>network-elements/bigswitch</module>
        <module>network-elements/dns-notifier</module>
        <module>network-elements/juniper-contrail</module>
        <module>network-elements/elastic-loadbalancer</module>
        <module>network-elements/globodns</module>
        <module>network-elements/internal-loadbalancer</module>
        <module>network-elements/netscaler</module>
        <module>network-elements/nicira-nvp</module>
        <module>network-elements/opendaylight</module>
        <module>network-elements/ovs</module>
        <module>network-elements/palo-alto</module>
        <module>network-elements/stratosphere-ssp</module>
        <module>network-elements/brocade-vcs</module>
        <module>network-elements/vxlan</module>

        <module>outofbandmanagement-drivers/ipmitool</module>
        <module>outofbandmanagement-drivers/nested-cloudstack</module>
        <module>outofbandmanagement-drivers/redfish</module>

        <module>storage/image/default</module>
        <module>storage/image/s3</module>
        <module>storage/image/sample</module>
        <module>storage/image/swift</module>
        <module>storage/volume/cloudbyte</module>
        <module>storage/volume/datera</module>
        <module>storage/volume/default</module>
        <module>storage/volume/nexenta</module>
        <module>storage/volume/sample</module>
        <module>storage/volume/solidfire</module>
        <module>storage/volume/scaleio</module>
        <module>storage/volume/linstor</module>
        <module>storage/volume/storpool</module>


        <module>storage-allocators/random</module>

        <module>user-authenticators/ldap</module>
        <module>user-authenticators/md5</module>
        <module>user-authenticators/pbkdf2</module>
        <module>user-authenticators/plain-text</module>
        <module>user-authenticators/saml2</module>
        <module>user-authenticators/sha256salted</module>
   </modules>
    <dependencies>
        <dependency>
            <groupId>org.apache.cloudstack</groupId>
            <artifactId>cloud-server</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cloudstack</groupId>
            <artifactId>cloud-api</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cloudstack</groupId>
            <artifactId>cloud-utils</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cloudstack</groupId>
            <artifactId>cloud-framework-config</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cloudstack</groupId>
            <artifactId>cloud-api</artifactId>
            <version>${project.version}</version>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <profiles>
        <profile>
            <id>srx</id>
            <activation>
                <property>
                    <name>noredist</name>
                </property>
            </activation>
            <modules>
                <module>network-elements/juniper-srx</module>
            </modules>
        </profile>
        <profile>
            <id>vmware</id>
            <activation>
                <property>
                    <name>noredist</name>
                </property>
            </activation>
            <modules>
                <module>api/vmware-sioc</module>
                <module>backup/veeam</module>
                <module>hypervisors/vmware</module>
                <module>network-elements/cisco-vnmc</module>
            </modules>
        </profile>
        <profile>
            <id>mysqlha</id>
            <activation>
                <property>
                    <name>noredist</name>
                </property>
            </activation>
            <modules>
                <module>database/mysql-ha</module>
            </modules>
        </profile>
        <profile>
            <id>simulator</id>
            <activation>
                <property>
                    <name>simulator</name>
                </property>
            </activation>
            <modules>
                <module>hypervisors/simulator</module>
            </modules>
        </profile>
    </profiles>
</project>
