| /************************************************************************ |
| * Copyright 2022 highstreet technologies GmbH |
| * |
| * 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. |
| ************************************************************************/ |
| |
| package main |
| |
| // Config is the entire docker-compose YAML object |
| type Config struct { |
| Version string |
| CommonEnvs map[string]string `yaml:"x-common_env,anchor=common_env"` |
| DuEnv map[string]string `yaml:"x-du_env,anchor=du_env"` |
| RuEnv map[string]string `yaml:"x-ru_env,anchor=ru_env"` |
| TopoEnv map[string]string `yaml:"x-topo_env,anchor=topo_env"` |
| CommonNfs CommonNf `yaml:"x-nf,anchor=common_nf"` |
| Networks map[string]Network |
| Volumes map[string]Volume `yaml:",omitempty"` |
| Services map[string]Service |
| } |
| |
| // CommonNf is the common network function alias |
| type CommonNf struct { |
| StopGracePeriod string `yaml:"stop_grace_period"` |
| CapAdd []string `yaml:"cap_add"` |
| } |
| |
| // Network is the network YAML object |
| type Network struct { |
| Driver string `yaml:",omitempty"` |
| DriverOpts map[string]string `yaml:"driver_opts,omitempty"` |
| External map[string]string `yaml:",omitempty"` |
| } |
| |
| // Volume is the volume YAML object |
| type Volume struct { |
| Driver, External string |
| DriverOpts map[string]string `yaml:"driver_opts"` |
| } |
| |
| // Service is the service YAML object |
| type Service struct { |
| *Service `yaml:",inline,alias=common_nf"` |
| ContainerName string `yaml:"container_name"` |
| Image string |
| Networks, Ports, Volumes, Command, Links []string `yaml:",omitempty"` |
| VolumesFrom []string `yaml:"volumes_from,omitempty"` |
| DependsOn []string `yaml:"depends_on,omitempty"` |
| CapAdd []string `yaml:"cap_add,omitempty"` |
| Build struct{ Context, Dockerfile string } `yaml:",omitempty"` |
| Environment Env `yaml:"environment"` |
| Hostname string |
| } |
| |
| // Env is the environment YAML object |
| type Env struct { |
| *CommonEnv `yaml:",omitempty,inline,alias=common_env"` |
| *DuEnv `yaml:",omitempty,inline,alias=du_env"` |
| *RuEnv `yaml:",omitempty,inline,alias=ru_env"` |
| *TopoEnv `yaml:",omitempty,inline,alias=topo_env"` |
| } |
| |
| // CommonEnv is the common_env anchor |
| type CommonEnv struct { |
| *CommonEnv `yaml:",omitempty,inline,alias=common_env"` |
| } |
| |
| // DuEnv is the du_env anchor |
| type DuEnv struct { |
| *DuEnv `yaml:",omitempty,inline,alias=du_env"` |
| } |
| |
| // RuEnv is the ru_env anchor |
| type RuEnv struct { |
| *RuEnv `yaml:",omitempty,inline,alias=ru_env"` |
| } |
| |
| // TopoEnv is the topo_env anchor |
| type TopoEnv struct { |
| *TopoEnv `yaml:",omitempty,inline,alias=topo_env"` |
| } |