diff --git a/lib/facter/docker.rb b/lib/facter/docker.rb index dee0370..a6479b0 100644 --- a/lib/facter/docker.rb +++ b/lib/facter/docker.rb @@ -1,135 +1,135 @@ # frozen_string_literal: true require 'facter' require 'json' Facter.add(:docker_systemroot) do confine osfamily: :windows setcode do Puppet::Util.get_env('SystemRoot') end end Facter.add(:docker_program_files_path) do confine osfamily: :windows setcode do Puppet::Util.get_env('ProgramFiles') end end Facter.add(:docker_program_data_path) do confine osfamily: :windows setcode do Puppet::Util.get_env('ProgramData') end end Facter.add(:docker_user_temp_path) do confine osfamily: :windows setcode do Puppet::Util.get_env('TEMP') end end docker_command = if Facter.value(:kernel) == 'windows' 'powershell -NoProfile -NonInteractive -NoLogo -ExecutionPolicy Bypass -c docker' else 'docker' end def interfaces Facter.value(:interfaces).split(',') end Facter.add(:docker_client_version) do setcode do docker_version = Facter.value(:docker_version) if docker_version if !docker_version['Client'].nil? docker_version['Client']['Version'] else docker_version['Version'] end end end end Facter.add(:docker_server_version) do setcode do docker_version = Facter.value(:docker_version) if docker_version && !docker_version['Server'].nil? && docker_version['Server'].is_a?(Hash) docker_version['Server']['Version'] else nil end end end Facter.add(:docker_version) do setcode do if Facter::Util::Resolution.which('docker') value = Facter::Util::Resolution.exec( "#{docker_command} version --format '{{json .}}'", ) val = JSON.parse(value) end val end end Facter.add(:docker_worker_join_token) do setcode do if Facter::Util::Resolution.which('docker') val = Facter::Util::Resolution.exec( "#{docker_command} swarm join-token worker -q", ) end val end end Facter.add(:docker_manager_join_token) do setcode do if Facter::Util::Resolution.which('docker') val = Facter::Util::Resolution.exec( "#{docker_command} swarm join-token manager -q", ) end val end end Facter.add(:docker) do setcode do docker_version = Facter.value(:docker_client_version) - if docker_version !~ %r{1[.][0-9][0-2]?[.]\w+} + unless %r{1[.][0-9][0-2]?[.]\w+}.match?(docker_version) if Facter::Util::Resolution.which('docker') docker_json_str = Facter::Util::Resolution.exec( "#{docker_command} info --format '{{json .}}'", ) begin docker = JSON.parse(docker_json_str) docker['network'] = {} docker['network']['managed_interfaces'] = {} network_list = Facter::Util::Resolution.exec("#{docker_command} network ls | tail -n +2") docker_network_names = [] network_list.each_line { |line| docker_network_names.push line.split[1] } docker_network_ids = [] network_list.each_line { |line| docker_network_ids.push line.split[0] } docker_network_names.each do |network| inspect = JSON.parse(Facter::Util::Resolution.exec("#{docker_command} network inspect #{network}")) docker['network'][network] = inspect[0] network_id = docker['network'][network]['Id'][0..11] interfaces.each do |iface| - docker['network']['managed_interfaces'][iface] = network if iface =~ %r{#{network_id}} + docker['network']['managed_interfaces'][iface] = network if %r{#{network_id}}.match?(iface) end end docker rescue JSON::ParserError nil end end end end end diff --git a/lib/puppet/parser/functions/docker_service_flags.rb b/lib/puppet/parser/functions/docker_service_flags.rb index 72f1e6b..7ee5255 100644 --- a/lib/puppet/parser/functions/docker_service_flags.rb +++ b/lib/puppet/parser/functions/docker_service_flags.rb @@ -1,101 +1,99 @@ # frozen_string_literal: true require 'shellwords' # # docker_service_flags.rb # module Puppet::Parser::Functions # Transforms a hash into a string of docker swarm init flags newfunction(:docker_service_flags, type: :rvalue) do |args| opts = args[0] || {} flags = [] if opts['service_name'] && opts['service_name'].to_s != 'undef' flags << "'#{opts['service_name']}'" end if opts['detach'].to_s != 'false' flags << '--detach' end if opts['env'].is_a? Array opts['env'].each do |env| flags << "--env #{env}" end end if opts['label'].is_a? Array opts['label'].each do |label| flags << "--label #{label}" end end if opts['mounts'].is_a? Array opts['mounts'].each do |mount| flags << "--mount #{mount}" end end if opts['networks'].is_a? Array opts['networks'].each do |network| flags << "--network #{network}" end end if opts['publish'].is_a? Array opts['publish'].each do |port| flags << "--publish #{port}" end elsif opts['publish'] && opts['publish'].to_s != 'undef' flags << "--publish '#{opts['publish']}'" end if opts['replicas'] && opts['replicas'].to_s != 'undef' flags << "--replicas '#{opts['replicas']}'" end if opts['tty'].to_s != 'false' flags << '--tty' end if opts['user'] && opts['user'].to_s != 'undef' flags << "--user '#{opts['user']}'" end if opts['workdir'] && opts['workdir'].to_s != 'undef' flags << "--workdir '#{opts['workdir']}'" end if opts['extra_params'].is_a? Array opts['extra_params'].each do |param| flags << param end end if opts['host_socket'] && opts['host_socket'].to_s != 'undef' flags << "-H '#{opts['host_socket']}'" end if opts['registry_mirror'].is_a? Array opts['registry_mirror'].each do |param| flags << "--registry-mirror='#{param}'" end - else - if opts['registry_mirror'] && opts['registry_mirror'].to_s != 'undef' - flags << "--registry-mirror='#{opts['registry_mirror']}'" - end + elsif opts['registry_mirror'] && opts['registry_mirror'].to_s != 'undef' + flags << "--registry-mirror='#{opts['registry_mirror']}'" end if opts['image'] && opts['image'].to_s != 'undef' flags << "'#{opts['image']}'" end if opts['command'].is_a? Array flags << opts['command'].join(' ') elsif opts['command'] && opts['command'].to_s != 'undef' flags << opts['command'].to_s end flags.flatten.join(' ') end end