
# 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.6"
  - "redis:3.2"
  - "node:7.9.0" # remove once the issue with node:candidate is resolved

# 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/addressmanager-synchronizer
    repo: addressmanager
    path: "xos/synchronizer"
    dockerfile: "Dockerfile.synchronizer"

  - 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-service
    path: "xos/synchronizer"
    dockerfile: "Dockerfile.synchronizer"

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

  - name: xosproject/vtn-synchronizer
    repo: vtn-service
    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"

