PowerShell DSC(一)简单的推模式

最近因为公司业务需要一直在学习开源平台的内容,比如OpenStack和Docker等等,看着看着就对puppet和chef产生了一些兴趣,随之顺其自然的就发现其实在Windows平台也有自己原生的自动化运维解决方案,它就是PowerShell DSC(desired state configuration),按照字面理解就是“期望的配置状态”,我本人对puppet和chef没有太多深入的研究,但是对比了一下两者与PowerShell DSC的实现机制发现的确是大同小异,在此也不讨论谁先谁后问题,更不会想到谁取代谁或谁更好用的问题,不过对于Win平台而言,即便puppet本身就是支持的,但既然有原生的PS DSC那它就一定是首选了。

那么简而言之PowerShell DSC究竟能干嘛,优势何在,其实它与puppet的用意是一样的,就是面对大规模部署环境时,我们需要满足一定的合规性,或者在某些时候需要批量的变更配置,很多情况下组策略或者脚本并不太适用,PS DSC不需要强制域环境,其次它作为PS语言的扩展,至需要在配置文件里声明你期望目标主机是一个什么样的状态,而无需关注如何实现这个状态,比如你想部署IIS,那么只需要声明你要求这台机器有IIS,至于通过什么样的命令去安装IIS你并不需要关心,这一切将有操作系统自行完成。

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

PowerShell DSC有两种模式,推和拉,因为得益于是源自系统内置的PowerShell来实现,因此不必需要安装agent程序,推模式使用简单,但拉模式更适合有计划性的大规模批量配置变更,也方便修改,下图是两种模式的对比,可以看到拉模式需要一台“pull server”角色,这台服务器实际上会包含一个定义好的Web Serveice(Odata),客户端通过一个URI和相应的GUID来获取配置。

整个DSC的执行基本分为三个阶段:

  1. 创建阶段——通过ISE或者干脆使用记事本之类的工具来编写DSC配置并输出MOF格式文件(management object format)。
  2. 推送或拉取阶段——使用pull or push模式将相应的MOF格式文件传输到目标客户端。
  3. 执行阶段——客户端通过本地的LCM(local configuration manageer),LCM内置于操作系统内,如果使用push模式的话也不需要额外的配置,对于Windows Server 2012R2和8.1来说它是开箱即用的。

下图是我的测试环境,我在Azure准备了一台DC,如下图叫做pull server,IP:10.0.1.10

另外一台模拟客户端,叫做server01如下图:

部署好操作系统之后,默认提供12个开箱即用的资源,可以使用get-dscresource获得相应信息,DSC所管理和维护的每一类配置都称为“资源”,通过系统自带的这些资源就可以实现大部分常见的维护工作,例如添加删除服务器角色、拷贝文件、创建用户和组、维护系统服务等内容,如下图:

下面就以最简单也最常用的windowsfeature为例,可以先看看他的属性都定义了哪些内容,例如这个资源的名称,dependson是可以定义需要添加的feature是基于那个依赖角色的,通过它可以实现不同资源的更改顺序,在或者ensure是定义这个功能是开启还是关闭,即“absent or present”

以下便是一个简单的示例,我指定一个configuration名为winserver的DSC配置文件,声明节点是server01,然后期望这台服务器要有两个windowsfeater分别是windowsbackup和telnetclient,编辑好之后直接执行脚本,如下图:

上面的脚本执行后并没有返回任何消息,这是我新建一个叫做script的文件夹并在这个文件夹下面执行我上文中定义好的configuration名(DSC配置文件名,在首行),即“winserver”,执行后如果没有报错的话会在当前目录生成一个与node名一致的MOF文件,如下图:

最终就是要把这个mof文件搞到目标节点上去执行我期望的配置,可以查看该文件的内容如下图:

接下来我就使用简单的推模式来把这个mof搞到server01上去,推模式只需要执行"start-dscconfiguration"并指明mof文件路径,成功之后会在系统后台生成一个job,当然也可以指定job名称,如下图:

过一段时间后发现该job已经完成了,如下图:

登陆到server01上看看,噢~windowsbackup和telnetclient果然已经安装好了,如下图:

上面是一个非常简单的示例,可以看到在对大规模环境进行配置变更时,DSC是有绝对优势的,首先脚本更轻量,并且关键的是可通过test-dscconfiguration来检查变更是否符合要求,有很多其他方案虽然也能达到执行的效果,但是否成功或者说是否100%的按照管理员意愿完成了却不得而知。

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

此外在DSC配置文件中还可以定制属性,例如下图中我对nodename使用了变量,在执行时就可以通过我定义的"-vmname"来指定哪一个节点

在进行推送配置时,可以使用-wait和verbose来实时查看后台日志,如下图:

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

以上就是对PowerShell推模式的简单介绍,如果对系统内置的12个资源不满意或感觉不够使的话,可以从官方获取更丰富的资源包,如下图:

目前最新的是wave 10,里面已经包含了非常丰富的资源,我觉得足够用了。

压缩包里有很多x开头的资源module,之所以是x开头是表示这些属于非官方的,当然如果使用上有问题可以在technet论坛上发言,还是有很多回复的。

