puppet入门:puppet使用基础(puppet 5)

  • A+
所属分类:puppet  运维技术

puppet入门:puppet使用基础(puppet 5)

这篇文章将会介绍怎样在单机模式下简单的使用puppet。

 

在本博客中,"puppet"是一个系列文章,如果你还不明白puppet的相关概念,强烈建议从puppet系列文章中的第一篇开始阅读,否则你可能无法理解这篇文章中涉及到的部分名词。

puppet系列文章列表直达链接:puppet入门系列 

 

在我们刚开始学习怎样使用puppet时,我们可以不使用master/agent的方式运行puppet,而是使用单机的方式利用puppet进行测试或学习,等到我们能够熟练使用puppet相关技能以后,我们再跨越到master/agent的工作模型中,这样有利于我们学习使用puppet。

好了,我们现在正式开始认识一下puppet。

首先使用puppet help命令查看puppet的使用帮助。

puppet入门:puppet使用基础(puppet 5)

从帮助信息中可以看出,puppet的使用语法如下

puppet <subcommand> [options] <action> [options]

那么我们解释一下上述语法

subcommand:表示子命令

options:表示选项,也就是说,使用puppet子命令时可以跟随相应的选项。

action:表示动作,我们也可以把action理解为子命令的子命令。

options:action后面的options表示action对应的选项,我们也可以理解成子命令的子命令对应的选项。

 

从上图中,我们可以看到,puppet有很多子命令,其实我们使用的puppet help命令,就是puppet的子命令

如果我们想要查看子命令的用法,可以使用如下两条命令

puppet help subcommand

puppet man subcommand

如果我们想要查看action的帮助信息,可以使用如下命令

puppet help subcommand action

因为我们现在使用单机模式下的puppet进行测试,所以,我们会用到"apply"子命令,这个子命令的作用就是在本地运行puppet的"清单",说白了就是指定本机上的一个配置文件,在单机模式下运行puppet,那么,根据我们刚才提到的help命令的使用方法,我们可以使用如下命令查看"apply"子命令的使用帮助:

puppet入门:puppet使用基础(puppet 5)

从返回的帮助信息中,可以得知apply子命令的作用就是以独立的方式,将清单中的配置应用于本机,也就是说,根据配置清单配置当前服务器。

apply这个子命令有很多选项,而我们常用的有debug、verbose、noop等,debug表示显示调试信息,verbose表示显示详细信息,noop表示测试模式模拟执行,当然,这些选项都是可选的,从帮助信息可以看到 file 是不可省的,file表示对应的配置文件,也就是"清单",所以,我们使用puppet apply  manifestname 即可执行对应的清单。

 

好了,现在我们已经知道怎样在本地执行一个清单了,但是我们还不会写清单,那么,我们先写一个最简单的清单练练手。

 

我们说过,puppet的清单其实就是由多个资源组成的配置文件而已,我们可以这样理解,我们要操作什么资源,就将资源写入清单中即可。

假设,现在我们想要使用puppet在当前服务器上创建一个名叫zsythink的用户,我们可以配置一个清单,清单的名称为test.pp ,注意,清单要以".pp"为文件后缀名, test.pp内容如下。

 
 

puppet入门:puppet使用基础(puppet 5)

上图内容中,我们只定义了一个资源,这个资源的类型是user ,这个user类型的资源的标题是'zsythink',我们通过name关键字指定资源的名称,这个资源的名称也是'zsythink',我们通过ensure关键字,可以设定资源的"目标状态",present直译过来的意思是"出席",但是当我们在user类型的资源中设置ensure的值为present时,表示创建用户,也就是说,我们的目标是确保zsythink用户存在,如果此用户存在,将不再执行对应操作,如果对应的用户不存在,那么,我们将会创建这个用户,确保这个用户能够"出席",其实不管是name关键字还是ensure关键字,这些关键字在puppet中都被称为资源的"属性",这个资源只是用于示例,我们在后面的文章中会单独对资源的结构进行总结,不用怕,我们继续聊。

 

上面的资源是不是很容易理解,好了,清单已经准备好了,现在我们准备执行这个清单,但是需要注意,在执行清单之前,我们先确定一下,当前系统中是否存在zsythink用户。

puppet入门:puppet使用基础(puppet 5)

可以看到,当前系统中并不存在zsythink用户,那么,我们准备执行一遍这个清单,看看效果

 
 

因为我们现在在单机模式下使用puppet,所以,我们使用puppet aplly命令执行对应清单,还记得我们之前提到过的noop选项吗,我们可以通过noop选项模拟执行,也就是说,并不是真正的按照清单中的配置操作,而是按照清单中的配置,模拟执行一遍,示例如下。

puppet入门:puppet使用基础(puppet 5)

可以看到,我们执行puppet命令时添加了--verbose选项,表示输出详细信息,使用了--noop选项,表示模拟执行、测试执行。

从测试执行的返回信息中,可以看到,当我们执行puppet apply命令以后,第一步就是将对应的test.pp这个清单编译成catalog,

之前已经说过,清单不能直接运行,需要先编译成catalog,这里也验证了我们的理论。

测试信息中的绿色字体是一条应用配置的版本号,我们不用在意它。

同时返回信息中显示,我们想要操作的资源类型为user,user的名字是zsythink, zsythink这个用户的当前状态为"absent",absent直译过来的意思是缺席,也就是说,当前服务器上并不存在zsythink这个用户, should be present表示这个资源的最终状态应该是present,表示这个用户应该存在,(noop)表示我们添加了--noop选项,所以puppet并没有真正的创建用户,那么我们来验证一下,看看zsythink用户到底有没有被创建。

puppet入门:puppet使用基础(puppet 5)

可以看到,zsythink用户的确没有被创建,那么,这次我们在执行puppet命令时不添加--noop选项,也就是说不进行测试执行,而是真正的执行,看看zsythink用户会不会被创建。

puppet入门:puppet使用基础(puppet 5)

从上图中,可以发现,puppet已经按照test.pp清单中的配置,正确的创建了一个名为zsythink的用户了。

好了,我们已经入门了。

 
 

weinxin
我的微信公众号
关注"实用运维笔记"微信公众号,当博客中有新文章时,可第一时间得知哦~
朱双印

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:3   其中:访客  2   博主  1

    • avatar echo 5

      感觉学了 ansible 都不想学 puppet 了 :arrow: 求打醒

      • avatar 风筝 3

        我发现一个问题,当创建一个用户名为多个字符的用户时,比如创建一个‘xiao ming’,就是中间有空格的这样的用户名的时候,创建不成功,有什么需要注意的地方么

          • avatar 朱双印 Admin

            @风筝 不能这样用,在Linux中直接用useradd也不能添加用户名中带有空格的