<!--
  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>
  <parent>
    <groupId>org.apache.cloudstack</groupId>
    <artifactId>cloudstack-plugins</artifactId>
    <version>4.10.0.0</version>
    <relativePath>../../pom.xml</relativePath>
  </parent>
  <artifactId>cloud-plugin-example-dns-notifier</artifactId>
  <name>Apache CloudStack Plugin - Dns Notifier Example</name>
  <description>This is sample source code on how to write a plugin for CloudStack</description>
  <build>
    <defaultGoal>install</defaultGoal>
    <sourceDirectory>src</sourceDirectory>
    <testSourceDirectory>test</testSourceDirectory>
  </build>
  <dependencies>
    <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>
  </dependencies>
</project>
