module Dokken::Helpers
def create_data_image
def create_data_image return if ::Docker::Image.exist?(data_image) tmpdir = Dir.tmpdir FileUtils.mkdir_p "#{tmpdir}/dokken" File.write("#{tmpdir}/dokken/Dockerfile", data_dockerfile) File.write("#{tmpdir}/dokken/authorized_keys", insecure_ssh_public_key) i = ::Docker::Image.build_from_dir( "#{tmpdir}/dokken", 'nocache' => true, 'rm' => true ) i.tag('repo' => repo(data_image), 'tag' => tag(data_image), 'force' => true) end
def create_sandbox
def create_sandbox info("Creating kitchen sandbox in #{sandbox_path}") unless ::Dir.exist?(sandbox_path) FileUtils.mkdir_p(sandbox_path) File.chmod(0o755, sandbox_path) end end
def data_dockerfile
def data_dockerfile <<-EOF centos:7 TAINER Sean OMeara \"sean@sean.io\" LANG en_US.UTF-8 yum -y install tar rsync openssh-server passwd git ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' mkdir -p /root/.ssh/ authorized_keys /root/.ssh/authorized_keys SE 22 [ "/usr/sbin/sshd", "-D", "-p", "22", "-o", "UseDNS=no", "-o", "UsePrivilegeSeparation=no", "-o", "MaxAuthTries=60" ] ME /opt/kitchen ME /opt/verifier end
def default_docker_host
def default_docker_host if ENV['DOCKER_HOST'] ENV['DOCKER_HOST'] elsif File.exist?('/var/run/docker.sock') 'unix:///var/run/docker.sock' # TODO: Docker for Windows also operates over a named pipe at # //./pipe/docker_engine that can be used if named pipe support is # added to the docker-api gem. else 'tcp://127.0.0.1:2375' end end
def docker_info
def docker_info @docker_info ||= ::Docker.info end
def dokken_create_sandbox
def dokken_create_sandbox info("Creating kitchen sandbox at #{dokken_kitchen_sandbox}") FileUtils.mkdir_p(dokken_kitchen_sandbox) File.chmod(0o755, dokken_kitchen_sandbox) info("Creating verifier sandbox at #{dokken_verifier_sandbox}") FileUtils.mkdir_p(dokken_verifier_sandbox) File.chmod(0o755, dokken_verifier_sandbox) end
def dokken_delete_sandbox
def dokken_delete_sandbox info("Deleting kitchen sandbox at #{dokken_kitchen_sandbox}") begin FileUtils.rm_rf(dokken_kitchen_sandbox) rescue Errno::ENOENT debug("Cannot delete #{dokken_kitchen_sandbox}. Does not exist") end info("Deleting verifier sandbox at #{dokken_verifier_sandbox}") begin FileUtils.rm_rf(dokken_verifier_sandbox) rescue Errno::ENOENT debug("Cannot delete #{dokken_verifier_sandbox}. Does not exist") end end
def dokken_kitchen_sandbox
def dokken_kitchen_sandbox "#{home_dir}/.dokken/kitchen_sandbox/#{instance_name}" end
def dokken_verifier_sandbox
def dokken_verifier_sandbox "#{home_dir}/.dokken/verifier_sandbox/#{instance_name}" end
def home_dir
def home_dir # while dokken_binds avoid invalid bind mount spec "C:/Users/..." error by # remote docker host virtual box shared folder on boot2docker created by docker-machine in Windows # refs: # https://github.com/docker/machine/issues/1814 # https://github.com/docker/toolbox/issues/607 return Dir.home.sub 'C:/Users', '/c/Users' if Dir.home =~ /^C:/ && remote_docker_host? Dir.home end
def insecure_ssh_private_key
def insecure_ssh_private_key <<-EOF -BEGIN RSA PRIVATE KEY----- pAIBAAKCAQEAqCcMlu6jYcPjU7jowuPkVaREpfiQV3m18weyasUYCgG8pqug xAIjceTcx5FnEJjskDYRaShUgLn3oHF0UuHLUtS3BJRKF3vW6wwKihAUpJp1 zDSBtBJ8OPuVv62cRxQgJbFEgB2LWGRLPtwoGyFrh4WfeQvFAupxi1hzWTo3 Ra5xXztKoNHp3tsPCyocao+V9DEUnQiJ9SMMsSG5eTTQ+WJNR8fCSrCbU4jU IjIJjOW7022EFEn/KWxq0SN9FUCgYEPP1JInWW2k3781l2KcHA1BEUm8xGAr U3pmSL+roaT8apH45eihDjppf4hqqrjxKwIDAQABAoIBAEj7Cb/IOykHd/ay rVZuQU03oI4WyR19zbYBbPmK33IHM1JdUmqP8wpPpnMHbJALj0DX9p6JXoOw uGTwkuqUYAqgwbeHjDPfugNKD2uRjmwztXw3ncOl8jxZFRloJFfFKF6znWNt 7naN3upHiv/6wsgqj4tAbZ9oRC1crO6bsNr3P6YooiG5RRNpHepiyXphyhN6 5ZOQ/pUSE0Ca4wTlUhJHTUPMz7VFs/8CH0loRIsGPBROarPkoLVF+/UNyX8e hoUtQH2XvjEzWUl5jKJOnvKRIV+0j/upWXsPQKF5glVPmPrTVUAxThfu6rAa veECgYEA0Pz3Hl0SlPR79r2qofh1ZNa8zvQDL+iLopULwDiil5qlUxJ+DgOl Lhjdg/NfoTBHvBjdJu274YJgaGQOfCy5747YDVsakKOm4bI9+Jr2agshPyE6 mGL8K8fNtpGq4G14o+pSQOPNrEfcFKgm3sosZWJAWaA64hmtiXcCgYEAzfp6 fUypAV5Zd6PCO2eJMjLdvGaNuH/Umo80WNV7XZ6iJ6MUeQe+YwxFJigjC3ii j3kL7+wu7sEtkzS3zNd34KfhQ5fLADttfFgjjfm7IxlDD4ABaUgjwZM2gfXi hwwNgilF6qABJ1CLt8JSqKubkqvO1P1gQu0CgYEA0GA6AcNpYK344Eey1/bF HKN+fglPGReldM7Dh4gBabgZid2nP+N5XtQaIpPKeQyLqgfckhEecTau68dA cs6pq394GFmkbotrcPMJ2SgpySlXi1fCWrvvlbON8IiDqWxdiop74wmArFOm mzBYXeo+IV869vAFcPcCgYBrvvyh5OuMIc++YYZXaRgvTueblLQc22CDBItI mxqfTF3ycgJBlWVoFoENhq1eUMplctrx+hXeeSPLzM10VX1X79ZLdEYHv513 Dk7684mKwKotr34NfqkFl2ZJ8T+f8pVwmUNvtPtX0j8IO7/6bfIjPTFyNeFJ uQKBgQC/LE05M4eeWXihZ7c7fyWHLyddcPdH48LRF9UH9yjKF84jXRT91uMv 2Qt4MLHABySsk653LDw/jTIGV26c068nZryq5OUPxk67Xgod54jKgOwjgjZS N9ZNnORJqK374yGj1jWUU66mQhPvn49QpG8P2HEoh2RQjNvyHA== -END RSA PRIVATE KEY----- end
def insecure_ssh_public_key
def insecure_ssh_public_key <<-EOF rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoJwyW7qNhw+NTuOjC4+RVpESl+JBXebXzB7JqxRgKAbymq6B39azEAiNx5NzHkWcQmOyQNhFpKFSAufegcXRS4ctS1LcElEoXe9brDAqKEBSkmnXYfZXMNIG0Enw4+5W/rZxHFCAlsUSAHYtYZEs+3CgbIWuHhZ95C8UC6nGLWHNZOjcbsYZFrnFfO0qg0ene2w8LKhxqj5X0MRSdCIn1IwyxIbl5NND5Yk1Hx8JKsJtTiNTdxssiMgmM5bvTbYQUSf8pbGrRI30VQKBgQ8/UkidZbaTfvzWXYpwcDUERSbzEYCvkUytTemZIv6uhpPxqkfjl6KEOOml/iGqquPEr test-kitchen-rsa end
def instance_name
def instance_name prefix = (Digest::SHA2.hexdigest FileUtils.pwd)[0, 10] "#{prefix}-#{instance.name}" end
def remote_docker_host?
def remote_docker_host? return false if config[:docker_info]['OperatingSystem'].include?('Boot2Docker') return true if config[:docker_host_url] =~ /^tcp:/ false end
def sandbox_dirs
def sandbox_dirs Dir.glob(File.join(sandbox_path, '*')) end
def sandbox_path
def sandbox_path "#{Dir.home}/.dokken/verifier_sandbox/#{instance_name}" end