marathon_deploy 0.0.2 → 0.0.3
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/examples/simple-python-example.yaml +32 -0
- data/lib/marathon_deploy/application.rb +1 -1
- data/lib/marathon_deploy/deployment.rb +30 -14
- data/lib/marathon_deploy/macro.rb +1 -1
- data/lib/marathon_deploy/marathon_defaults.rb +1 -1
- data/lib/marathon_deploy/version.rb +1 -1
- metadata +4 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 35b3f25c8764a73dd299377a082c1bf279574ba3
         | 
| 4 | 
            +
              data.tar.gz: f8db464c0a0165b0f16de1bda5c170b07c069e60
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 77cdd112a5424d33c3188391194ae099090ed7bd15b6a3e97ccdf20d0b42517491b5342a51ddba7288b481413e319b84a281c45277b244f822ce1c182990c7a9
         | 
| 7 | 
            +
              data.tar.gz: cbee096acc67009a5b7183fc2eeb7a04890c94f54f09e1f715f43b47e27496f621132d0f8b1d37b60a33d38e0ad3280c2bbd3627ffccd2b232e921ce4984d4fe
         | 
| @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            id: python-example-stable
         | 
| 3 | 
            +
            cmd: echo python stable `hostname` > index.html; python3 -m http.server 8080
         | 
| 4 | 
            +
            mem: 16
         | 
| 5 | 
            +
            cpus: 0.1
         | 
| 6 | 
            +
            instances: 5
         | 
| 7 | 
            +
            container:
         | 
| 8 | 
            +
              type: DOCKER
         | 
| 9 | 
            +
              docker:
         | 
| 10 | 
            +
                image: ubuntu:14.04
         | 
| 11 | 
            +
                network: BRIDGE
         | 
| 12 | 
            +
                portMappings:
         | 
| 13 | 
            +
                - containerPort: 8080
         | 
| 14 | 
            +
                  hostPort: 0
         | 
| 15 | 
            +
                  protocol: tcp
         | 
| 16 | 
            +
            env:
         | 
| 17 | 
            +
              SERVICE_TAGS: python,webapp,http,weight=100
         | 
| 18 | 
            +
              SERVICE_NAME: python
         | 
| 19 | 
            +
            healthChecks:
         | 
| 20 | 
            +
            - portIndex: 0
         | 
| 21 | 
            +
              protocol: TCP
         | 
| 22 | 
            +
              gracePeriodSeconds: 30
         | 
| 23 | 
            +
              intervalSeconds: 10
         | 
| 24 | 
            +
              timeoutSeconds: 30
         | 
| 25 | 
            +
              maxConsecutiveFailures: 3
         | 
| 26 | 
            +
            - path: "/"
         | 
| 27 | 
            +
              portIndex: 0
         | 
| 28 | 
            +
              protocol: HTTP
         | 
| 29 | 
            +
              gracePeriodSeconds: 30
         | 
| 30 | 
            +
              intervalSeconds: 10
         | 
| 31 | 
            +
              timeoutSeconds: 30
         | 
| 32 | 
            +
              maxConsecutiveFailures: 3
         | 
| @@ -22,7 +22,7 @@ module MarathonDeploy | |
| 22 22 | 
             
                case extension
         | 
| 23 23 | 
             
                  when '.json'
         | 
| 24 24 | 
             
                    @json = YamlJson.read_json(deployfile)
         | 
| 25 | 
            -
                  when '.yaml'
         | 
| 25 | 
            +
                  when '.yaml','.yml'
         | 
| 26 26 | 
             
                    @json = YamlJson.yaml2json(deployfile)
         | 
| 27 27 | 
             
                  else
         | 
| 28 28 | 
             
                    message = "File extension #{extension} is not supported for deployment file #{deployfile}"
         | 
| @@ -89,13 +89,13 @@ module MarathonDeploy | |
| 89 89 | 
             
                Timeout::timeout(HEALTHY_WAIT_TIMEOUT) do
         | 
| 90 90 | 
             
                  loop do
         | 
