metasploitable3/chef/cookbooks/docker/libraries/docker_base.rb
2017-07-12 18:15:48 -05:00

91 lines
2.9 KiB
Ruby

module DockerCookbook
class DockerBase < Chef::Resource
require_relative 'helpers_auth'
require_relative 'helpers_base'
include DockerHelpers::Base
#########
# Classes
#########
class UnorderedArray < Array
def ==(other)
# If I (desired env) am a subset of the current env, let == return true
other.is_a?(Array) && all? { |val| other.include?(val) }
end
end
class ShellCommandString < String
def ==(other)
other.is_a?(String) && Shellwords.shellwords(self) == Shellwords.shellwords(other)
end
end
class PartialHash < Hash
def ==(other)
other.is_a?(Hash) && all? { |key, val| other.key?(key) && other[key] == val }
end
end
################
# Type Constants
#
# These will be used when declaring resource property types in the
# docker_service, docker_container, and docker_image resource.
#
################
ArrayType = property_type(
is: [Array, nil],
coerce: proc { |v| v.nil? ? nil : Array(v) }
) unless defined?(ArrayType)
Boolean = property_type(
is: [true, false],
default: false
) unless defined?(Boolean)
NonEmptyArray = property_type(
is: [Array, nil],
coerce: proc { |v| Array(v).empty? ? nil : Array(v) }
) unless defined?(NonEmptyArray)
ShellCommand = property_type(
is: [String],
coerce: proc { |v| coerce_shell_command(v) }
) unless defined?(ShellCommand)
UnorderedArrayType = property_type(
is: [UnorderedArray, nil],
coerce: proc { |v| v.nil? ? nil : UnorderedArray.new(Array(v)) }
) unless defined?(UnorderedArrayType)
PartialHashType = property_type(
is: [PartialHash, nil],
coerce: proc { |v| v.nil? ? nil : PartialHash[v] }
) unless defined?(PartialHashType)
#####################
# Resource properties
#####################
property :api_retries, Integer, default: 3, desired_state: false
property :read_timeout, [Integer, nil], default: 60, desired_state: false
property :write_timeout, [Integer, nil], desired_state: false
property :running_wait_time, [Integer, nil], default: 20, desired_state: false
property :tls, [Boolean, nil], default: lazy { default_tls }, desired_state: false
property :tls_verify, [Boolean, nil], default: lazy { default_tls_verify }, desired_state: false
property :tls_ca_cert, [String, nil], default: lazy { default_tls_cert_path('ca') }, desired_state: false
property :tls_server_cert, [String, nil], desired_state: false
property :tls_server_key, [String, nil], desired_state: false
property :tls_client_cert, [String, nil], default: lazy { default_tls_cert_path('cert') }, desired_state: false
property :tls_client_key, [String, nil], default: lazy { default_tls_cert_path('key') }, desired_state: false
declare_action_class.class_eval do
include DockerHelpers::Authentication
end
end
end