Sha256: 30a100dc24ca7060870ee34a33e526121875ef8fa77efcceace5bfeea87222fc

Contents?: true

Size: 1.84 KB

Versions: 38

Compression:

Stored size: 1.84 KB

Contents

module Kontena::Cli::Stacks::YAML::Validations::CustomValidators
  class HooksValidator < HashValidator::Validator::Base
    def initialize
      super('stacks_valid_hooks')
    end

    def validate(key, value, validations, errors)
      unless value.is_a?(Hash)
        errors[key] = "must be a mapping, not #{value.class}"
        return
      end

      value.keys.each do |hook|
        unless %w(pre_build post_start).include?(hook)
          errors[key] = "invalid hook #{hook}"
        end
      end

      if value['pre_build']
        validate_pre_build_hooks(key, value['pre_build'], errors)
      end

      if value['post_start']
        validate_post_start_hooks(key, value['post_start'], errors)
      end
    end

    def validate_pre_build_hooks(key, pre_build_hooks, errors)
      unless pre_build_hooks.is_a?(Array)
        errors[key] = { 'pre_build' => "must be an array" }
        return
      end
      pre_build_validation = {
        'name' => 'string',
        'cmd' => 'string'
      }
      validator = HashValidator.validator_for(pre_build_validation)
      pre_build_hooks.each do |pre_build|
        validator.validate('hooks.pre_build', pre_build, pre_build_validation, errors)
      end
    end

    def validate_post_start_hooks(key, post_start_hooks, errors)
      unless post_start_hooks.is_a?(Array)
        errors[key] = { 'post_start' => 'must be an array' }
        return
      end
      post_start_validation = {
        'name' => 'string',
        'instances' => (-> (value) { value.is_a?(Integer) || value == '*' }),
        'cmd' => 'string',
        'oneshot' => HashValidator.optional('boolean')
      }
      validator = HashValidator.validator_for(post_start_validation)
      post_start_hooks.each do |post_start|
        validator.validate('hooks.post_start', post_start, post_start_validation, errors)
      end
    end
  end
end

Version data entries

38 entries across 38 versions & 1 rubygems

Version Path
kontena-cli-1.3.5 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.3.5.rc1 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.4.0.pre7 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.4.0.pre6 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.4.0.pre5 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.4.0.pre4 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.4.0.pre3 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.4.0.pre2 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.4.0.pre1 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.3.4 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.3.4.rc1 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.3.3 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.3.3.rc1 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.3.2 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.3.2.rc2 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.3.2.rc1 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.3.1 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.3.1.rc2 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.3.1.rc1 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb
kontena-cli-1.3.0 lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb