Пример #1
0
        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");
            }
        }
Пример #2
0
        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");
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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;
        }