puppet practice
目标
试验环境有两台主机(VM)构成,一台是master,一台是agent,完成以下工作:
- 新建用户newuser;
- 安装 ubuntu-cloud-keyring package,更改文件/etc/apt/sources.list.d/cloudarchive-kilo.list,添加新包源并更新系统;
- 安装 ntp package。
根据上面的目标,可以分为三个模块- adduser,sysup,ntp。当然你也可以用一个模块实现,但是那样不利于维护,也没有很好的体现puppet之模块的概念。
模块一 adduser
首先在目录modules 下按照puppet的要求新建一个目录adduser,并在其下创建manifests/init.pp。
|-- adduser||-- files||-- manifests||`-- init.pp| `-- templates
files和templates在这个例子中暂时没有用到。
在写init.pp之前,需要思考,增加一个用户需要做哪些事情,这个用户属于哪个组,如果这个组在目标机器上没有怎么办(查看/etc/group)?如果这个用户已经在某些机器上存在怎么办?(查看/etc/passwd)等等。
一般的,用户不可以重复存在,在新建用户之前,保险的做法是先删除。那么有了这些思考,那么写出的程序就有了一定的可靠性而不单单只是实现了功能。
# /etc/puppet/modules/adduser/manifests/init.ppclass adduser{# create new group if nogroup{"newgroup":ensure=>"present",allowdupe=>false,gid=>888,}user{"newuser":ensure=>"present",uid=>888,gid=>888,# need use grup_md5_crypt to create passwordpassword=>'$1$PzftN$XANlscGctdGF3VjXH3k9q0',home=>"/home/newuser",shell=>"/bin/bash",managehome=>true,}# need to create file resoure for new userfile{"/home/newuser":group=>888,owner=>888,mode=>755,ensure=>directory,}}
当然,要使puppet能够执行该新增用户的操作,还必须在nodes/client.pp文件下添加:
node 'client'{include adduser}
注意,下面的模块也要记得修改
client.pp。
模块二 sysup
同样的,在/etc/puppet/modules目录下新建目录sysup,然后新建manifests/init.pp文件。
这个模块需要考虑的两个重要问题是
- 如何修改目标文件,而不是覆盖原有文件?
- 如何保证在更新包源之后才进行系统更新和升级?
对于第一个问题,因为puppet自有的file资源不具有更新文件的功能,依据其content属性,会将目标文件原有内容覆盖。
可以使用file_line资源,不过需要预先添加stdlib模块。
对于第二个问题,实际上puppet已经帮我们想好了,合理使用资源共有属性(官网谓之为元属性)before,require等可以办到。
# /etc/puppet/modules/sysup/manifests/init.ppclass sysup{package{"ubuntu-cloud-keyring":ensure=>installed,}file_line{"add repo":path=>"/etc/apt/sources.list.d/cloudarchive-kilo.list",line=>"deb http://ubuntu-cloud.archive.canonical.com/ubuntu/ trusty-updates/kilo main",}exec{"apt-get update && apt-get dist-upgrade":cwd=>"/root",path=>"/usr/bin",require=>File_line["add repo"],}}
模块三 ntp
模块三比较简单,但是安装ntp后我们需要修改配置文件/etc/ntp.conf,一般配置文件中存在大量的注释行和空行,不便于查找相应位置。
于是写了个脚本simf.sh,主要作用是删除目标文件的注释和空行:
#!/bin/bashcp $1 $1.bakcat $1.bak | grep -v '^#'| grep -v '^$'> $1
现在需要把该脚本复制到各个client上。(这里我另写了个模块simf)
class sim{file {"/home/andy/simf.sh":ensure=> present,source=>"puppet:///files/simf.sh",mode=>755;}file {"/usr/sbin/simf":ensure=> link,links => follow,target =>"/home/andy/simf.sh",}}
然后把写好的脚本放到/etc/puppet/files下。
但是仅仅如此还不够,需要修改/etc/puppet/fileserver.conf如下:
[files]path /etc/puppet/filesallow *
回归正题,模块ntp的代码如下:
class ntp{package{"ntp":ensure=>installed,}file_line {"add server":path=>"/etc/ntp.conf",line=>"server 0.cn.pool.ntp.org iburst",require=>Package["ntp"],}}
puppet practice的更多相关文章
- 关于Puppet不得不说的故事
Puppet对于做DevOps的同学来说,是个熟悉的名字,但仍有许多人并不了解它.那么我先来简单介绍一下:Puppet是由Puppetlabs公司开发的系统管理框架和工具集,被用于IT服务的自动化管理 ...
- Pramp mock interview (4th practice): Matrix Spiral Print
March 16, 2016 Problem statement:Given a 2D array (matrix) named M, print all items of M in a spiral ...
- Atitit 数据存储视图的最佳实际best practice attilax总结
Atitit 数据存储视图的最佳实际best practice attilax总结 1.1. 视图优点:可读性的提升1 1.2. 结论 本着可读性优先于性能的原则,面向人类编程优先于面向机器编程,应 ...
- Puppet自动化部署-安装及配置(3)
本文介绍Puppet Master及Agent相关的安装及配置. 一. 官网下载Puppet安装YUM源 [root@puppet-master ~]# rpm -ivh https://yum.pu ...
- Puppet自动化运维-资源介绍篇(4)
1.什么是资源? 资源是Puppet最基础的元素,每个资源的定义都具有标题,类型,以及一系列的属性. 资源定义有如下的特性: (1) Puppet使用title在编译时区分每个资源,使用命名变量在 ...
- Puppet自动化部署-前期环境准备(2)
在安装Puppet环境之前需要配置好机器的基本配置,如规范网络地址IP.hostname,certname认证名称,ntp时间同步等配置完毕,完善的搭建自动化环境. 1.环境介绍 此处实现部署的环境是 ...
- Puppet自动化运维-C/S架构概念(1)
1.Puppet工作模式 (1)采用C/S架构(即是server<=>client) (2)Master 会对自己形成自签名CA中心,对Agent端进行证书颁发,验证通过才允许Agent( ...
- Puppet简易入门
一.查看官方提供的下载源 https://docs.puppet.com/guides/puppetlabs_package_repositories.html 二. 选择对应系统的下载源 因为本机是 ...
- The Practice of .NET Cross-Platforms
0x01 Preface This post is mainly to share the technologies on my practice about the .NET Cross-Platf ...
随机推荐
- Selenium操作滚动条
//移动到元素element对象的“顶端”与当前窗口的“顶部”对齐 ((JavascriptExecutor) driver).executeScript("arguments[0].scr ...
- 【刷题】洛谷 P4142 洞穴遇险
题目背景 ZRQ在洞穴中准备采集矿物的时候遇险了!洞穴要塌了! 题目来源:zhoutb2333 题目描述 整个洞穴是一个 \(N*N\) 的方格图,每个格子形如 \((X,Y),1 \le X,Y \ ...
- 洛谷 3201 [HNOI2009]梦幻布丁 解题报告
3201 [HNOI2009]梦幻布丁 题目描述 \(N\)个布丁摆成一行,进行\(M\)次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为\(1,2,2 ...
- oracle 远程登录sqlplus TNS:无监听
1.将localhost 改成 计算机名 best-PC,或者ip地址 . 我修改成计算机名,因为经常在无线网络和有限网络之间切换 SID_LIST_LISTENER = (SID_LIST = ...
- MSA(微服务简介)
1.为什么要使用微服务? 要说为什么要使用微服务,我们要先说下传统的企业架构模式-垂直架构/单块架构模式,简单点说:我们一般将系统分为三层架构,但是这是逻辑上的三层,而非物理上的三层,这就意味着经过编 ...
- 手脱PE Pack v1.0
1.PEID查壳 PE Pack v1.0 2.载入OD,一上来就这架势,先F8走着 > / je ; //入口点 -\E9 C49D0000 jmp Pepack_1.0040D000 004 ...
- Debian最完美安装flash的教程//适用于所有linux版本
话说不管是新手还是老手,都离不开flash.没有flash的支持,菜鸟们也少了一些把玩linux的动力. flash有很多安装的方法,不过性能相差很大.这里的缘由就不重要了. 下面我介绍在chromi ...
- 洛谷 P2345 奶牛集会
https://www.luogu.org/problem/show?pid=2345 题目描述 约翰的N 头奶牛每年都会参加“哞哞大会”.哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨栅 ...
- 动态规划:双重DP
之前做过的传纸条那道题就是双重动态规划的典型应用,题意就不描述了,直接贴一下以前写过的,经典代码 #include<iostream> using namespace std; ,maxm ...
- Python学习笔记(八)sorted
摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431823058 ...