要想在本地使用这些资源需要注意解压缩路径,一定要在如下图所示的地方。

成功后可以查看有179个资源,够丰富了吧。

随便找一个看看到底DSC有多强,竟然连SCVMM部署也可以,它的属性里面其实感觉和无人值守部署差不多,使用-syntax能够非常方便的查看语法,如下图:

根据资源里面定义的语法大致如下,感兴趣的筒子可以在自己的环境里不断尝试,很有意思。

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

PowerShell DSC也是跨平台的,它同样能够管理Linux,但是对于已经用惯了puppet或chef的人来讲,没必要转到DSC来,继续保持现状就ok,相反刚接触的人来说,特别是winos的ITpro,我相信PowerShell DSC绝对是首要考虑对象。

时间: 2024-11-08 20:42:56

PowerShell DSC(一)简单的推模式的相关文章

Powershell DSC和 WMF 5.0 Preview - Push 模式

豆子最近开始学习Powershell DSC. MVA上有很多相关的课程,最新的入门课程是基于 WMF 5.0 Preview 来实现的. https://www.microsoftvirtualacademy.com/en-US/training-courses/getting-started-with-powershell-desired-state-configuration-dsc--8672?l=YZHpImG1_7204984382 5.0以后,微软在DSC这一块又做了很多改进.比如

PowerShell DSC(二)拆分配置信息

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

简单工厂+策略模式-下

前言: 虽然做了个Demo但是实际应用的时候发现一开始对简单工厂与策略的理解有误差.开始想输入时间和基础数据就根据不同的算法算出来.后来发现不是.其实时间也是计算的数据.真正选择算法的是像固定用户和临时用户.或者说打折促销.根据这个. 深夜食堂 一个在深夜12点到凌晨7点开张的小食店.被大家称谓深夜食堂.菜单上只有一样菜.但是.无论你要点什么.只要老板会做.即使菜单上没有的菜也可以点.所以.客人还真不少呢. 日式滑动的木门被打开.进来的是一个浑身又绿色.有着硬壳的家伙.没错.他是富兰克林.老板,

简单的工厂模式

从今天开始 每天进步一点点.开始了解并学习设计模式,就从简单的工厂模式开始吧.... 简单工厂模式(Simple Factory):不利于产生系列产品 简单工厂模式又称静态工厂方法模式.重命名上就可以看出这个模式一定很简单.它存在的目的很简单:定义一个用于创建对象的接口. 在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化, 如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样. 先来看看它的组成: 1) 工厂类角色:这是本

hdu4165(简单递推,实则卡特兰数的应用)

这道题之前自己做的时候并没有反应过来是求卡特兰数,当时是按递推来想的.后来查了下HDU4165,结果一看大标题就说是卡特兰数,自己想了想,还真是那么回事.主要还是对于卡特兰数用的不多,也就当时没立马反应过来了.下面介绍这道题我的思路,然后对卡特兰数再做一些补充. 本题题意:罐子里有N片相同的药片,开始的时候药片都是完整的一整片.然后一个每天从中任意取一片,如果该药片是完整的一整片,那么他会吃点半片,然后将剩余半片扔回罐里,如果恰好是半片,那他直接吃掉拿出来的半片.显然2N天后,他吃完全部N片药片

大话设计模式之简单的工厂模式

第一章:代码无错就是优-简单的工厂模式 先建立一个计算类Operation Operation.h文件 @interface Operation : NSObject @property(nonatomic,assign)double numberA; @property(nonatomic,assign)double numberB; @end Operation.m文件 @implementation Operation @end 然后分别创建他们的子类Add,Sub,Mul,Div Add

神马是代码简单的cmd模式,这就是!

小狼正在研究 “怎么查找连在一起的同色方块?”算法问题 ,突然感觉我是不是需要一种开发模式,不然感觉自己的代码好乱的. 可能是研究算法吧,导致小狼的思路特别清晰,加上也用了差不多1年的nodejs.seajs,对cmd的api非常清楚,不多说,看代码 用法和seajs的用法一样,符合cmd的模式, var require,define; (function(){ var module={} require=function(name){ return module[name] } define=

水晶报表 推模式

问题由来: 公司换新系统,过渡期要和老系统共存,原报表使用odbc数据源,因只有一台服务器,所有新系统报表不能再使用odbc数据源了,(两个系统的报表不能使用同一服务器odbc数据源) 解决方案:方案一,修改新系统水晶报表的数据源,改为oledb方式. 方案二,修改水晶报表数据源为推模式,在程序中动态设置数据源. 部分报表使用了方案一,适用于数据量大,页数多的报表.(财务报表) 因为方案一需要修改每个报表的数据源,设置过于麻烦,而公司的报表文件过多,每个系统近百个报表.有5.6个系统,而且方案一

nodejs实现简单消息推送

server1.js var http = require('http'); var express = require('express'); var sio = require('socket.io'); var app = express(); app.use(express.static(__dirname + '/')); var server = http.createServer(app); server.listen(3001, '127.0.0.1'); var io = si