capistrano-nomad 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +14 -2
- data/capistrano-nomad.gemspec +1 -1
- data/lib/capistrano/nomad/helpers/docker.rb +1 -1
- data/lib/capistrano/nomad/helpers/dsl.rb +9 -6
- data/lib/capistrano/nomad/helpers/nomad.rb +51 -13
- data/lib/capistrano/nomad.rb +2 -2
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 0f5358b24228c869a704b8ed79aa76d76b2aeb559ffcd7bd3bced8aa7d3281d1
         | 
| 4 | 
            +
              data.tar.gz: 95f8c93adc89fdbcffe9f40bc5d18433ccfc4b743cfcb194a2b7b2e9468f6bb5
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 834ccd5183128e4c3b4bed1067457b1a2a0036ed21c8ca954f82f25298aca61d6a108460b22c17cbe9f2fa561e02e4189942ddb99d784792ed7422b70e05ba0f
         | 
| 7 | 
            +
              data.tar.gz: 1a4ade283a947f6243fb8c728ca3c3fcac55fac0471cad47b2fbabec66b66a7287fd342c29610bcad5a67d847a0251eb2ee66847ca27de449b963734d5a0d55d
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -31,11 +31,23 @@ require "capistrano/nomad" | |
| 31 31 | 
             
            install_plugin Capistrano::Nomad
         | 
| 32 32 | 
             
            ```
         | 
| 33 33 |  | 
| 34 | 
            -
             | 
| 34 | 
            +
            Within `deploy.rb`
         | 
| 35 35 |  | 
| 36 36 | 
             
            ```ruby
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            # Docker image types
         | 
| 39 | 
            +
            nomad_docker_image_type :app,
         | 
| 40 | 
            +
              path: "backend",
         | 
| 41 | 
            +
              alias: ->(image_type:) { "gcr.io/axsuul/#{image_type}" },
         | 
| 42 | 
            +
              target: "release",
         | 
| 43 | 
            +
              build_args: { foo: "bar" }
         | 
| 44 | 
            +
            nomad_docker_image_type :redis,
         | 
| 45 | 
            +
              path: "/absolute/path/redis",
         | 
| 46 | 
            +
              alias: "gcr.io/axsuul/redis"
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            # Jobs
         | 
| 37 49 | 
             
            nomad_job :app
         | 
| 38 | 
            -
            nomad_job :redis
         | 
| 50 | 
            +
            nomad_job :redis, docker_image_types: [:redis]
         | 
| 39 51 |  | 
| 40 52 | 
             
            nomad_namespace :analytics do
         | 
| 41 53 | 
             
              nomad_job :grafana
         | 
    
        data/capistrano-nomad.gemspec
    CHANGED
    
    
| @@ -101,7 +101,7 @@ def capistrano_nomad_build_docker_image_for_type(image_type) | |
| 101 101 | 
             
                    image_alias_args << "--tag #{tag}"
         | 
| 102 102 | 
             
                  end
         | 
