
# Copyright 2017-present Open Networking 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.


---
# docker_images.yml
# master list of docker images used by imagebuilder.py

# tag to set on every container built/downloaded

docker_build_tag: "candidate"

# pull_only_images: images pulled and used directly without changes
# you must include a tag (':1.0') on these images to pull the correct version
#
# do not include images in this list that are parents of images
# in buildable_images - those are automatically pulled

pull_only_images:
  - "gliderlabs/consul-server:0.6"
  - "gliderlabs/registrator:v7"
  - "nginx:1.13"
  - "onosproject/onos:1.10.3"
  - "redis:3.2"

# buildable_images - list of images that we build from Dockerfiles
#
# required:
#  name: Name of docker image
#  repo: git repo name (not the path! not what it's renamed to be in the repo manifest!)
# optional:
#  dockerfile: Name of Dockerfile. Default: "Dockerfile"
#  path: Path to parent directory of containing dockerfile, relative to. Default: "."
#  context: Path to docker build context, relative to path item. Default: "."
#  component: dict of sub-component paths to copy into build context.
#    repo: Name of component repo to copy from (required)
#    path: path in to copy from. Relative to component repo. Default "."
#    dest: destination path to copy components to, relative to context

buildable_images:
  - name: xosproject/xos-base
    repo: xos
    path: "containers/xos"
    dockerfile: "Dockerfile.base"

  - name: xosproject/xos-postgres
    repo: xos
    path: "containers/postgresql"

  - name: xosproject/xos
    repo: xos
    path: "containers/xos"
    dockerfile: "Dockerfile.xos"
    context: "../.."

  - name: xosproject/xos-libraries
    repo: xos
    path: "containers/xos"
    dockerfile: "Dockerfile.libraries"
    context: "../.."

  - name: xosproject/xos-corebuilder
    repo: xos
    path: "containers/xos"
    dockerfile: "Dockerfile.corebuilder"
    context: "../.."

  - name: xosproject/chameleon
    repo: xos
    path: "containers/chameleon"
    dockerfile: "Dockerfile.chameleon"
    components:
      - repo: chameleon
        dest: tmp.chameleon

  - name: xosproject/xos-client
    repo: xos
    path: "containers/xos"
    dockerfile: "Dockerfile.client"
    context: "../.."
    components:
      - repo: chameleon
        dest: containers/xos/tmp.chameleon

  - name: xosproject/xos-synchronizer-base
    repo: xos
    path: "containers/xos"
    dockerfile: "Dockerfile.synchronizer-base"
    context: "../.."

  - name: xosproject/xos-tosca
    repo: xos-tosca

  - name: xosproject/xos-ws
    repo: xos-rest-gw

  - name: xosproject/xos-gui
    repo: xos-gui

  - name: xosproject/xos-gui-extension-builder
    repo: xos-gui
    dockerfile: "Dockerfile.xos-gui-extension-builder"

  - name: xosproject/gui-extension-rcord
    repo: rcord
    path: "xos/gui"

  - name: xosproject/gui-extension-vtr
    repo: vtr
    path: "xos/gui"

  - name: xosproject/gui-extension-sample
    repo: xos-sample-gui-extension

  - name: xosproject/openstack-synchronizer
    repo: openstack
    path: "xos/synchronizer"
    dockerfile: "Dockerfile.synchronizer"

  - name: xosproject/onos-synchronizer
    repo: onos-service
    path: "xos/synchronizer"
    dockerfile: "Dockerfile.synchronizer"

  - name: xosproject/volt-synchronizer
    repo: olt
    path: "xos/synchronizer"
    dockerfile: "Dockerfile.synchronizer"

  - name: xosproject/vrouter-synchronizer
    repo: vrouter
    path: "xos/synchronizer"
    dockerfile: "Dockerfile.synchronizer"

  - name: xosproject/vtn-synchronizer
    repo: vtn
    path: "xos/synchronizer"
    dockerfile: "Dockerfile.synchronizer"

  - name: xosproject/vtr-synchronizer
    repo: vtr
    path: "xos/synchronizer"
    dockerfile: "Dockerfile.synchronizer"

  - name: xosproject/vsg-synchronizer
    repo: vsg
    path: "xos/synchronizer"
    dockerfile: "Dockerfile.synchronizer"

  - name: xosproject/fabric-synchronizer
    repo: fabric
    path: "xos/synchronizer"
    dockerfile: "Dockerfile.synchronizer"

  - name: xosproject/exampleservice-synchronizer
    repo: exampleservice
    path: "xos/synchronizer"
    dockerfile: "Dockerfile.synchronizer"

