[14] DevOps 自动化运维工具Chef----如何用Chef调用PowerShell DSC的Resource

原创 2017年06月15日 00:29:31

上一个章节讲述了如何用Chef-apply运行本地的一个chef的菜谱,这节笔者主要与大家分享如何把Chef和PowerShell DSC集成起来;我们知道,PowerShell在管理WIndow的机器有着得天独厚的优势,比如,

  • 执行速度快,
  • 能够方便的把Window操作系统中的cmdlet,WMI,.NET,COM,EXE等无缝集成起来
  • PowerShell天生就是用来把Window各种API粘合起来的

所以在一个大型企业系统里,既有Window也有Linux的时候,特别是不少Window的机器的时候,Chef集成PowerShell DSC就是一个不错的折中方案。或者企业想把以前用PowerShell DSC管理的机器,也能被Chef管理的时候,那么这个时候Chef集成PowerShell DSC的功能就显得弥足珍贵了。关于PowerShell DSC的应用和介绍,请大家参考我这个专栏。那么该如何用Chef把PowerShell DSC集成起来呢? 方案有很多,现在咱们就一一过一下吧。


利用dsc_resource来调用DSC的资源(Resource)

现在咱们就说一个最简单的,那就是利用Chef提供的dsc_resource来支持对PowerShell DSC的调用。

@ 首先来看一个简单的例子,用一个PowerShell DSC生成一个文件,DSC的Resource配置如下:

 File chefInvokeDSCToGenerateFile{
    Ensure="Present";
    Contents="I like chef and PowerShell DSC";
    DestinationPath="$SqlScriptsFolder\Get-RunSQLScript.sql"
}

@ 那么如何把上面的DSC Resource转换成一个Chef可以识别的Chef 配方(Receipt)呢?很简单,假设我们在c:\chef文件夹下,新建一个名字为

chefInvokeDSCToGenerateFile.rb的ruby文件,在里面输入下面的内容。

dsc_resource 'chefInvokeDSCToGenerateFile' do
 resource :File
 property :Ensure,"Present"
 property :Contents,"I like chef and PowerShell DSC"
 property :DestinationPath,"c:/chef/1.txt"
end

@ 上面的chefInvokeDSCToGenerateFile.rb生成后,在window的cmd窗口调用下面的命令。

C:\chef>chef-client --local-mode .\chefInvokeDSCToGenerateFile.rb

恭喜你,运行成功了。请看下面的执行结果。

C:\chef>chef-client --local-mode .\chefInvokeDSCToGenerateFile.rb
[2017-06-15T00:01:15+08:00] WARN: No config file found or specified on command l
ine, using command line options.
Starting Chef Client, version 12.13.37
resolving cookbooks for run list: []
Synchronizing Cookbooks:
Installing Cookbook Gems:
Compiling Cookbooks...
[2017-06-15T00:01:28+08:00] WARN: Node dsc-chef has
 an empty run list.
Converging 1 resources
Recipe: @recipe_files::C:/chef/chefInvokeDSCToGenerateFile.rb
  * dsc_resource[generateGet-RunSQLScript] action run
    - Perform operation 'Invoke CimMethod' with following parameters, ''methodNa
me'
    = Resourcetest,'className' = MSFT_DSCLocalConfigurationManager,'namespaceNam
e'
    = root/Microsoft/Windows/DesiredStateConfiguration'.
    An LCM method call arrived from computer dsc-chef with user sid
    S-1-5-21-1801674531-602162358-2146502713-16690.
    [dsc-chef]: LCM:  [ Start  Test     ]  [[File]DirectResourceAccess]
    [dsc-chef]:                            [[File]DirectResourceAccess] The

    system cannot find the file specified.
    [dsc-chef]:                            [[File]DirectResourceAccess] The

    related file/directory is: c:/chef/1.txt.
    [dsc-chef]: LCM:  [ End    Test     ]  [[File]DirectResourceAccess] Fal
se
    in 0.0200 seconds.
    [dsc-chef]: LCM:  [ End    Set      ]    in  0.0300 seconds.
    Operation 'Invoke CimMethod' complete.
    Time taken for configuration job to complete is 0.298 seconds

    Perform operation 'Invoke CimMethod' with following parameters, ''methodName
'
    = Resourceset,'className' = MSFT_DSCLocalConfigurationManager,'namespaceName
'
    = root/Microsoft/Windows/DesiredStateConfiguration'.
    An LCM method call arrived from computer dsc-chef with user sid
    S-1-5-21-1801674531-602162358-2146502713-16690.
    [dsc-chef]: LCM:  [ Start  Set      ]  [[File]DirectResourceAccess]
    [dsc-chef]:                            [[File]DirectResourceAccess] The

    system cannot find the file specified.
    [dsc-chef]:                            [[File]DirectResourceAccess] The

    related file/directory is: c:/chef/1.txt.
    [dsc-chef]: LCM:  [ End    Set      ]  [[File]DirectResourceAccess]  in

    0.0000 seconds.
    [dsc-chef]: LCM:  [ End    Set      ]    in  0.0100 seconds.
    Operation 'Invoke CimMethod' complete.
    Time taken for configuration job to complete is 0.145 seconds


Running handlers:
Running handlers complete
Chef Client finished, 1/1 resources updated in 17 seconds

C:\chef>


从上面的执行结果看,其实其本质上调用的还是PowerShell的DSC。



