Class: Shippy::Service
- Inherits:
-
Object
- Object
- Shippy::Service
- Defined in:
- lib/shippy/service.rb
Constant Summary collapse
- ATTRIBUTES =
%i[ annotations attach build blkio_config cpu_count cpu_percent cpu_shares cpu_period cpu_quota cpu_rt_runtime cpu_rt_period cpus cpuset cap_add cap_drop cgroup cgroup_parent command configs container_name credential_spec depends_on deploy develop device_cgroup_rules devices dns dns_opt dns_search domainname driver_opts entrypoint env_file environment expose extends external_links extra_hosts gpus group_add healthcheck hostname image init ipc isolation labels label_file links logging mac_address mem_limit mem_reservation mem_swappiness memswap_limit models network_mode networks oom_kill_disable oom_score_adj pid pids_limit platform ports post_start pre_stop privileged profiles provider pull_policy read_only restart runtime scale secrets security_opt shm_size stdin_open stop_grace_period stop_signal storage_opt sysctls tmpfs tty ulimits use_api_socket user userns_mode uts volumes volumes_from working_dir ].freeze
Instance Attribute Summary collapse
-
#app ⇒ Object
readonly
Returns the value of attribute app.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Instance Method Summary collapse
- #build_traefik_labels(name:, port: nil) ⇒ Object
- #hooks ⇒ Object
-
#initialize(name, app:, &block) ⇒ Service
constructor
A new instance of Service.
- #secrets(name) ⇒ Object
- #to_hash ⇒ Object
- #use_default_logging ⇒ Object
- #use_default_networks ⇒ Object
- #use_default_options ⇒ Object
- #use_default_restart ⇒ Object
- #use_traefik(name:, alt: nil, port: nil, &block) ⇒ Object
Constructor Details
#initialize(name, app:, &block) ⇒ Service
Returns a new instance of Service.
30 31 32 33 34 35 36 |
# File 'lib/shippy/service.rb', line 30 def initialize(name, app:, &block) @name = name @app = app @data = {} instance_eval(&block) end |
Instance Attribute Details
#app ⇒ Object (readonly)
Returns the value of attribute app.
18 19 20 |
# File 'lib/shippy/service.rb', line 18 def app @app end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
18 19 20 |
# File 'lib/shippy/service.rb', line 18 def name @name end |
Instance Method Details
#build_traefik_labels(name:, port: nil) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/shippy/service.rb', line 79 def build_traefik_labels(name:, port: nil) rule = "Host(`#{name}.#{wildcard_domain}`)" rule = yield(rule) if block_given? [ "traefik.http.routers.websecure-#{name}.rule=#{rule}", "traefik.http.routers.websecure-#{name}.entrypoints=websecure", "traefik.http.routers.websecure-#{name}.tls=true", "traefik.http.routers.websecure-#{name}.tls.certresolver=ssl-resolver", "traefik.http.routers.websecure-#{name}.tls.domains[0].main=#{wildcard_domain}", "traefik.http.routers.websecure-#{name}.tls.domains[0].sans=*.#{wildcard_domain}", "traefik.http.routers.web-#{name}.rule=Host(`#{name}.#{wildcard_domain}`)", "traefik.http.routers.web-#{name}.entrypoints=web", "traefik.http.routers.web-#{name}.middlewares=secure-redirect-scheme@file" ].tap do |labels| if port labels << "traefik.http.services.#{name}.loadbalancer.server.port=#{port}" labels << "traefik.http.routers.websecure-#{name}.service=#{name}" labels << "traefik.http.routers.web-#{name}.service=#{name}" end end end |
#hooks ⇒ Object
112 113 114 115 116 117 118 |
# File 'lib/shippy/service.rb', line 112 def hooks if block_given? @hooks = normalize_hooks(yield) else @hooks.to_a.map { |data| [name, data[:options], data[:cmd]] } end end |
#secrets(name) ⇒ Object
103 104 105 |
# File 'lib/shippy/service.rb', line 103 def secrets(name) @app.secrets(name) end |
#to_hash ⇒ Object
38 39 40 |
# File 'lib/shippy/service.rb', line 38 def to_hash {@name => @data} end |
#use_default_logging ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/shippy/service.rb', line 52 def use_default_logging logging do { driver: "json-file", options: { "max-size": "10m", "max-file": "5" } } end end |
#use_default_networks ⇒ Object
64 65 66 |
# File 'lib/shippy/service.rb', line 64 def use_default_networks networks { ["lan_access"] } end |
#use_default_options ⇒ Object
42 43 44 45 46 |
# File 'lib/shippy/service.rb', line 42 def use_default_restart use_default_networks use_default_logging end |
#use_default_restart ⇒ Object
48 49 50 |
# File 'lib/shippy/service.rb', line 48 def use_default_restart restart { "unless-stopped" } end |
#use_traefik(name:, alt: nil, port: nil, &block) ⇒ Object
68 69 70 71 72 73 74 75 76 77 |
# File 'lib/shippy/service.rb', line 68 def use_traefik(name:, alt: nil, port: nil, &block) labels do all_labels = ["traefik.enable=true"] all_labels += ["traefik.docker.network=lan_access"] all_labels += build_traefik_labels(name: name, port: port, &block) all_labels += build_traefik_labels(name: alt, port: port, &block) if alt all_labels end end |