PowerShell DSC(二)拆分配置信息

PowerShell DSC的配置文件支持“分离”的格式,这是什么意思呢?好比说企业有一套合规性要求,这套要求无论是对开发测试环境还是生产环境都是一致的,但是显然开发测试与生产环境的规模大小以及硬件配置等等是不一样的,这也就导致了在DSC中定义的内容可以分为“What”和“Where”,即管理员要做什么和在哪做。

##################################################################################

如下图所示我们可以简单理解为DSC的配置定义里包含了environment与structural两大部分“章节”,环境配置里面描述了DSC所应该应用的范围(例如具体哪些节点),结构配置里包含了具体要做什么(例如部署web-server角色等等)。

DSC当中内置了三个特殊的变量:

1 其中第一个就是$allnodes用来引用Allnodes所收集的节点数据,并且可以使用.Where() 和.ForEach()进行过滤,

2 一旦经过$allnodes过滤之后就可以引用$node进行更加详细的说明,例如:

configuration MyConfiguration
{
    Import-DscResource -ModuleName xWebAdministration -Name MSFT_xWebsite
    node $AllNodes.Where{$_.Role -eq "WebServer"}.NodeName
    {
        xWebsite Site
        {
            Name         = $Node.SiteName
            PhysicalPath = $Node.SiteContents
            Ensure       = "Present"
        }
    }
}

3 最后一个就是$configurationdata,通过它就能在最后生成MOF文件的时候将“环境配置”传递进指令,例如我在下文中提到的$mydata中所收集的数据。

在我的测试环境中我将DSC配置脚本的内容拆分按上文拆分为两部分,$mydata主要用来定义我的“环境配置”(即
where),configuration中依然定义的是“结构配置”(也就是what)。$mydata中实际关联的是一个哈希表,哈希表中是一个数
组,哈希表中至少要有一个关键字段就是“Allnodes”,我通过$mydata收集了两台服务器分别是server01和server02,在configuration中对不同的节点角色进行不同的部署要求,例如server01是我的appserver,我想让它安装asp4.5,而server02是我的web服务器,我想让它安装web-server及控制台。

这里就可以看出分别定义“环境配置”与“结构配置”的好处,可能我的开发测试环境就这两台服务器,但是生产环境可能10几台,到时候我只需要从新修改$mydata,而对于“结构配置”不需要改动,因为我对appserver和webserver的角色要求是不需要改变的。

按照上文中的配置,运行PS1脚本,然后再我的c:\script目录下执行myconfig并指定-configurationdata参数,将$mydata所收集到的node信息传递进来,成功后生成了两个mof文件,如下图:

接下来就可以验证了,在第一次执行推送过程的时候除了点小意外,因为我是azure的域环境,没有指定虚拟网络的dns,所以上次重启之后dns变了,于是出现了下图中的链接问题。

这里提示各位如果在azure中部署域控制器,除了要为DC配置azurevm静态IP以外,还需要在虚拟网络里把dns指向dc的IP,如下图:

再次执行start-dscconfiguration推送动作成功,如下图:

分别跑到两台服务器上去验证一下,在server01上看到asp.net 4.5已经部署,如下图:

server02上的web-server也已经可以使用了,如下图:

当然也可以使用test-dscconfigruation来验证,如下图显示为true即表示“满足了期望的配置”。

通过DSC提供的几个特殊变量来灵活的设计脚本,可以很方便的将配置修改应用于不同环境中,例如对一个开发项目从研发到测试再到最终部署到生产环境,使用powersehll dsc就能实现一部分devops的概念,能有效降低那种“开发环境里面运行好好的,一上线就这样我也不知道为什么,奇怪了”之类的情况。。。

时间: 2024-08-25 22:04:08

PowerShell DSC(二)拆分配置信息的相关文章

springboot 入门二- 读取配置信息一

在上篇入门中简单介绍下springboot启动使用了大量的默认配置,在实际开发过程中,经常需要启动多个服务,那端口如何手动修改呢? 此篇就是简单介绍相关的配置文件信息. Spring Boot允许外部化你的配置,这样你就可以在不同的环境中使用相同的应用程序代码.你可以使用属性文件.YAML文件.环境变量和命令行参数来外部化配置.属性的值获取可以通过注解@Value . spring Environment或注解@ConfigurationProperties 这些方式优先级如下: @TestPr

