Exemplo n.º 1
0
        public static void InstallModules(DscRepository repository, DscServerNode serverNode)
        {
            if (serverNode == null)
            {
                return;
            }
            List <PsConfiguration> configurations = serverNode.GetConfigurations();

            foreach (PsConfiguration configuration in configurations)
            {
                InstallModules(repository, configuration.Servers, configuration.GetUsedModules(repository));
            }
        }
Exemplo n.º 2
0
        // Load DscRepository from specific path and fill UI
        private void LoadRepository(string path)
        {
            _repository       = new DscRepository(path);
            _repositoryWorker = new RepositoryWorker(_repository);

            treeLibrary.Nodes["tviResources"].Nodes.Clear();
            treeLibrary.Nodes["tviRoles"].Nodes.Clear();
            treeLibrary.Nodes["tviServers"].Nodes.Clear();

            FillResourceTree();
            FillRoleTree(_repository.Roles, treeLibrary.Nodes["tviRoles"]);
            FillServerTree(_repository.Servers, treeLibrary.Nodes["tviServers"]);

            UnblockModules();
            ModuleWorker.InstallLocalModules(_repository);
        }
Exemplo n.º 3
0
 public static void InstallModules(DscRepository repository, HashSet <string> servers, HashSet <string> modules)
 {
     foreach (string module in modules)
     {
         if (module == "PSDesiredStateConfiguration")
         {
             continue;
         }
         foreach (string server in servers)
         {
             string source      = repository.Dir.Modules + module;
             string destination = "\\\\" + server + "\\C$\\Program Files\\WindowsPowerShell\\Modules\\" + module;
             if (!Directory.Exists(destination))
             {
                 FileSystem.DirectoryCopy(source, destination);
             }
         }
     }
 }
Exemplo n.º 4
0
        public static void InstallLocalModules(DscRepository repository)
        {
            string documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

            FileSystem.DirectoryCreateIfNotExists(documents + "\\WindowsPowerShell");
            FileSystem.DirectoryCreateIfNotExists(documents + "\\WindowsPowerShell\\Modules");
            foreach (DscModule module in repository.Modules)
            {
                if (module.Name == "PSDesiredStateConfiguration")
                {
                    continue;
                }
                string destination = documents + "\\WindowsPowerShell\\Modules\\" + module.Name;
                if (!Directory.Exists(destination))
                {
                    FileSystem.DirectoryCopy(module.DirectoryPath, destination);
                }
            }
        }
Exemplo n.º 5
0
        public HashSet <string> GetUsedModules(DscRepository repository)
        {
            HashSet <string> modules         = new HashSet <string>();
            HashSet <string> resourceStrings = new HashSet <string>();

            foreach (string roleString in Roles)
            {
                DscRoleNode roleNode = repository.Roles.GetRoleNode(roleString);
                resourceStrings.UnionWith(roleNode.Role.Resources);
            }
            foreach (string resourceString in resourceStrings)
            {
                DscConfigurationItemNode configurationItemNode = repository.GetConfigurationItemNode(resourceString);
                if (configurationItemNode.Parent.Parent.Name != "PSDesiredStateConfiguration")
                {
                    modules.Add(configurationItemNode.Parent.Parent.Name);
                }
            }
            return(modules);
        }
Exemplo n.º 6
0
        private static List <string> GetConfigText(PsConfiguration configuration, DscRepository repository)
        {
            List <string> configText = new List <string> {
                "Configuration Config_" + configuration.GetId(), "{", "Param", "("
            };

            for (int i = 0; i < configuration.Variables.Keys.Count; i++)
            {
                if (i == configuration.Variables.Keys.Count - 1)
                {
                    configText.Add("$" + configuration.Variables.Keys.ElementAt(i));
                }
                else
                {
                    configText.Add("$" + configuration.Variables.Keys.ElementAt(i) + ",");
                }
            }
            configText.Add(")");
            configText.AddRange(configuration.GetUsedModules(repository).Select(module => "Import-DscResource -Module " + module));
            configText.AddRange(new List <string> {
                "Node $AllNodes.Nodename", "{"
            });
            HashSet <string> resourceStrings = new HashSet <string>();

            foreach (string roleString in configuration.Roles)
            {
                DscRoleNode roleNode = repository.Roles.GetRoleNode(roleString);
                resourceStrings.UnionWith(roleNode.Role.Resources);
            }
            foreach (string resourceString in resourceStrings)
            {
                DscConfigurationItemNode configurationItemNode = repository.GetConfigurationItemNode(resourceString);
                configText.AddRange(GetConfigurationItemText(configurationItemNode, repository));
            }
            configText.AddRange(new List <string> {
                "}", "}"
            });
            return(configText);
        }
Exemplo n.º 7
0
        private static List <string> GetConfigurationItemText(DscConfigurationItemNode node, DscRepository repository)
        {
            List <string> itemText = new List <string> {
                node.Parent.FriendlyName + " \"" + node.Name + "\"", "{"
            };

            foreach (DictionaryEntry entry in node.ConfigurationItem.Properties)
            {
                if (((entry.Value == null) || (entry.Value.ToString() == "")) && !node.Parent.GetRequiredOf(entry.Key.ToString()))
                {
                    continue;
                }
                switch (node.Parent.GetVariableTypeOf(entry.Key.ToString()))
                {
                case DscResource.VariableType.String:
                    if ((entry.Value != null) && (entry.Value.ToString().StartsWith("$") || entry.Value.ToString().StartsWith("\"")))
                    {
                        itemText.Add(entry.Key + " = " + entry.Value);
                    }
                    else
                    {
                        itemText.Add(entry.Key + " = \"" + entry.Value + "\"");
                    }
                    break;

                case DscResource.VariableType.Boolean:
                    itemText.Add(entry.Key + " = $" + entry.Value);
                    break;

                case DscResource.VariableType.Uint16:
                case DscResource.VariableType.Sint16:
                case DscResource.VariableType.Uint32:
                case DscResource.VariableType.Sint32:
                case DscResource.VariableType.Uint64:
                case DscResource.VariableType.Sint64:
                    itemText.Add(entry.Key + " = " + entry.Value);
                    break;

                default:
                    itemText.Add(entry.Key + " = \"" + entry.Value + "\"");
                    break;
                }
            }
            if (node.ConfigurationItem.DependsOn.Count > 0)
            {
                List <string> dependsOn = new List <string>();
                foreach (string dependency in node.ConfigurationItem.DependsOn)
                {
                    DscConfigurationItemNode dependencyNode = repository.GetConfigurationItemNode(dependency);
                    dependsOn.Add("'[" + dependencyNode.Parent.FriendlyName + "]" + dependencyNode.Name + "'");
                }
                itemText.Add("DependsOn = " + string.Join(",", dependsOn));
            }
            itemText.Add("}");

            return(itemText);
        }
Exemplo n.º 8
0
        public static List <string> BuildScript(List <PsConfiguration> configurations, DscRepository repository)
        {
            List <string> script = new List <string>();

            foreach (PsConfiguration configuration in configurations)
            {
                script.AddRange(GetConfigData(configuration));
                script.AddRange(configuration.Variables.Select(variable => "$" + variable.Key + "_" + configuration.GetId() + " = " + variable.Value));
            }
            foreach (PsConfiguration configuration in configurations)
            {
                script.AddRange(GetConfigText(configuration, repository));
            }
            foreach (PsConfiguration configuration in configurations)
            {
                string varParameters = configuration.Variables.Aggregate("",
                                                                         (current, variable) =>
                                                                         current +
                                                                         (" -" + variable.Key + " $" + variable.Key + "_" + configuration.GetId()));

                script.Add("Config_" + configuration.GetId() + " -ConfigurationData $ConfigData_" + configuration.GetId() + varParameters);
                script.Add("Start-DscConfiguration -Path Config_" + configuration.GetId() + " -force -wait -verbose");
            }
            script.Add("Write-Host 'Press any key to continue ...'");
            script.Add("$x = $host.UI.RawUI.ReadKey(\"NoEcho, IncludeKeyDown\")");
            return(Tabulate(script));
        }
Exemplo n.º 9
0
 public RepositoryWorker(DscRepository repository)
 {
     _repository = repository;
 }