| 91 91 | 
             
                    break if (!health_checks_defined?)
         | 
| 92 | 
            -
                    sick = get_alive( | 
| 92 | 
            +
                    sick = get_alive(false)
         | 
| 93 93 | 
             
                    elapsedTime = '%.2f' % (Time.now - startTime)
         | 
| 94 94 | 
             
                    if (!sick.empty?)
         | 
| 95 95 | 
             
                      $LOG.info("#{sick.size}/#{@application.instances} instances are not healthy, retrying in #{HEALTHY_WAIT_RECHECK_INTERVAL}s (elapsed time #{elapsedTime}s)")
         | 
| 96 96 | 
             
                      $LOG.debug("Sick instances: " + sick.join(','))
         | 
| 97 | 
            -
                    else
         | 
| 98 | 
            -
                      healthy = get_alive( | 
| 97 | 
            +
                    else         
         | 
| 98 | 
            +
                      healthy = get_alive(true)
         | 
| 99 99 | 
             
                      if (healthy.size == @application.instances)
         | 
| 100 100 | 
             
                        elapsedTime = '%.2f' % (Time.now - startTime)
         | 
| 101 101 | 
             
                        $LOG.info("#{healthy.size} of #{@application.instances} expected instances are healthy (Total health-check time #{elapsedTime}s).")
         | 
| @@ -160,28 +160,43 @@ module MarathonDeploy | |
| 160 160 | 
             
              ####### PRIVATE METHODS ##########
         | 
| 161 161 | 
             
              private
         | 
| 162 162 |  | 
| 163 | 
            -
               | 
| 164 | 
            -
             | 
| 165 | 
            -
                
         | 
| 163 | 
            +
              # returns an array of taskIds which are alive
         | 
| 164 | 
            +
              def get_alive(value) 
         | 
| 165 | 
            +
                raise ArgumentError, "value must be boolean true or false" unless (!!value == value)       
         | 
| 166 | 
            +
                state = Array.new    
         | 
| 166 167 | 
             
                if (health_checks_defined?)     
         | 
| 167 168 | 
             
                  response = list_app
         | 
| 168 169 | 
             
                  response_body = Utils.response_body(response)
         | 
| 169 170 | 
             
                    if (response_body[:app].empty?)
         | 
| 170 171 | 
             
                      raise Error::DeploymentError, "Marathon returned an empty app json object", caller
         | 
| 171 172 | 
             
                    else
         | 
| 172 | 
            -
                       | 
| 173 | 
            -
             | 
| 174 | 
            -
             | 
| 175 | 
            -
             | 
| 176 | 
            -
                        if  | 
| 177 | 
            -
             | 
| 178 | 
            -
             | 
| 173 | 
            +
                      tasks = Hash.new
         | 
| 174 | 
            +
                      task_ids = Array.new
         | 
| 175 | 
            +
                      check_results = get_healthcheck_results.flatten
         | 
| 176 | 
            +
                      check_results.each do |task| 
         | 
| 177 | 
            +
                        next if task.nil?  
         | 
| 178 | 
            +
                        tasks[task[:taskId].to_s] ||= [] 
         | 
| 179 | 
            +
                      tasks[task[:taskId].to_s] << task[:alive]
         | 
| 180 | 
            +
                      end
         | 
| 181 | 
            +
                      
         | 
| 182 | 
            +
                      tasks.each do |k,v|            
         | 
| 183 | 
            +
                        if (value)
         | 
| 184 | 
            +
                          # if there are only alive=true for all healthchecks for this instance
         | 
| 185 | 
            +
                          if (v.uniq.length == 1 && v.uniq.first == value)
         | 
| 186 | 
            +
                            task_ids << k
         | 
| 187 | 
            +
                          end 
         | 
| 188 | 
            +
                        else
         | 
| 189 | 
            +
                          # if alive=false is seen for any healthchecks for this instance
         | 
| 190 | 
            +
                          if (v.include?(value))
         | 
| 191 | 
            +
                            task_ids << k
         | 
| 192 | 
            +
                          end 
         | 
| 193 | 
            +
                        end            
         | 
| 179 194 | 
             
                      end         
         | 
| 180 195 | 
             
                    end
         | 
| 181 196 | 
             
                else
         | 
| 182 197 | 
             
                  $LOG.info("No health checks defined. Cannot determine application health of #{@application.id}.")    
         | 
| 183 198 | 
             
                end
         | 
| 184 | 
            -
                return  | 
| 199 | 
            +
                return task_ids
         | 
| 185 200 | 
             
              end
         | 
| 186 201 |  | 
| 187 202 | 
             
              def get_task_ids
         | 
| @@ -193,6 +208,7 @@ module MarathonDeploy | |
| 193 208 | 
             
              def get_healthcheck_results
         | 
| 194 209 | 
             
                response = list_app
         | 
| 195 210 | 
             
                response_body = Utils.response_body(response)
         | 
| 211 | 
            +
                #puts JSON.pretty_generate(response_body)
         | 
| 196 212 | 
             
                return response_body[:app][:tasks].collect { |task| task[:healthCheckResults]}
         | 
| 197 213 | 
             
              end
         | 
| 198 214 |  | 
| @@ -48,7 +48,7 @@ module MarathonDeploy | |
| 48 48 | 
             
              def self.expand_macros(data)
         | 
| 49 49 | 
             
                processed = ""
         | 
| 50 50 | 
             
                macros = get_macros(data).uniq
         | 
| 51 | 
            -
                $LOG.debug("Macros found in deploy file: #{macros.join(',')}")
         | 
| 51 | 
            +
                $LOG.debug("Macros found in deploy file: #{macros.join(',')}") unless (macros.empty?)
         | 
| 52 52 | 
             
                undefined = get_undefined_macros(macros)
         | 
| 53 53 | 
             
                if (!undefined.empty?)
         | 
| 54 54 | 
             
                  raise Error::UndefinedMacroError, "Macros found in deploy file without defined environment variables: #{undefined.join(',')}", caller
         | 
| @@ -7,7 +7,7 @@ module MarathonDeploy | |
| 7 7 |  | 
| 8 8 | 
             
              DEPLOYMENT_RECHECK_INTERVAL = 3
         | 
| 9 9 | 
             
              DEPLOYMENT_TIMEOUT = 300
         | 
| 10 | 
            -
              HEALTHY_WAIT_TIMEOUT =  | 
| 10 | 
            +
              HEALTHY_WAIT_TIMEOUT = 300
         | 
| 11 11 | 
             
              HEALTHY_WAIT_RECHECK_INTERVAL = 3
         | 
| 12 12 | 
             
              PRODUCTION_ENVIRONMENT_NAME = 'PRODUCTION'
         | 
| 13 13 | 
             
              DEFAULT_ENVIRONMENT_NAME = 'INTEGRATION'
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: marathon_deploy
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Jonathan Colby
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015-05- | 
| 11 | 
            +
            date: 2015-05-22 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: logger
         | 
| @@ -91,6 +91,7 @@ files: | |
| 91 91 | 
             
            - examples/nohealthchecks.yaml
         | 
| 92 92 | 
             
            - examples/public-search-germany-webapp.pre.json
         | 
| 93 93 | 
             
            - examples/run.sh
         | 
| 94 | 
            +
            - examples/simple-python-example.yaml
         | 
| 94 95 | 
             
            - examples/testout.json
         | 
| 95 96 | 
             
            - examples/testout.yaml
         | 
| 96 97 | 
             
            - input.txt
         | 
| @@ -127,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 127 128 | 
             
                  version: '0'
         | 
| 128 129 | 
             
            requirements: []
         | 
| 129 130 | 
             
            rubyforge_project: 
         | 
| 130 | 
            -
            rubygems_version: 2.4. | 
| 131 | 
            +
            rubygems_version: 2.4.6
         | 
| 131 132 | 
             
            signing_key: 
         | 
| 132 133 | 
             
            specification_version: 4
         | 
| 133 134 | 
             
            summary: Mesos/Marathon deployment tool.
         |