module Inspec::Resources::DockerObject

Copyright 2017, Christoph Hartmann

Public Instance Methods

exist?() click to toggle source
# File lib/inspec/resources/docker_object.rb, line 6
def exist?
  object_info.exists?
end
id() click to toggle source
# File lib/inspec/resources/docker_object.rb, line 10
def id
  object_info.ids[0] if object_info.entries.size == 1
end

Private Instance Methods

parse_components_from_image(image_string) click to toggle source
# File lib/inspec/resources/docker_object.rb, line 16
def parse_components_from_image(image_string)
  # if the user did not supply an image string, they likely supplied individual
  # option parameters, such as repo and tag. Return empty data back to the caller.
  return {} if image_string.nil?

  first_colon = image_string.index(":") || -1
  first_slash = image_string.index("/") || -1

  if image_string.count(":") == 2
    # If there are two colons in the image string, it contains a repo-with-port and a tag.
    # example: localhost:5000/chef/inspec:1.46.3
    partitioned_string = image_string.rpartition(":")
    repo = partitioned_string.first
    tag = partitioned_string.last
    image_name = repo.split("/")[1..-1].join
  elsif image_string.count(":") == 1 && first_colon < first_slash
    # If there's one colon in the image string, and it comes before a forward-slash,
    # it contains a repo-with-port but no tag.
    # example: localhost:5000/ubuntu
    repo = image_string
    tag = nil
    image_name = repo.split("/")[1..-1].join
  else
    # If there's one colon in the image string and it doesn't preceed a slash, or if
    # there is no colon at all, then it separates the repo from the tag, if there is a tag.
    # example: chef/inspec:1.46.3
    # example: chef/inspec
    # example: ubuntu:14.04
    repo, tag = image_string.split(":")
    image_name = repo
  end

  # return the repo, image_name and tag parsed from the string, which can be merged into
  # the rest of the user-supplied options
  { repo: repo, image_name: image_name, tag: tag }
end