public DockerBinariesResolver(SudoMechanism sudo, string password, params string [] paths) { Binaries = ResolveFromPaths(sudo, password, paths).ToArray(); MainDockerClient = Binaries.FirstOrDefault(x => !x.IsToolbox && x.Type == DockerBinaryType.DockerClient); MainDockerCompose = Binaries.FirstOrDefault(x => !x.IsToolbox && x.Type == DockerBinaryType.Compose); MainDockerMachine = Binaries.FirstOrDefault(x => !x.IsToolbox && x.Type == DockerBinaryType.Machine); MainDockerCli = Binaries.FirstOrDefault(x => !x.IsToolbox && x.Type == DockerBinaryType.Cli); HasToolbox = Binaries.Any(x => x.IsToolbox); if (null == MainDockerClient) { Logger.Log("Failed to find docker client binary - please add it to your path"); throw new FluentDockerException("Failed to find docker client binary - please add it to your path"); } if (null == MainDockerCompose) { Logger.Log("Failed to find docker-compose client binary - please add it to your path"); } if (null == MainDockerMachine) { Logger.Log("Failed to find docker-machine client binary - please add it to your path"); } }
public DockerBinariesResolver(SudoMechanism sudo, string password, params string[] paths) { Binaries = ResolveFromPaths(sudo, password, paths).ToArray(); MainDockerClient = Binaries.FirstOrDefault(x => !x.IsToolbox && x.Type == DockerBinaryType.DockerClient); MainDockerCompose = Binaries.FirstOrDefault(x => !x.IsToolbox && x.Type == DockerBinaryType.Compose); MainDockerMachine = Binaries.FirstOrDefault(x => !x.IsToolbox && x.Type == DockerBinaryType.Machine); MainDockerCli = Binaries.FirstOrDefault(x => !x.IsToolbox && x.Type == DockerBinaryType.Cli); HasToolbox = Binaries.Any(x => x.IsToolbox); if (null == MainDockerClient) { Logger.Log("Failed to find docker client binary - please add it to your path"); throw new FluentDockerException("Failed to find docker client binary - please add it to your path"); } if (null == MainDockerCompose) { Logger.Log("Failed to find docker-compose client binary - please add it to your path"); } if (null == MainDockerMachine) { Logger.Log( "Failed to find docker-machine client binary - " + "please add it to your path. If you're running docker " + "2.2.0 or later you have to install it using " + "https://github.com/docker/machine/releases"); } }
private static IEnumerable <DockerBinary> ResolveFromPaths(SudoMechanism sudo, string password, params string[] paths) { var isWindows = IsWindows(); if (null == paths || 0 == paths.Length) { var complete = new List <string>(); var toolboxpath = Environment.GetEnvironmentVariable("DOCKER_TOOLBOX_INSTALL_PATH"); var envpaths = Environment.GetEnvironmentVariable("PATH")?.Split(isWindows ? ';' : ':'); if (null != envpaths) { complete.AddRange(envpaths); } if (null != toolboxpath) { complete.Add(toolboxpath); } paths = complete.ToArray(); } if (null == paths) { return(new DockerBinary[0]); } var list = new List <DockerBinary>(); foreach (var path in paths) { if (!Directory.Exists(path)) { continue; } if (isWindows) { list.AddRange(from file in Directory.GetFiles(path, "docker*.*") let f = Path.GetFileName(file.ToLower()) where null != f && (f.Equals("docker.exe") || f.Equals("docker-compose.exe") || f.Equals("docker-machine.exe")) select new DockerBinary(path, f, sudo, password)); var dockercli = Path.GetFullPath(Path.Combine(path, "..\\..")); if (File.Exists(Path.Combine(dockercli, "dockercli.exe"))) { list.Add(new DockerBinary(dockercli, "dockercli.exe", sudo, password)); } continue; } list.AddRange(from file in Directory.GetFiles(path, "docker*") let f = Path.GetFileName(file) let f2 = f.ToLower() where f2.Equals("docker") || f2.Equals("docker-compose") || f2.Equals("docker-machine") select new DockerBinary(path, f, sudo, password)); } return(list); }
public static void SetSudo(this SudoMechanism sudo, string password = null) { if (string.IsNullOrWhiteSpace(password) && sudo == SudoMechanism.Password) { throw new ArgumentException("When using SudoMechanism.Password a password must be provided!", nameof(password)); } _sudoMechanism = sudo; _sudoPassword = password; _binaryResolver = new DockerBinariesResolver(_sudoMechanism, _sudoPassword); }
internal DockerBinary(string path, string binary, SudoMechanism sudo, string password) { Path = path; Binary = binary.ToLower(); Type = Translate(binary); Sudo = sudo; SudoPassword = password; var isToolbox = Environment.GetEnvironmentVariable("DOCKER_TOOLBOX_INSTALL_PATH")?.Equals(Path); IsToolbox = isToolbox ?? false; }