Flask框架(二)—— 反向解析、配置信息、路由系统、模板、请求响应、闪现、请求扩展、session

目录 反向解析.配置信息.路由系统.模板.请求响应.闪现.session 一.反向解析 1.什么是反向解析 2.使用 二.配置信息 1.默认配置 2.修改方法一--点的方式修改 3.修改方法二--利用字典修改 4.修改方法三--通过py文件修改(常用) 5.修改方法四--利用类或类的路径修改(常用) 6.其他方法修改配置 三.路由系统 1.基本写法 2.转换器 3.路由本质 4.CBV 5.自定义支持正则 四.模板 五.请求与响应 六.session 七.闪现(flash) 1.使用 2.示例

使用PowerShell脚本获取远程主机的IP配置信息

使用PowerShell脚本获取远程主机的IP配置信息 代码如下: [cmdletbinding()]param ([parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)][string[]]$ComputerName = $env:computername) begin {}process {foreach ($Computer in $ComputerName) {if(Test-Connection

SERVERAID 8K和8K-L阵列卡在添加新硬盘时会丢失阵列配置信息

客户有一台IBM X3400需要扩容本地硬盘,去之前以为和IBM x3650M4等服务器类似,就没有多查资料,到现场后发现阵列卡型号是SERVERAID 8K,整个配置界面与x3650M4 的webbios配置阵列卡完全不同,没敢贸然操作,上网查了查资料,一些注意的地方和大家分享一下. 使用ARC配置ServeRAID_8k-l8k8i图文手册,已经上传到这里http://down.51cto.com/data/1357299 适用机型: 所有System x3400; 所有System x35

通过Manifest的配置信息实现页面跳转

1:新建一个xml文件,如second_view.xml文件,然后新建一个Activity如SecondActivity.java并在里面设置setContentView(R.layout.second_view.xml); <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andro

SSAS下玩转PowerShell(二)

 上一篇中简单的介绍了SSAS下的PowerShell,这一篇会演示更多的操作,比如根据当前时间创建备份,使用变量去指定处理哪一个分区,以及用XMLA脚本去创建分区,和在PowerShell中调用PowerShell脚本. 原文地址: http://www.mssqltips.com/sqlservertip/2939/automate-sql-server-analysis-services-tasks-with-powershell--part-2/?utm_source=dailyne

教你如何利用分布式的思想处理集群的参数配置信息——spring的configurer妙用

引言 最近LZ的技术博文数量直线下降,实在是非常抱歉,之前LZ曾信誓旦旦的说一定要把<深入理解计算机系统>写完,现在看来,LZ似乎是在打自己脸了.尽管LZ内心一直没放弃,但从现状来看,需要等LZ的PM做的比较稳定,时间慢慢空闲出来的时候才有机会看了.短时间内,还是要以解决实际问题为主,而不是增加自己其它方面的实力. 因此,本着解决实际问题的目的,LZ就研究出一种解决当下问题的方案,可能文章的标题看起来挺牛B的,其实LZ就是简单的利用了一下分布式的思想,以及spring框架的特性,解决了当下的参

11g RAC集群启动关闭、各种资源检查、配置信息查看汇总。

简要:一:集群的启动与关闭 1. rac集群的手动启动[[email protected] bin]# ./crsctl start cluster -all2. 查看rac集群的状态[[email protected] bin]# ./crsctl stat res -t3. rac集群的关闭[[email protected] bin]# ./crscrl stop cluster -all--------------------------------二:集群的各种资源状态的检查 1. 检

用Java获取一个网站的基本配置信息

前言:我们在进行网站渗透的时候,通常第一步都是获取目标网站的一些配置信息,比如:所用的服务器类型,用了哪种CMS,网站又用了哪些插件等等.当然,我们要是在这一步获取到了比较充分的信息,毫无疑问接下来我们就可以有针对性地进行漏洞搜索和挖掘,对最后的渗透测试是非常有帮助的. 一 简介 今天,我主要是给大家安利一个比较好的对目标网站进行基本信息探测的网站,它就是:https://builtwith.com .使用起来也很简单,直接对目标网站进行搜索就行了,比如说我们搜索:https://builtwi