feat: initial commit
This commit is contained in:
commit
38f495e3f4
457 changed files with 40577 additions and 0 deletions
152
environments/production/thirdparty/docker/lib/facter/docker.rb
vendored
Normal file
152
environments/production/thirdparty/docker/lib/facter/docker.rb
vendored
Normal file
|
@ -0,0 +1,152 @@
|
|||
# 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_version) do
|
||||
confine { Facter::Core::Execution.which('docker') }
|
||||
setcode do
|
||||
value = Facter::Core::Execution.execute(
|
||||
"#{docker_command} version --format '{{json .}}'", timeout: 90
|
||||
)
|
||||
JSON.parse(value)
|
||||
end
|
||||
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['Version']
|
||||
else
|
||||
docker_version['Client']['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_worker_join_token) do
|
||||
confine { Facter::Core::Execution.which('docker') }
|
||||
setcode do
|
||||
# only run `docker swarm` commands if this node is in active in a cluster
|
||||
docker_json_str = Facter::Core::Execution.execute(
|
||||
"#{docker_command} info --format '{{json .}}'", timeout: 90
|
||||
)
|
||||
begin
|
||||
docker = JSON.parse(docker_json_str)
|
||||
if docker.fetch('Swarm', {})['LocalNodeState'] == 'active'
|
||||
val = Facter::Core::Execution.execute(
|
||||
"#{docker_command} swarm join-token worker -q", timeout: 90
|
||||
)
|
||||
end
|
||||
rescue JSON::ParserError
|
||||
nil
|
||||
end
|
||||
val
|
||||
end
|
||||
end
|
||||
|
||||
Facter.add(:docker_manager_join_token) do
|
||||
confine { Facter::Core::Execution.which('docker') }
|
||||
setcode do
|
||||
# only run `docker swarm` commands if this node is in active in a cluster
|
||||
docker_json_str = Facter::Core::Execution.execute(
|
||||
"#{docker_command} info --format '{{json .}}'", timeout: 90
|
||||
)
|
||||
begin
|
||||
docker = JSON.parse(docker_json_str)
|
||||
if docker.fetch('Swarm', {})['LocalNodeState'] == 'active'
|
||||
val = Facter::Core::Execution.execute(
|
||||
"#{docker_command} swarm join-token manager -q", timeout: 90
|
||||
)
|
||||
end
|
||||
rescue JSON::ParserError
|
||||
nil
|
||||
end
|
||||
val
|
||||
end
|
||||
end
|
||||
|
||||
Facter.add(:docker) do
|
||||
confine { Facter::Core::Execution.which('docker') }
|
||||
setcode do
|
||||
docker_version = Facter.value(:docker_client_version)
|
||||
if docker_version&.match?(%r{\A(1\.1[3-9]|[2-9]|\d{2,})\.})
|
||||
docker_json_str = Facter::Core::Execution.execute(
|
||||
"#{docker_command} info --format '{{json .}}'", timeout: 90
|
||||
)
|
||||
begin
|
||||
docker = JSON.parse(docker_json_str)
|
||||
docker['network'] = {}
|
||||
|
||||
docker['network']['managed_interfaces'] = {}
|
||||
network_list = Facter::Core::Execution.execute("#{docker_command} network ls | tail -n +2", timeout: 90)
|
||||
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::Core::Execution.execute("#{docker_command} network inspect #{network}", timeout: 90))
|
||||
docker['network'][network] = inspect[0]
|
||||
network_id = docker['network'][network]['Id'][0..11]
|
||||
interfaces.each do |iface|
|
||||
docker['network']['managed_interfaces'][iface] = network if %r{#{network_id}}.match?(iface)
|
||||
end
|
||||
end
|
||||
docker
|
||||
rescue JSON::ParserError
|
||||
nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue