Skip to content

Instantly share code, notes, and snippets.

@Rokko11 Rokko11/docker-compose.yml
Last active Aug 20, 2019

Embed
What would you like to do?
Beispiel-Code für die Transformation eines docker-compose.yml in ein Markdown-File. Dieses wird mit dem pandoc-plantuml-Filter in ein Diagramm überführt.
version: '3'
services:
proxy:
image: nginx:1.15-alpine
labels:
description: "nginx SSL Proxy"
depends_on:
- webapp
- docs
- swagger
- keycloak
webappdb:
image: postgres:9.6-alpine
labels:
description: "Webapp DB"
webapp:
image: enowa/webapp:1.0.0
labels:
description: "Webapp"
depends_on:
- webappdb
- mailhog
- docs
- keycloak
client:
image: enowa/client:1.0.0
labels:
description: "Webapp CLI"
depends_on:
- webapp
- keycloak
tests:
image: enowa/webapp-tests:1.0.0
labels:
description: "Webapp Tests"
depends_on:
- webapp
- keycloak
swagger:
image: swaggerapi/swagger-ui
labels:
description: "Swagger UI"
depends_on:
- webapp
docsdb:
image: postgres:9.6-alpine
labels:
description: "Document Generator DB"
docs:
image: enowa/docs:2.0.3
labels:
description: "Document Generator"
depends_on:
- docsdb
- keycloak
mailhog:
labels:
description: "Mail Catcher"
image: mailhog/mailhog
keycloak:
image: jboss/keycloak
labels:
description: "Keycloak"

Verteilungssicht

@startuml
package "Docker Netzwerk" {
    [nginx SSL Proxy] as proxy
    [Webapp DB] as webappdb
    [Webapp] as webapp
    [Webapp CLI] as client
    [Webapp Tests] as tests
    [Swagger UI] as swagger
    [Document Generator DB] as docsdb
    [Document Generator] as docs
    [Mail Catcher] as mailhog
    [Keycloak] as keycloak
}
Browser --> proxy
Terminal --> client
Terminal --> tests
proxy -down-> webapp
proxy -down-> docs
proxy -down-> swagger
proxy -down-> keycloak
webapp --> webappdb
webapp --> mailhog
webapp -left-> docs
webapp -left-> keycloak
client --> webapp
client --> keycloak
tests --> webapp
tests --> keycloak
swagger -left-> webapp
docs --> docsdb
docs -left-> keycloak
@enduml
docker run -v $(pwd):/tmp \
ruby:2.3.1 \
ruby \
/tmp/transformation.rb \
> output.md
# Vielen Dank an cloudogu für die Bereitstellung dieses Services
docker run -v $(pwd):/data \
-e PLANTUML_URL=https://ecosystem.cloudogu.com \
cloudogu/pandoc \
*.md \
--filter pandoc-plantuml-filter \
-o result.pdf
rm -f *eps*
require 'yaml'
thing = YAML.load_file('/tmp/docker-compose.yml')
puts '## Verteilungssicht'
puts ''
puts '```uml'
puts '@startuml'
puts 'package "Docker Netzwerk" {'
thing['services'].each do |key, service|
puts " [#{service['labels']['description']}] as #{key}"
end
puts '}'
puts 'Browser --> proxy'
puts 'Terminal --> client'
puts 'Terminal --> tests'
stages = Hash.new
stages['proxy'] = 1
thing['services']['proxy']['depends_on'].each do |d|
stages[d] = 2
end
thing['services'].each do |key, service|
unless service['depends_on'].nil?
service['depends_on'].each do |depend|
if key == 'proxy'
puts "#{key} -down-> #{depend}"
elsif stages[key] == 2 and stages[depend] == 2
puts "#{key} -left-> #{depend}"
else
puts "#{key} --> #{depend}"
end
end
end
end
puts '@enduml'
puts '```'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.