Learning Puppet — Manifests
Begin
In a text editor — vim, emacs, or nano — create a file with the following contents and filename: written and applied your first Puppet manifest.
[root@yum01 ~]# useradd testuser
[root@yum01 ~]# cat /etc/passwd |grep test
testuser:x:536:536::/home/testuser:/bin/bash
[root@yum01 ~]# pwd
/root
[root@yum01 ~]# vim user-absent.pp
[root@yum01 ~]# cat user-absent.pp
user {'testuser':
ensure => absent,
}
[root@yum01 ~]# puppet apply /root/user-absent.pp
Notice: Compiled catalog for yum01.test.com in environment production in 7.99 seconds
Notice: /Stage[main]/Main/User[testuser]/ensure: removed
Notice: Finished catalog run in 4.34 seconds
[root@yum01 ~]# puppet apply /root/user-absent.pp
Notice: Compiled catalog for yum01.test.com in environment production in 0.27 seconds
Notice: Finished catalog run in 0.03 seconds
[root@yum01 ~]# cat /etc/passwd |grep test
Manifests
Puppet programs are called “manifests,” and they use the .pp file extension.
The core of the Puppet language is the resource declaration. A resource declaration describes a desired state for one resource.
Puppet Apply
Like resource in the last chapter, apply is a Puppet subcommand. It takes the name of a manifest file as its argument, and enforces the desired state described in the manifest.
We’ll use it below to test small manifests, but it can be used for larger jobs too. In fact, it can do nearly everything an agent/master Puppet environment can do.
Resource Declarations
Let’s start by looking at a single resource:
[root@yum01 ~]# ls -l /tmp/ |grep test
[root@yum01 ~]# vim file-1.pp
[root@yum01 ~]# cat file-1.pp
file {'testfile':
path => '/tmp/testfile',
ensure => present,
mode => 0640,
content => "i am a test file",
}
- The type (
file, in this case) - An opening curly brace (
{)- The title (
testfile) - A colon (
:) - A set of attribute
=>value pairs, with a comma after each pair (path => '/tmp/testfile',etc.)
- The title (
- A closing curly brace (
})
[root@yum01 ~]# pwd
/root
[root@yum01 ~]# puppet apply /root/file-1.pp
Notice: Compiled catalog for yum01.test.com in environment production in 0.18 seconds
Notice: /Stage[main]/Main/File[testfile]/ensure: created
Notice: Finished catalog run in 0.32 seconds
[root@yum01 ~]# ls -l /tmp/ |grep test
-rw-r----- 1 root root 16 Nov 6 06:50 testfile
[root@yum01 ~]# cat /tmp/testfile
i am a test file
Puppet noticed that the file didn’t exist, and created it. It set the desired content and mode at the same time.
If we try changing the mode and applying the manifest again, Puppet will fix it:
[root@yum01 ~]# chmod 666 /tmp/testfile
[root@yum01 ~]# ls -l /tmp/ |grep test
-rw-rw-rw- 1 root root 16 Nov 6 06:50 testfile
[root@yum01 ~]# puppet apply /root/file-1.pp
Notice: Compiled catalog for yum01.test.com in environment production in 0.22 seconds
Notice: /Stage[main]/Main/File[testfile]/mode: mode changed '0666' to '0640'
Notice: Finished catalog run in 0.27 seconds
[root@yum01 ~]# ls -l /tmp/ |grep test
-rw-r----- 1 root root 16 Nov 6 06:50 testfile
Once More, With Feeling!
Now that you know resource declarations, let’s play with the file type some more. We’ll:
- Put multiple resources of different types in the same manifest
- Use new values for the
ensureattribute - Find an attribute with a special relationship to the resource title
- See what happens when we leave off certain attributes
- See some automatic permission adjustments on directories
[root@yum01 ~]# vim file-2.pp
[root@yum01 ~]# cat file-2.pp
file {'/tmp/test1':
ensure => file,
content => "hi.\n",
}
file {'/tmp/test2':
ensure => directory,
mode => 0644,
}
file {'/tmp/test3':
ensure => link,
target => '/tmp/test1',
}
notify {" iam nofitying you":}
notify {"so am i" :}
[root@yum01 ~]# puppet apply /root/file-2.pp
Notice: Compiled catalog for yum01.test.com in environment production in 0.18 seconds
Notice: /Stage[main]/Main/File[/tmp/test1]/ensure: defined content as '{md5}4e9141e3aa25c784aa6bc0b2892c12d9'
Notice: /Stage[main]/Main/File[/tmp/test3]/ensure: created
Notice: /Stage[main]/Main/File[/tmp/test2]/ensure: created
Notice: iam nofitying you
Notice: /Stage[main]/Main/Notify[ iam nofitying you]/message: defined 'message' as ' iam nofitying you'
Notice: so am i
Notice: /Stage[main]/Main/Notify[so am i]/message: defined 'message' as 'so am i'
Notice: Finished catalog run in 0.14 seconds
New Ensure Values, Different States
The ensure attribute is somewhat special. It’s available on most (but not all) resource types, and it controls whether the resource exists, with the definition of “exists” being somewhat local.
With files, there are several ways to exist:
- As a normal file (
ensure => file) - As a directory (
ensure => directory) - As a symlink (
ensure => link) - As any of the above (
ensure => present) - As nothing (
ensure => absent).
Titles and Namevars
Notice how our original file resource had a path attribute, but our next three left it out?
Almost every resource type has one attribute whose value defaults to the resource’s title. For the file resource, that’s path. Most of the time (user, group, package…), it’sname.
The Site Manifest and Puppet Agen
We’ve seen how to use puppet apply to directly apply manifests on one system. The puppet master/agent services work very similarly, but with a few key differences:
Puppet apply:
- A user executes a command, triggering a Puppet run.
- Puppet apply reads the manifest passed to it, compiles it into a catalog, and applies the catalog.
Puppet agent/master:
- Puppet agent runs as a service, and triggers a Puppet run about every half hour (configurable).
- Puppet agent does not have access to any manifests; instead, it requests a pre-compiled catalog from a puppet master server.
- The puppet master always reads one special manifest, called the “site manifest” or site.pp. It uses this to compile a catalog, which it sends back to the agent. ----site.pp
- After getting the catalog, the agent applies it.
This way, you can have many machines being configured by Puppet, while only maintaining your manifests on one (or a few) servers. This also gives some extra security, as described above under “Compilation.”
Exercise: Use Puppet Agent/Master to Apply the Same Configuration
To see how the same manifest code works in puppet agent:
[root@centos manifests]# pwd
/etc/puppet/manifests
[root@centos manifests]# vim file.pp
[root@centos manifests]# cat file.pp
file {'/tmp/test11111111':
ensure => file,
content => "hi. this is a test 111111 file \n",
}
[root@centos manifests]# vim site.pp
[root@centos manifests]# cat site.pp
import 'file.pp'
[root@yum01 ~]# puppet agent --test
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for yum01.test.com
Info: Applying configuration version '1415262208'
Notice: /Stage[main]/Main/File[/tmp/test11111111]/ensure: defined content as '{md5}cb94281a2c8ccc1c3a64aa2c0e04721e'
Notice: Finished catalog run in 0.14 seconds
[root@yum01 ~]# cat /tmp/test11111111
hi. this is a test 111111 file
refer: https://docs.puppetlabs.com/learning/manifests.html
Learning Puppet — Manifests的更多相关文章
- Learning Puppet — Resource Ordering
Learning Puppet — Resource Ordering Learn about dependencies and refresh events, manage the relation ...
- Learning Puppet — Resources and the RAL
Learning Puppet — Resources and the RAL Welcome to Learning Puppet! This series covers the basics of ...
- Learning Puppet — Variables, Conditionals, and Facts
Begin $my_variable = "A bunch of text" notify {$my_variable:} Yup, that’s a variable, all ...
- windows puppet manifests 文件维护
初级 puppet windows agent实现简单的msi格式安装包安装及bat文件创建;
- Puppet自动化运维-资源介绍篇(4)
1.什么是资源? 资源是Puppet最基础的元素,每个资源的定义都具有标题,类型,以及一系列的属性. 资源定义有如下的特性: (1) Puppet使用title在编译时区分每个资源,使用命名变量在 ...
- [翻译]用 Puppet 搭建易管理的服务器基础架构(4)
我通过伯乐在线翻译了一个Puppet简明教程,一共分为四部分,这是第四部分. 原文地址:http://blog.jobbole.com/89214/ 本文由 伯乐在线 - Wing 翻译,黄利民 校稿 ...
- [翻译]用 Puppet 搭建易管理的服务器基础架构(3)
我通过伯乐在线翻译了一个Puppet简明教程,一共分为四部分,这是第三部分. 本文由 伯乐在线 - Wing 翻译,黄利民 校稿.未经许可,禁止转载!英文出处:Manuel Kiessling.欢迎加 ...
- [翻译]用 Puppet 搭建易管理的服务器基础架构(2)
我通过伯乐在线翻译了一个Puppet简明教程,一共分为四部分,这是第二部分. 原文地址:http://blog.jobbole.com/87680/ 本文由 伯乐在线 - Wing 翻译,黄利民 校稿 ...
- Puppet安装及部署
本篇博客主要介绍Puppet的安装部署,后续会更新其他相关内容 一.简介 二.环境介绍 三.安装Puppet 四.配置Puppet-dashboard 五.配置Puppet Kick 一.简介 Pup ...
随机推荐
- abap append 用法
[转自http://blog.chinaunix.net/uid-7982817-id-91999.html]Append用法总结 2008-11-14 11:42:19 分类: Syntax APP ...
- poj 2955 括号匹配 区间dp
Brackets Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6033 Accepted: 3220 Descript ...
- 多线程问题(JVM重排序)
public class Test3 { private static boolean ready; private static int Number; private static class R ...
- 奇怪的电梯(HDU1548) (Dijkstra)或者(BFS)
问题 E: 奇怪的电梯 时间限制: 1 Sec 内存限制: 64 MB提交: 35 解决: 16[提交][状态][讨论版] 题目描述 有一天桐桐做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都 ...
- phpwind将服务器数据同步到本地之后网站不显示或者排版错误
在将phpwind的数据同步到本地服务器之后 如果访问本地服务器的首页不能显示的话 首先要查看global.php文件中的D_P变量,官方默认 的此变量应该指向和R_P变量是同一个文件夹即网站的根目录 ...
- Promise 学习笔记
所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise是一个对象,从它可以获取异步操作的消息.Promise提供统一的API, ...
- Windows系统下使用Sublime搭建nodejs环境
最近在研究Nodejs开发,俗话说,工欲善其事,必先利其器,当然要找到一款用着顺手的编辑器作为开始.这里我们选择的是Sublime Text 3,除了漂亮的用户界面,最吸引我的就是它的插件扩展功能以及 ...
- STM32的Cortex-M3核与ARM7有何区别?哪个性能更强?
- <初级程序员> git 的初级使用
作为程序员,Git 是一个很好的代码管理工具.Git 是一个版本控制系统,主要的作用就是记录代码的修改过程,有效的追踪文件的变化.当代码出现错误的时候可以很容易的恢复到之前的状态,不管对于个人开发还是 ...
- Flash pixel Bender学习笔记
pixel Bender是指用来创建,编译,测试和导出pixel shader,用于各种flash产品的一个IDE. Pixel Bender是Adobe推出的一个高性能的图像视频处理技术.它能跨平台 ...