| 103 103 |  | 
| 104 | 
            -
                execute("docker build #{image_alias_args.join(' ')}  | 
| 104 | 
            +
                execute("docker build #{image_alias_args.join(' ')} #{capistrano_nomad_root.join(attributes[:path])}")
         | 
| 105 105 | 
             
              end
         | 
| 106 106 | 
             
            end
         | 
| 107 107 |  | 
| @@ -90,15 +90,18 @@ def nomad_job(name, attributes = {}) | |
| 90 90 |  | 
| 91 91 | 
             
                  desc "Restart #{description_name} job"
         | 
| 92 92 | 
             
                  task :restart do
         | 
| 93 | 
            -
                    on | 
| 93 | 
            +
                    on(roles(:manager)) do
         | 
| 94 94 | 
             
                      # We can't restart the job directly so we'll need to fetch all its running allocs and restart each of one
         | 
| 95 95 | 
             
                      # individually instead
         | 
| 96 | 
            -
                      running_alloc_ids_output =  | 
| 97 | 
            -
                         | 
| 98 | 
            -
                         | 
| 99 | 
            -
                         | 
| 96 | 
            +
                      running_alloc_ids_output = capistrano_nomad_capture_nomad_command(
         | 
| 97 | 
            +
                        :job,
         | 
| 98 | 
            +
                        :allocs,
         | 
| 99 | 
            +
                        {
         | 
| 100 | 
            +
                          namespace: namespace,
         | 
| 101 | 
            +
                          t: "'{{range .}}{{if eq .ClientStatus \"running\"}}{{ println .ID}}{{end}}{{end}}'",
         | 
| 102 | 
            +
                        },
         | 
| 103 | 
            +
                        name,
         | 
| 100 104 | 
             
                      )
         | 
| 101 | 
            -
             | 
| 102 105 | 
             
                      running_alloc_ids = running_alloc_ids_output.strip.split("\n")
         | 
| 103 106 |  | 
| 104 107 | 
             
                      running_alloc_ids.each do |alloc_id|
         | 
| @@ -51,11 +51,11 @@ def capistrano_nomad_build_base_var_file_path(*args) | |
| 51 51 | 
             
              capistrano_nomad_build_file_path(fetch(:nomad_var_files_path), *args)
         | 
| 52 52 | 
             
            end
         | 
| 53 53 |  | 
| 54 | 
            -
            def capistrano_nomad_build_local_path(path | 
| 55 | 
            -
              local_path =  | 
| 54 | 
            +
            def capistrano_nomad_build_local_path(path)
         | 
| 55 | 
            +
              local_path = capistrano_nomad_root.join(path)
         | 
| 56 56 |  | 
| 57 57 | 
             
              # Determine if it has .erb appended or not
         | 
| 58 | 
            -
              found_local_path = [local_path, "#{local_path}.erb"].find { | | 
| 58 | 
            +
              found_local_path = [local_path, "#{local_path}.erb"].find { |each_local_path| File.exist?(each_local_path) }
         | 
| 59 59 |  | 
| 60 60 | 
             
              raise StandardError, "Could not find local path: #{path}" unless found_local_path
         | 
| 61 61 |  | 
| @@ -78,7 +78,7 @@ def capistrano_nomad_build_release_var_file_path(*args) | |
| 78 78 | 
             
              "#{release_path}#{capistrano_nomad_build_base_var_file_path(*args)}"
         | 
| 79 79 | 
             
            end
         | 
| 80 80 |  | 
| 81 | 
            -
            def  | 
| 81 | 
            +
            def capistrano_nomad_run_nomad_command(kind, *args)
         | 
| 82 82 | 
             
              converted_args = args.each_with_object([]) do |arg, collection|
         | 
| 83 83 | 
             
                # If hash then convert it as options
         | 
| 84 84 | 
             
                if arg.is_a?(Hash)
         | 
| @@ -97,22 +97,60 @@ def capistrano_nomad_execute_nomad_command(*args) | |
| 97 97 | 
             
                end
         | 
| 98 98 | 
             
              end
         | 
| 99 99 |  | 
| 100 | 
            +
              # Ignore errors
         | 
| 101 | 
            +
              public_send(kind, :nomad, *converted_args, raise_on_non_zero_exit: false)
         | 
| 102 | 
            +
            end
         | 
| 103 | 
            +
             | 
| 104 | 
            +
            def capistrano_nomad_execute_nomad_command(*args)
         | 
| 100 105 | 
             
              on(roles(:manager)) do |host|
         | 
| 101 106 | 
             
                run_interactively(host) do
         | 
| 102 | 
            -
                   | 
| 103 | 
            -
                  execute(:nomad, *converted_args, raise_on_non_zero_exit: false)
         | 
| 107 | 
            +
                  capistrano_nomad_run_nomad_command(:execute, *args)
         | 
| 104 108 | 
             
                end
         | 
| 105 109 | 
             
              end
         | 
| 106 110 | 
             
            end
         | 
| 107 111 |  | 
| 112 | 
            +
            def capistrano_nomad_capture_nomad_command(*args)
         | 
| 113 | 
            +
              output = nil
         | 
| 114 | 
            +
             | 
| 115 | 
            +
              on(roles(:manager)) do |host|
         | 
| 116 | 
            +
                output = capistrano_nomad_run_nomad_command(:capture, *args)
         | 
| 117 | 
            +
              end
         | 
| 118 | 
            +
             | 
| 119 | 
            +
              output
         | 
| 120 | 
            +
            end
         | 
| 121 | 
            +
             | 
| 108 122 | 
             
            def capistrano_nomad_exec_within_job(name, command, namespace: nil, task: nil)
         | 
| 109 | 
            -
               | 
| 110 | 
            -
                 | 
| 111 | 
            -
             | 
| 112 | 
            -
                 | 
| 113 | 
            -
                 | 
| 114 | 
            -
             | 
| 115 | 
            -
             | 
| 123 | 
            +
              on(roles(:manager)) do
         | 
| 124 | 
            +
                task = name unless task
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                # Find alloc id that contains task
         | 
| 127 | 
            +
                output = capistrano_nomad_capture_nomad_command(
         | 
| 128 | 
            +
                  :job,
         | 
| 129 | 
            +
                  :allocs,
         | 
| 130 | 
            +
                  { namespace: namespace, t: "'{{range .}}{{ .ID }},{{ .TaskGroup }}|{{end}}'" },
         | 
| 131 | 
            +
                  name,
         | 
| 132 | 
            +
                )
         | 
| 133 | 
            +
                alloc_id = output.split("|").map { |s| s.split(",") }.find { |_, t| t == task.to_s }&.first
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                if alloc_id
         | 
| 136 | 
            +
                  capistrano_nomad_execute_nomad_command(
         | 
| 137 | 
            +
                    :alloc,
         | 
| 138 | 
            +
                    :exec,
         | 
| 139 | 
            +
                    { namespace: namespace, task: task },
         | 
| 140 | 
            +
                    alloc_id,
         | 
| 141 | 
            +
                    command,
         | 
| 142 | 
            +
                  )
         | 
| 143 | 
            +
                else
         | 
| 144 | 
            +
                  # If alloc can't be determined then choose at random
         | 
| 145 | 
            +
                  capistrano_nomad_execute_nomad_command(
         | 
| 146 | 
            +
                    :alloc,
         | 
| 147 | 
            +
                    :exec,
         | 
| 148 | 
            +
                    { namespace: namespace, job: true },
         | 
| 149 | 
            +
                    task,
         | 
| 150 | 
            +
                    command,
         | 
| 151 | 
            +
                  )
         | 
| 152 | 
            +
                end
         | 
| 153 | 
            +
              end
         | 
| 116 154 | 
             
            end
         | 
| 117 155 |  | 
| 118 156 | 
             
            def capistrano_nomad_upload_file(local_path:, remote_path:, erb_vars: {})
         | 
    
        data/lib/capistrano/nomad.rb
    CHANGED
    
    | @@ -9,8 +9,8 @@ require_relative "nomad/helpers/nomad" | |
| 9 9 | 
             
            module Capistrano
         | 
| 10 10 | 
             
              class Nomad < Capistrano::Plugin
         | 
| 11 11 | 
             
                def set_defaults
         | 
| 12 | 
            -
                  set_if_empty(:nomad_jobs_path, " | 
| 13 | 
            -
                  set_if_empty(:nomad_var_files_path, " | 
| 12 | 
            +
                  set_if_empty(:nomad_jobs_path, "nomad/jobs")
         | 
| 13 | 
            +
                  set_if_empty(:nomad_var_files_path, "nomad/var_files")
         | 
| 14 14 | 
             
                  set_if_empty(:nomad_docker_image_alias, ->(**) {})
         | 
| 15 15 | 
             
                end
         | 
| 16 16 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: capistrano-nomad
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.6.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - James Hu
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2023-10- | 
| 11 | 
            +
            date: 2023-10-30 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         |