#  ============LICENSE_START=======================================================
#   Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
#   Modifications Copyright © 2021 Orange
#   Modifications Copyright © 2021 Nordix Foundation
#  ================================================================================
#  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.
#
#  SPDX-License-Identifier: Apache-2.0
#  ============LICENSE_END=========================================================

apiVersion: v2
description: ONAP Policy XACML PDP (PDP-X)
name: policy-xacml-pdp
version: 12.0.0

dependencies:
  - name: common
    version: ~12.x-0
    repository: '@local'
  - name: repositoryGenerator
    version: ~12.x-0
    repository: '@local'
  - name: serviceAccount
    version: ~12.x-0
    repository: '@local'
