diff options
author | Tony Hansen <tony@att.com> | 2017-09-29 17:29:52 +0000 |
---|---|---|
committer | Vijay <vv770d@att.com> | 2017-10-02 15:10:35 +0000 |
commit | 6b903fe0618acb79393d59aaad3a4a3631ec2553 (patch) | |
tree | 6db12ec618fc67e50f36c2fa6029d00280f79e48 | |
parent | a795b59c0465d84b70eea6a64371863e7aa01d85 (diff) |
update pgaas blueprints
mv check-blueprint-vs-input here from utils
fix minor changes pointed out by check-blueprint-vs-input
Change-Id: Ie9383858177b7df2b068c4171280322c4f5a214f
Signed-off-by: Tony Hansen <tony@att.com>
Issue-Id: DCAEGEN2-49
Signed-off-by: Vijay <vv770d@att.com>
-rw-r--r-- | blueprints/pgaas-cluster.yaml-template | 8 | ||||
-rw-r--r-- | blueprints/pgaas-database.yaml-template | 7 | ||||
-rw-r--r-- | blueprints/pgaas-disk.yaml-template | 16 | ||||
-rw-r--r-- | blueprints/pgaas-getdbinfo.yaml-template | 4 | ||||
-rw-r--r-- | blueprints/pgaas.yaml-template | 14 | ||||
-rw-r--r-- | check-blueprint-vs-input/lib/sample-inputs.yaml | 18 | ||||
-rw-r--r-- | check-blueprint-vs-input/man/check-blueprint-vs-input.1 | 50 | ||||
-rw-r--r-- | check-blueprint-vs-input/man/check-blueprint-vs-input.man | 55 | ||||
-rw-r--r-- | check-blueprint-vs-input/pom.xml | 250 |
9 files changed, 398 insertions, 24 deletions
diff --git a/blueprints/pgaas-cluster.yaml-template b/blueprints/pgaas-cluster.yaml-template index 520def7..7411c06 100644 --- a/blueprints/pgaas-cluster.yaml-template +++ b/blueprints/pgaas-cluster.yaml-template @@ -23,7 +23,7 @@ tosca_definitions_version: cloudify_dsl_1_3 -description: > +description: |- This blueprint is used to install and to uninstall a central postgres as a platform service. This blueprint depends upon the deployment of the pgaas_plugin, the PGaaS Cinder volume, and Consul. This blueprint is part of a suite of three blueprints that allow a PGaaS @@ -40,9 +40,9 @@ imports: - http://www.getcloudify.org/spec/openstack-plugin/1.4/plugin.yaml - http://www.getcloudify.org/spec/fabric-plugin/1.4.1/plugin.yaml - - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/dnsdesig/dns_types.yaml - - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/relationship/1.0.0/node-type.yaml - - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/pgaas_plugin/1.0.0/pgaas_types.yaml + - "{{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/dnsdesig/dns_types.yaml" + - "{{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/relationship/1.0.0/node-type.yaml" + - "{{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/pgaas_plugin/1.0.0/pgaas_types.yaml" inputs: # environment info diff --git a/blueprints/pgaas-database.yaml-template b/blueprints/pgaas-database.yaml-template index c387d18..45acd56 100644 --- a/blueprints/pgaas-database.yaml-template +++ b/blueprints/pgaas-database.yaml-template @@ -2,7 +2,7 @@ tosca_definitions_version: cloudify_dsl_1_3 -description: > +description: |- This blueprint is used to install and to uninstall a persistent database into the central postgres as a platform service. This blueprint depends upon the deployment of the pgaas_plugin, the PGaaS Cinder volume, the PGaaS service, and Consul. This blueprint is part of a suite of three blueprints that allow a PGaaS @@ -17,7 +17,7 @@ description: > imports: - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml - - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/pgaas_plugin/1.0.0/pgaas_types.yaml + - "{{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/pgaas_plugin/1.0.0/pgaas_types.yaml" inputs: # environment info @@ -48,7 +48,8 @@ inputs: pgaas_cluster_name: type: string default: pgcl - database_contacts: {} + database_contacts: + type: {} default: {} database_description: type: string diff --git a/blueprints/pgaas-disk.yaml-template b/blueprints/pgaas-disk.yaml-template index e4c53b3..e451886 100644 --- a/blueprints/pgaas-disk.yaml-template +++ b/blueprints/pgaas-disk.yaml-template @@ -2,7 +2,7 @@ tosca_definitions_version: cloudify_dsl_1_3 -description: > +description: |- This blueprint is used to install and to uninstall the cinder volumes for a central postgres as a platform service. This blueprint depends upon the deployment of Consul and the pgaas_plugin. @@ -20,10 +20,10 @@ imports: - http://www.getcloudify.org/spec/openstack-plugin/1.4/plugin.yaml - http://www.getcloudify.org/spec/fabric-plugin/1.4.1/plugin.yaml - - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/dnsdesig/dns_types.yaml - - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_ccsdk_platform_plugins_releases }}/type_files/sshkeyshare/sshkey_types.yaml - - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/relationship/1.0.0/node-type.yaml - - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/pgaas_plugin/1.0.0/pgaas_types.yaml + - "{{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/dnsdesig/dns_types.yaml" + - "{{ ONAPTEMPLATE_RAWREPOURL_org_onap_ccsdk_platform_plugins_releases }}/type_files/sshkeyshare/sshkey_types.yaml" + - "{{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/relationship/1.0.0/node-type.yaml" + - "{{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/pgaas_plugin/1.0.0/pgaas_types.yaml" inputs: # environment info @@ -54,6 +54,12 @@ inputs: pgaas_cluster_name: type: string default: pgcl +<<<<<<< HEAD +======= + cinder_volume_size: + type: string + default: 300 +>>>>>>> f62e307... update pgaas blueprints node_templates: key_pair: diff --git a/blueprints/pgaas-getdbinfo.yaml-template b/blueprints/pgaas-getdbinfo.yaml-template index 9dfc89e..833d72a 100644 --- a/blueprints/pgaas-getdbinfo.yaml-template +++ b/blueprints/pgaas-getdbinfo.yaml-template @@ -2,7 +2,7 @@ tosca_definitions_version: cloudify_dsl_1_3 -description: > +description: |- This blueprint is an example of how an application can access the needed information about a persistent database created as part of a PGaaS cluster. @@ -17,7 +17,7 @@ description: > imports: - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml - - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/pgaas_plugin/1.0.0/pgaas_types.yaml + - "{{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/pgaas_plugin/1.0.0/pgaas_types.yaml" inputs: location_domain: diff --git a/blueprints/pgaas.yaml-template b/blueprints/pgaas.yaml-template index 810912e..74584cf 100644 --- a/blueprints/pgaas.yaml-template +++ b/blueprints/pgaas.yaml-template @@ -1,7 +1,5 @@ # -*- indent-tabs-mode: nil -*- # vi: set expandtab: -# TODO -# add consul registration # ============LICENSE_START==================================================== # org.onap.dcae @@ -23,19 +21,15 @@ tosca_definitions_version: cloudify_dsl_1_3 -description: > - This blueprint is used to install and to uninstall a central postgres as a platform service. - This blueprint depends upon the deployment of the pgaas_plugin and Consul. - imports: - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml - http://www.getcloudify.org/spec/openstack-plugin/1.4/plugin.yaml - http://www.getcloudify.org/spec/fabric-plugin/1.4.1/plugin.yaml - - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/dnsdesig/dns_types.yaml - - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_ccsdk_platform_plugins_releases }}/type_files/sshkeyshare/sshkey_types.yaml - - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/relationship/1.0.0/node-type.yaml - - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/pgaas_plugin/1.0.0/pgaas_types.yaml + - "{{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/dnsdesig/dns_types.yaml" + - "{{ ONAPTEMPLATE_RAWREPOURL_org_onap_ccsdk_platform_plugins_releases }}/type_files/sshkeyshare/sshkey_types.yaml" + - "{{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/relationship/1.0.0/node-type.yaml" + - "{{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases }}/type_files/pgaas_plugin/1.0.0/pgaas_types.yaml" inputs: # environment info diff --git a/check-blueprint-vs-input/lib/sample-inputs.yaml b/check-blueprint-vs-input/lib/sample-inputs.yaml new file mode 100644 index 0000000..48e5e24 --- /dev/null +++ b/check-blueprint-vs-input/lib/sample-inputs.yaml @@ -0,0 +1,18 @@ +centos7image_id: '7c8d7524-de1f-490b-8418-db294bfa2d65' +ubuntu1604image_id: '4b09c18b-d69e-4ba8-a1bd-562cab91ff20' +flavor_id: '4' +security_group: '55a11193-6559-4f6c-b2d2-0119a9817062' +public_net: 'admin_floating_228_net' +private_net: 'onap-f-net' +openstack: + username: 'MY_LOGIN' + password: 'MY_PASSWORD' + tenant_name: 'TENANT_NAME' + auth_url: 'KEYSTONE_AUTH_URL' + region: 'RegionOne' +keypair: 'KEYNME' +key_filename: '/opt/dcae/key' +location_prefix: 'onapr1' +location_domain: 'onapdevlab.onap.org' +codesource_url: 'https://nexus.onap.org/service/local/repositories/raw/content' +codesource_version: 'org.onap.dcaegen2.deployments/releases/scripts' diff --git a/check-blueprint-vs-input/man/check-blueprint-vs-input.1 b/check-blueprint-vs-input/man/check-blueprint-vs-input.1 new file mode 100644 index 0000000..247fbc6 --- /dev/null +++ b/check-blueprint-vs-input/man/check-blueprint-vs-input.1 @@ -0,0 +1,50 @@ +check-blueprint-vs-input(1UTIL) ONAP check-blueprint-vs-input(1UTIL) + + + +NNAAMMEE + check-blueprint-vs-input + +SSYYNNOOPPSSIISS + check-blueprint-vs-input [-h] [-b BLUEPRINT] [-i INPUTS] + [-B BLUEPRINT_EXCLUSION_LIST] + [-I INPUTS_EXCLUSION_LIST] [-t] [-v] + +DDEESSCCRRIIPPTTIIOONN + Validate a blueprint and inputs file against each other. This looks for + the inputs: node of the blueprint file, the inputs used by {get_input} + within the blueprint, and the values found in the inputs file. The + files may be in either YAML or JSON formats. The names default to blue‐ + print.yaml and inputs.yaml. If a blueprint inputs name has a default + value, it is not considered an error if it is not in the inputs file. + If using a template inputs file, add the -t/--template option. This + will look for the inputs under an "inputs:" node instead of at the top + level. If there are blueprint nodes or inputs nodes that should not be + considered an error, specify them using the -B/--blueprint- exclusion- + list and -I/inputs-exclusion-list parameters. "check-blueprint-vs- + input --help" will list all of the available options. + + OOPPTTIIOONNSS + -h, --help show this help message and exit + + -b BLUEPRINT, --blueprint BLUEPRINT Path to blueprint file, defaults to + 'blueprint.yaml' + + -i INPUTS, --inputs INPUTS Port to listen on, defaults to 'inputs.yaml' + + -B BLUEPRINT_EXCLUSION_LIST, --blueprint-exclusion-list BLUE‐ + PRINT_EXCLUSION_LIST Comma-separated list of names + not to warn about not + being in the blueprint file + + -I INPUTS_EXCLUSION_LIST, --inputs-exclusion-list INPUTS_EXCLUSION_LIST + Comma-separated list of names not to warn about not + being in the inputs file + + -t, --inputs-template Treat inputs file as coming from template area + + -v, --verbose Verbose, may be specified multiple times + + + +ONAP {{DATE}} check-blueprint-vs-input(1UTIL) diff --git a/check-blueprint-vs-input/man/check-blueprint-vs-input.man b/check-blueprint-vs-input/man/check-blueprint-vs-input.man new file mode 100644 index 0000000..017d529 --- /dev/null +++ b/check-blueprint-vs-input/man/check-blueprint-vs-input.man @@ -0,0 +1,55 @@ +'\" Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. +'\" +'\" Licensed under the Apache License, Version 2.0 (the "License"); +'\" you may not use this code 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. +.TH check-blueprint-vs-input 1UTIL {{DATE}} ONAP ONAP +.SH NAME +check-blueprint-vs-input +.SH SYNOPSIS +check-blueprint-vs-input [-h] [-b BLUEPRINT] [-i INPUTS] + [-B BLUEPRINT_EXCLUSION_LIST] + [-I INPUTS_EXCLUSION_LIST] [-t] [-v] +.SH DESCRIPTION +Validate a blueprint and inputs file against each other. This looks for the +inputs: node of the blueprint file, the inputs used by {get_input} within the +blueprint, and the values found in the inputs file. The files may be in either +YAML or JSON formats. The names default to blueprint.yaml and inputs.yaml. If +a blueprint inputs name has a default value, it is not considered an error if +it is not in the inputs file. If using a template inputs file, add the +-t/--template option. This will look for the inputs under an "inputs:" node +instead of at the top level. If there are blueprint nodes or inputs nodes that +should not be considered an error, specify them using the -B/--blueprint- +exclusion-list and -I/inputs-exclusion-list parameters. "check-blueprint-vs- +input --help" will list all of the available options. +.SS OPTIONS +.HP 20 +-h, --help +show this help message and exit +.HP 20 +-b BLUEPRINT, --blueprint BLUEPRINT +Path to blueprint file, defaults to 'blueprint.yaml' +.HP 20 +-i INPUTS, --inputs INPUTS +Port to listen on, defaults to 'inputs.yaml' +.HP 20 +-B BLUEPRINT_EXCLUSION_LIST, --blueprint-exclusion-list BLUEPRINT_EXCLUSION_LIST +Comma-separated list of names not to warn about not + being in the blueprint file +.HP 20 +-I INPUTS_EXCLUSION_LIST, --inputs-exclusion-list INPUTS_EXCLUSION_LIST +Comma-separated list of names not to warn about not + being in the inputs file +.HP 20 +-t, --inputs-template +Treat inputs file as coming from template area +.HP 20 +-v, --verbose +Verbose, may be specified multiple times diff --git a/check-blueprint-vs-input/pom.xml b/check-blueprint-vs-input/pom.xml new file mode 100644 index 0000000..f50e191 --- /dev/null +++ b/check-blueprint-vs-input/pom.xml @@ -0,0 +1,250 @@ +<?xml version="1.0"?> +<!-- +================================================================================ +Copyright (c) 2017 AT&T Intellectual Property. All rights reserved. +================================================================================ +Licensed 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. +============LICENSE_END========================================================= + +ECOMP is a trademark and service mark of AT&T Intellectual Property. +--> +<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.onap.dcaegen2.platform.blueprints</groupId> + <artifactId>blueprints</artifactId> + <version>1.0.0-SNAPSHOT</version> + </parent> + <groupId>org.onap.dcaegen2.plaform.blueprints</groupId> + <artifactId>check-blueprint-vs-input</artifactId> + <name>dcaegen2-plaform-blueprints-check-blueprint-vs-input</name> + <version>1.0.0-SNAPSHOT</version> + <url>http://maven.apache.org</url> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <sonar.skip>true</sonar.skip> + <sonar.sources>.</sonar.sources> + <!-- customize the SONARQUBE URL --> + <!-- sonar.host.url>http://localhost:9000</sonar.host.url --> + <!-- below are language dependent --> + <!-- for Python --> + <sonar.language>py</sonar.language> + <sonar.pluginName>Python</sonar.pluginName> + <sonar.inclusions>**/*.py</sonar.inclusions> + <!-- for JavaScaript --> + <!-- + <sonar.language>js</sonar.language> + <sonar.pluginName>JS</sonar.pluginName> + <sonar.inclusions>**/*.js</sonar.inclusions> + --> + </properties> + <build> + <finalName>${project.artifactId}-${project.version}</finalName> + <pluginManagement> + <plugins> + <!-- the following plugins are invoked from oparent, we do not need them --> + <plugin> + <groupId>org.sonatype.plugins</groupId> + <artifactId>nexus-staging-maven-plugin</artifactId> + <version>1.6.7</version> + <configuration> + <skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-deploy-plugin</artifactId> + <!-- This version supports the "deployAtEnd" parameter --> + <version>2.8</version> + <configuration> + <skip>true</skip> + </configuration> + </plugin> + <!-- first disable the default Java plugins at various stages --> + <!-- maven-resources-plugin is called during "*resource" phases by default behavior. it prepares + the resources dir. we do not need it --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-resources-plugin</artifactId> + <version>2.6</version> + <configuration> + <skip>true</skip> + </configuration> + </plugin> + <!-- maven-compiler-plugin is called during "compile" phases by default behavior. we do not need it --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.1</version> + <configuration> + <skip>true</skip> + </configuration> + </plugin> + <!-- maven-jar-plugin is called during "compile" phase by default behavior. we do not need it --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <version>2.4</version> + <executions> + <execution> + <id>default-jar</id> + <phase/> + </execution> + </executions> + </plugin> + <!-- maven-install-plugin is called during "install" phase by default behavior. it tries to copy stuff under + target dir to ~/.m2. we do not need it --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-install-plugin</artifactId> + <version>2.4</version> + <configuration> + <skip>true</skip> + </configuration> + </plugin> + <!-- maven-surefire-plugin is called during "test" phase by default behavior. it triggers junit test. + we do not need it --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <version>2.12.4</version> + <configuration> + <skipTests>true</skipTests> + </configuration> + </plugin> + </plugins> + </pluginManagement> + <plugins> + <!-- plugin> + <artifactId>maven-assembly-plugin</artifactId> + <version>2.4.1</version> + <configuration> + <descriptors> + <descriptor>assembly/dep.xml</descriptor> + </descriptors> + </configuration> + <executions> + <execution> + <id>make-assembly</id> + <phase>package</phase> + <goals> + <goal>single</goal> + </goals> + </execution> + </executions> + </plugin --> + <!-- now we configure custom action (calling a script) at various lifecycle phases --> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>exec-maven-plugin</artifactId> + <version>1.2.1</version> + <executions> + <execution> + <id>clean phase script</id> + <phase>clean</phase> + <goals> + <goal>exec</goal> + </goals> + <configuration> + <arguments> + <argument>${project.artifactId}</argument> + <argument>clean</argument> + </arguments> + </configuration> + </execution> + <execution> + <id>generate-sources script</id> + <phase>generate-sources</phase> + <goals> + <goal>exec</goal> + </goals> + <configuration> + <arguments> + <argument>${project.artifactId}</argument> + <argument>generate-sources</argument> + </arguments> + </configuration> + </execution> + <execution> + <id>compile script</id> + <phase>compile</phase> + <goals> + <goal>exec</goal> + </goals> + <configuration> + <arguments> + <argument>${project.artifactId}</argument> + <argument>compile</argument> + </arguments> + </configuration> + </execution> + <execution> + <id>package script</id> + <phase>package</phase> + <goals> + <goal>exec</goal> + </goals> + <configuration> + <arguments> + <argument>${project.artifactId}</argument> + <argument>package</argument> + </arguments> + </configuration> + </execution> + <execution> + <id>test script</id> + <phase>test</phase> + <goals> + <goal>exec</goal> + </goals> + <configuration> + <arguments> + <argument>${project.artifactId}</argument> + <argument>test</argument> + </arguments> + </configuration> + </execution> + <execution> + <id>install script</id> + <phase>install</phase> + <goals> + <goal>exec</goal> + </goals> + <configuration> + <arguments> + <argument>${project.artifactId}</argument> + <argument>install</argument> + </arguments> + </configuration> + </execution> + <execution> + <id>deploy script</id> + <phase>deploy</phase> + <goals> + <goal>exec</goal> + </goals> + <configuration> + <arguments> + <argument>${project.artifactId}</argument> + <argument>deploy</argument> + <argument>bin/check-blueprint-vs-input</argument> + <argument>man/check-blueprint-vs-input.1</argument> + </arguments> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> |