From eee7b009a4947e5989f83b41aaf73466d408efcf Mon Sep 17 00:00:00 2001 From: Fabian Schlenz Date: Fri, 4 Sep 2020 06:18:38 +0200 Subject: [PATCH] Updated mappings, sample yml and options. --- dup.rb | 127 +++++++++++++++++++++++++++++++-------------------------- 1 file changed, 69 insertions(+), 58 deletions(-) diff --git a/dup.rb b/dup.rb index d1aeec1..eb06c8e 100755 --- a/dup.rb +++ b/dup.rb @@ -7,6 +7,16 @@ require 'ostruct' require 'json' MAPPINGS = [ + # Syntax: + # [name_in_yml, docker_option_name, lambda_for_creating_yml_for_container=nil, options={}] + # Options are: + # type: Sets type of this option + # switch: Only adds the docker_option_name to the command, ignoring the value. + # name: Value will be set to the name of the container (from yml filename or root element) + # hidden: Will not be added to the run command + # allow_empty: May be empty. + # escape: If set to false, will not be shellescaped + ['stdin_open', '--interactive', lambda{|c,i| c.Config.OpenStdin}, {:type=>:switch}], ['tty', '--tty', lambda{|c,i| c.Config.Tty}, {:type=>:switch}], #['detach', '--detach', {:type=>:switch}], @@ -31,74 +41,74 @@ MAPPINGS = [ ['working_dir', '--workdir', lambda{|c,i| (wd=c.Config.WorkingDir) == i.Config.WorkingDir ? nil : wd}], ['init', '--init', lambda{|c,i| c.Config.Init}, {:type=>:switch}], ['image', nil, lambda{|c,i| c.Config.Image}], + ['command', nil, lambda{|c,i| (cmd=c.Config.Cmd.join(" ") rescue nil) == (i.Config.Cmd.join(" ") rescue nil)? nil : cmd}, {:escape=>false}], + ['test', nil, nil, {type: :hidden}], ['auto_update', nil, nil, {type: :hidden}] ] def get_sample(name="container") return <<~HEREDOC - #{name}: - image: "my/image:1.2.3" - restart: always - detach: true - test: true # Having this set to true will prevent dup from creating a label de.fabianonline.dup + image: "my/image:1.2.3" + restart: always + detach: true + test: true # Having this set to true will prevent dup from creating a label de.fabianonline.dup + auto_update: true # Enabling this adds a label to allow watchtower to automatically update this container - ports: - - "1234:1234" - - "8080" - - "1001:1001/udp" + ports: + - "1234:1234" + - "8080" + - "1001:1001/udp" - environment: - VERSION: 1.7.0 - TZ: + environment: + VERSION: 1.7.0 + TZ: - volumes: - - "/etc/localtime:/etc/localtime:ro" + volumes: + - "/etc/localtime:/etc/localtime:ro" - links: - - "another_container" + labels: + nginx_virtual_host: container.home.schle.nz + nginx_port: 80 + nginx_additional_ports: "443, 5050" + nginx_allow: fabian # "user" or "@group" or "user, user, @group" or "all" + nginx_no_robots: true + nginx_public_paths: "/public, /api" + nginx_type: # "http" (default), "https", "skip" (doesn't create any entries) + nginx_client_max_body_size: 25M + + networks: + - "nginx" + - "mosquitto" + - "bridge" + + user: "1000:1000" + command: "/bin/bash" + entrypoint: "/script.sh" + build: "/data/dir" + pull: false + container_name: "Something" + hostname: "foo" + mem_limit: 125M + stdin_open: false + net: host + tty: false + remove: false + stop_signal: SIGUSR1 + stop_grace_period: 5 - labels: - com.centurylinklabs.watchtower.enable: true - nginx_virtual_host: container.home.fabianonline.de - nginx_port: 80 - nginx_allow: fabian # "user" or "@group" or "user, user, @group" or "all" - nginx_no_robots: true - nginx_public_paths: "/public, /api" - nginx_type: # "http" (default), "fastcgi", "skip" (doesn't create any entries) - - networks: - - "nginx" - - "mosquitto" - - "bridge" - - test: true - command: "/bin/bash" - entrypoint: "/script.sh" - build: "/data/dir" - pull: false - container_name: "Something" - hostname: "foo" - mem_limit: 125M - stdin_open: false - net: host - tty: false - remove: false - stop_signal: SIGUSR1 - stop_grace_period: 5 - - before_build: - - "echo 'Starting build'" - after_build: - - "echo 'After build'" - before_run: - - "echo 'Starting run'" - after_run: - - "echo 'Run has finished.'" + before_build: + - "echo 'Starting build'" + after_build: + - "echo 'After build'" + before_run: + - "echo 'Starting run'" + after_run: + - "echo 'Run has finished.'" - "docker restart container" - devices: - - "/dev/ttyUSB0:/dev/ttyUSB0" + devices: + - "/dev/ttyUSB0:/dev/ttyUSB0" HEREDOC end @@ -224,7 +234,7 @@ class Container end def filename; "%s/%s.yml" % [$base_dir, @name]; end - + def add_label(key, value) if @data["labels"].is_a? Array @data["labels"] << "#{key}=#{value}" @@ -240,12 +250,12 @@ class Container cmd = ["docker", "create"] cmd << "--net" << @data["networks"][0] if @data["networks"] && @data["networks"].count>0 && !$net_host cmd << "--net" << "host" if $net_host - + @data["labels"] ||= [] if !@data["test"] add_label("de.fabianonline.dup", "true") - end + end if @data["auto_update"] add_label("com.centurylinklabs.watchtower.enable", "true") @@ -431,6 +441,7 @@ opts = GetoptLong.new( [ '--update', '-u', GetoptLong::NO_ARGUMENT ], [ '--_completion', GetoptLong::OPTIONAL_ARGUMENT ], [ '--host', GetoptLong::NO_ARGUMENT ], + [ '--regenerate', GetoptLong::NO_ARGUMENT ], [ '--verbose', '-v', GetoptLong::NO_ARGUMENT ], [ '--all', GetoptLong::NO_ARGUMENT ], )