<!--
  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.14.2.0-SNAPSHOT</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>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>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-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>f5</id>
            <activation>
                <property>
                    <name>noredist</name>
                </property>
            </activation>
            <modules>
                <module>network-elements/f5</module>
            </modules>
        </profile>
        <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>
