inspec/lib/resources/docker_service.rb

91 lines
2.1 KiB
Ruby
Raw Normal View History

# encoding: utf-8
#
# Copyright 2017, Christoph Hartmann
require_relative 'docker_object'
module Inspec::Resources
class DockerService < Inspec.resource(1)
include Inspec::Resources::DockerObject
name 'docker_service'
supports platform: 'unix'
desc 'Swarm-mode service'
example "
describe docker_service('service1') do
it { should exist }
its('id') { should_not eq '' }
its('image') { should eq 'alpine:latest' }
its('repo') { should eq 'alpine' }
its('tag') { should eq 'latest' }
end
describe docker_service(id: '4a415e366388') do
it { should exist }
end
describe docker_service(image: 'alpine:latest') do
it { should exist }
end
"
def initialize(opts = {})
# do sanitizion of input values
o = opts.dup
o = { name: opts } if opts.is_a?(String)
@opts = sanitize_options(o)
end
def name
object_info.names[0] if object_info.entries.size == 1
end
def image
object_info.images[0] if object_info.entries.size == 1
end
def image_name
parse_components_from_image(image)[:image_name] if object_info.entries.size == 1
end
def repo
parse_components_from_image(image)[:repo] if object_info.entries.size == 1
end
def tag
parse_components_from_image(image)[:tag] if object_info.entries.size == 1
end
def mode
object_info.modes[0] if object_info.entries.size == 1
end
def replicas
object_info.replicas[0] if object_info.entries.size == 1
end
def ports
object_info.ports[0] if object_info.entries.size == 1
end
def to_s
service = @opts[:name] || @opts[:id]
"Docker Service #{service}"
end
private
def sanitize_options(opts)
opts.merge(parse_components_from_image(opts[:image]))
end
def object_info
return @info if defined?(@info)
opts = @opts
@info = inspec.docker.services.where {
name == opts[:name] || image == opts[:image] || (!id.nil? && !opts[:id].nil? && (id == opts[:id] || id.start_with?(opts[:id])))
}
end
end
end