利用Chef的dsc_script来调用PowerShell DSC的资源

Chef除了提供dsc_resource这个配方(receipt)来调用PowerShell DSC的DSC资源之外,还提供了更为方便的方法,那就是用户可以使用dsc_script 直接在Chef的配方里面直接什么PowerShell DSC的需要达到的预期的状态。 下面以用PowerShell DSC创建一个用户为例子。其Chef的配方的代码如下:


dsc_script 'BackupUser' do
  code <<-EOH
    $user = 'backup3'
    $password = ConvertTo-SecureString -String "YourPass$(random)" -AsPlainText -Force
    $cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user, $password

   User $user
     {
       UserName = $user
       Password = $cred
       Description = 'Backup operator'
       Ensure = "Present"
       Disabled = $false
       PasswordNeverExpires = $true
       PasswordChangeRequired = $false
     }
   EOH

  configuration_data <<-EOH
    @{
      AllNodes = @(
          @{
          NodeName = "localhost";
          PSDscAllowPlainTextPassword = $true
          })
      }
    EOH
end

运行的结果如下:

C:\chef>chef-client --local-mode chefInvokeDSCScript.rb
[2017-06-19T11:18:58+08:00] WARN: No config file found or specified on command l
ine, using command line options.
Starting Chef Client, version 12.13.37
resolving cookbooks for run list: []
Synchronizing Cookbooks:
Installing Cookbook Gems:
Compiling Cookbooks...
[2017-06-19T11:20:08+08:00] WARN: Node has
 an empty run list.
Converging 1 resources
Recipe: @recipe_files::C:/chef/chefInvokeDSCScript.rb
  * dsc_script[BackupUser] action run[2017-06-19T11:20:10+08:00] WARN: Could not parse LCM output: Could not parse:
WARNING: Whatif is deprecated in this cmdlet. Please remove Whatif and try
again.

    - converge DSC configuration 'BackupUser'
    - converge DSC resource Unknown DSC Resources by

Running handlers:
Running handlers complete
Chef Client finished, 1/1 resources updated in 01 minutes 21 seconds

C:\chef>

使用PowerShell的get-localUser命令查看,可以看到backup3用户已经创建成功。




版权声明:本文为博主原创文章,未经博主允许不得转载。

[9]DevOps 自动化运维工具Chef---如何解决在Window平台上执行一些knife子命令时所报的错误, knife search, knife status?

有的时候,我们需要window平台上执行一些knife子命令,比如,knife status --run-list 查看运行的run list的状态,knife search '*:*' -i 搜索所...

[7]DevOps 自动化运维工具Chef---如何安装Chef的Report?

Chef Report是一个非常有用的功能,它能检测所有的chef节点的任务执行情况: 成功,失败,终止。 而且能记录客户端节点的执行情况。Chef report的最低执行版本如下: Chef ser...

使用Chef管理windows集群 | 运维自动化工具

但凡服务器上了一定规模(百台以上),普通的ssh登录管理的模式就越来越举步维艰。试想Linux发布了一个高危漏洞的补丁,你要把手下成百上千台机器都更新该补丁,如果没有一种自动化方式,那么至少要耗上大半...

[13] DevOps 自动化运维工具Chef----用chef-apply命令单机运行Chef配方(Receipt)

前面的12篇文章唠唠叨叨了如何安装Chef,如何查看Chef的数据库的密码,就是没有分享如何跑一个简单的Chef的配方去完成一项任务。这篇文章的目的就是让大家见识一下如何用Chef执行一个简单的任务。...

[15] DevOps 自动化运维工具Chef----chef-apply, chef-client,chef-zero,chef-solo区别

在使用Chef的时候,经常会遇到下面这些比较容易混淆的概念和命令:chef-apply, chef-client,chef-zero,chef-solo; 那么这四个命令到底有什么区别呢?...

[4] DevOps 自动化运维工具Chef----在Ubuntu上安装最新的Chef Client 12.13.37 并和Chef server关联起来

上一节分享了在Ubuntu上安装最新的Chef WorkStation 12.13.37,现在这一节给大家分享一下,Ubuntu上安装最新的Chef Client 12.13.37 并和Chef se...

开源自动化配置管理工具ansible、saltstack、Puppet、Chef选择

目前市场上主流的开源自动化配置管理工具有puppet、chef、ansible、saltstack。到底选择哪一个好? 我为什么选择Saltstack,考虑方式很简单,主要基于如下两个方面: 第一、语...

大规模集群自动化部署工具--Chef的安装部署

Chef脚本管理工具部署部署节点 节点类型 IP(虚拟假设的IP) Server 192.168.10.191 Workstation 192.168.10.36 Node ...

DevOps-chef的多节点环境搭建

转载自:-wkq5325-ChinaUnix博客 前言: 前段时间一直想试验一下DevOps的一些配置管理工具,后来因为某些原因,就重点研究了chef。以自己的机器搭建了一个典型的多节点实验环...

使用 Chef 自动化部署一个 Web 服务器

http://www.ibm.com/developerworks/cn/cloud/library/1506_wangqf_chefforweb/index.html “这是一个最好的...
  • drcwr
  • drcwr
  • 2016年08月02日 17:04
  • 703
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[14] DevOps 自动化运维工具Chef----如何用Chef调用PowerShell DSC的Resource
举报原因:
原因补充:

(最多只允许输入30个字)