puppet

Puppet manifest has a file declaration that somehow duplicates itself

佐手、 提交于 2019-11-29 14:52:46
Given the confusing error message: err: Could not retrieve catalog from remote server: Error 400 on SERVER: Duplicate declaration: File[/etc/logstash/conf.d] is already declared in file /var/lib/puppet/envs/SYS_15378/modules/logstash/manifests/config.pp at line 54; cannot redeclare at /var/lib/puppet/envs/SYS_15378/modules/logstash/manifests/config.pp:54 on node foo.bar.com Questions: If this is really duplicating a file, how do I go about debugging it (finding the file)? If not... what is this actually communicating? Notice: the duplicate declaration is on line 54 the file it is duplicating

Capturing output/error when invoking PowerShell script

筅森魡賤 提交于 2019-11-29 08:48:52
I am trying to invoke a PowerShell script from Puppet. The issue is even if the PowerShell script fails on remote box, it still shows successful run as shown below: Notice: /Stage[main]/Main/Node[dev.abc.com]/Exec[Check UAC]/returns: executed successfully Content of my node block in site.pp : exec { 'Check UAC': command => '& C:\temp\check_uac.ps1', provider => powershell, logoutput => 'on_failure', } The script failed when I tried running from PowerShell console stating that execution policy was set to Restricted. PS C:\> C:\temp\check_uac.ps1 C:\temp\check_uac.ps1 : File C:\temp\check_uac

2019/07/10 配置管理及Puppet(01)

坚强是说给别人听的谎言 提交于 2019-11-29 04:56:44
运维日常三大工作,发布,变更,故障处理 事实上对正常的发布来说,还有很多步骤 工作当中或者IT典型的公司,在提供产品的工作当中,大体分为两种运维环境 以电商站点为例,开发代码写完以后要想上线应用,以java为例,代码开发以后,第二个步骤肯定不可能直接把代码部署到线上应用环境中去, 所以一般第二步叫做构建,build(类似c代码的编译,编译完以后才能测试,一个庞大的java项目是需要一个构建工具进行构建的,类似编译操作一样,来检查代码间的关系,来完成依赖关系的检查,) 第二步构建,构建好以后 第三步可以做测试了,比如单元测试,功能测试,集成测试等,测试完成,如果没问题,这个时候就可以放在预发布环境里了。 测试是放在测试环境中做的,发布之前还应该放在预发布环境,预发布环境要进行接受性测试(发到准线上,我们检查对应代码运行结果,根据访问界面之类的,是否没有问题) 如果没有问题,就可以上线了 第四步部署 所以大致分几步 (先做开发计划 plan,plan完成以后开始实施开发) 1.写代码的过程(开发) (开发完以后,要做单元测试,因为不同的人对应的开发项目本身有可能只负责这个项目中的很小一部分功能,由于每个功能的开发进度不一定完全一样,所以每个小组开发完功能以后,会将它集成到对应的代码树上,类似于推送的 写完代码要push到远程仓库来合并,合并完以后做单元测试) 2.开发完以后,做构建,

2019/07/11 puppet资源使用基础(02)

淺唱寂寞╮ 提交于 2019-11-29 04:56:43
之前简单介绍了puppet的资源清单的编写方式,以及我们如何查看所支持的资源类型,也简单编写了一个资源group,ensure是一个非常重要的属性 在puppet当中定义资源的方式其实非常简单,只需要写一个普通的文本文件,一般以.pp结尾,而后定义资源的时候,语法格式 、 定义资源的语法: type {‘title’:同一种资源中,不同资源的区分的id(一般情况下是资源本身的同名属性值) attribute1 => value1, atrribute2 => value2, …… } name叫名称变了,可省略,省略的时候和title相同 定义资源的语法: type(小写) {‘title’:同一种资源中,不同资源的区分的id(一般情况下是资源本身的同名属性值) attribute1 => value1, atrribute2 => value2, …… } 注意:type必须使用小写字符;title是一个字符串,在同一类型中必须惟一; 资源有多种类型,其类型当中有一些是特殊属性,第一个特殊属性 ensure 用来定义资源的目标状态 第二个name/namevar 名称变量,省略时跟对应的资源title一致,很多时候简称为名称 namevar变量在同一种资源类型必须唯一 几乎所有的类型中,都有此两者特殊属性 **定义一个组常用属性有 name 组名 gid: gid system

2019/07/14 puppet资源和流程控制(03)

狂风中的少年 提交于 2019-11-29 04:56:42
**devops当中,运维工作层面上的,deploy相关层级的工作,大体上所需要用到的工具分为三个层级 Bootstraping (安装基本系统,ip地址主机名等),可以利用PXE,cobbler这样的解决方案来完成系统自动安装或者在云计算申请创建虚拟机实例 Configuration, 安装好系统之后需要配置一些服务启动起来(ansible,puppet,saltstack) Command and Control;编排功能(puppet,ansible,) puppet是用ruby语言研发的Configuration工具 ** puppet:Configuration 架构模式 apply:standalone 单机运行 master/agent: manifest:(配置好后放在manifest 清单的文件当中) resource 资源是抽像关管理以后,利用配置编程语言,来能够让用户定义脱离底层实现方式的,只需要描述资源目标结果状态的,这么一种配置语言 node 资源定义起来十分容易,type指明类型 资源:resource type{‘title’: atrribute => value,(属性信息,进行设定对应的值,从而定义目标资源) … } 在定义资源的众多属性中,有几个特殊属性 关系元参数:before/require, notify/subscribe 特殊参数

2017/07/15 puppet类和模板(04)

不问归期 提交于 2019-11-29 04:56:39
之前讲了puppet当中的编程元素,包括变量,和流程控制语句,当中的条件判断,if unless,case和selector,这些流程控制语句可以在条件满足的时候,来完成流程控制事的所谓配置文件的编写 但是有时候我们需要用代码来完成重用,事实上对于configuration 而言, 支持另外两种编程元素,函数,类,用的最多是类 puppet的编程源支持两种编程方式,过程式编程和对象式编程,ruby本身就是对象式编程,在puppet代码中也支持类,要想能去配置nginx,nginx有两种功能,web server,反代reverse proxy(7层反代。,4层反代) 配置起来的步骤,无非就是安装程序包,提供配置文件,启动服务 无非就是配置文件不一样 安装程序包,和启动程序,这段配置是可以进行公用的,所以可以把安装包和启动程序定义成一个公共的模块,而后在定义,三个子功能都能调用这个公用的公共模块 而在类的架构当中,这种方式十分容易实现 先定义一个父类,父类其实有两个资源,1.安装程序包,2.启动服务 而后再定义三个子类分别去继承父类,而后在子类中定义一个新资源,比如提供配置文件A文件 再定一个子类,也添加一个文件资源,继承父类 从父类可以得到一部分定义,在本地直接调用使用 父类也叫做基类,这里类更像是过程式编程中的函数,所不同的是,比函数功能更强大,不但能继承,还能重载某些运算符

2019/07/15 puppet模块(05)

对着背影说爱祢 提交于 2019-11-29 04:56:38
之前讲了puppet中的类,模板(简单的变量替换),包括在定义资源清单的时候,很多资源都回依赖外部文件,(比如rpm包依赖rpm包文件)、 如果安装完提供配置文件,需要一个文本文件或是一个模板文件, 要复制资源到别的主机上运用,就要把清单所依赖的所有文件都复制i过去。但是资源清单的时候很难理清楚, 就需要一个组织结构来包含资源清单和依赖的所有外部 文件 这个功能叫做模块,可以理解为就是一个自包含的资源清单和其所依赖的各外部文件所组成的目录结构 puppet的模块格式 MODULES_NAME: 模块名称,在这目录内至少拥有以下内容 manifests/ 清单 文件 init.pp files/ 清单文件各资源所依赖的静态外部文件 templates/ 依赖的模板文件 lib/ 插件目录,常用于存储自定义的facts以及自定义类型;(一般做非常高级的功能设置才有用) 插件的帮助放在spec目录下 spec/ 类似于tests目录,存储lib/目录下插件的使用帮助和范例 tests/ 当前模块的使用帮助或使用范例文件; puppet模块: 模块就是一个按约定的、预定义的结构存放了多个文件或子目录的目录, 目录里的这些文件或子目录必须遵循一定格式的命名规范; puppet会在配置的路径下查找所需要的模块; MODULES_NAME: manifests/ init.pp files/

Set Environment Variables with Puppet

可紊 提交于 2019-11-29 03:06:04
I am using vagrant with puppet to set up virtual machines for development environments. I would like to simply set a few environment variables in the .pp file. Using virtual box and a vagrant base box for Ubuntu 64 bit. I have this currently. $bar = 'bar' class foobar { exec { 'foobar': command => "export Foo=${bar}", } } but when provisioning I get an error: Could not find command 'export'. This seems like it should be simple enough am I missing some sort of require or path for the exec type? I noticed in the documentation there is an environment option to set up environment variables, should

puppet (四)类、模块、模板

杀马特。学长 韩版系。学妹 提交于 2019-11-29 01:46:57
类:class 用于公共资源的一组资源,是命名的代码块,创建互殴可在puppet全局进行调用,类可以被继承 语法资源: class class_name { ...puppet code... } 注意:类名只能包含小写字母、数字、下划线且必须以小写字母开头 类定义实例: 声明类方式: 1.include:include+类名可以以逗号相隔,声明多个类 2.require:require+类名 3.resource:class{‘类名’:里面还可以写一些属性}类似资源的调用,资源用type 4.ENC 1和3比较常用 类只有在声明之后才能被执行 定义能够接受参数的类 定义: class 类名($arg1='value1',$arg2='value2'){ ...code... } 传参: class{‘类名’: arg1 =>'nginx' } 类继承: 定义方式:    class base_class ::class_name inherits basee_class ,父类名::类名,base_class ::class_name只是一个名字,本身没有继承功能,就行起名的时候带上父亲的名字一样 作用:   在于继承一个已有的类,并且实现覆盖资源属性,或向资源属性追加额外值   => 覆盖 +>追加 类继承时:   1.声明子类时,其基类会被自动首先声明   2

puppet (三)变量及作用域

╄→гoц情女王★ 提交于 2019-11-28 23:48:27
一.puppet variable 1.变量命名 puppet的变量名称须以$开头,复制操作符为=号 格式为: $content = "some content\n" 或这样理解 $variable = 'value' 任何正常数据类型(非正则表达式的)的值都可以赋予puppet中的变量,任何能解析为一个正常值(包括表达式,函数和其他变量)的语句都可以作为value;变量将包含这个语句解析的值而不是语句的引用; puppet的变量只能使用他们的短名称来分配,这意味着,在给定范围内不能将外部范围内的value赋值给variable; 例如: [root@bogon ~]# rpm -q vlock package vlock is not installed [root@bogon media]# vim test.pp $package_vlock = 'vlock' package{$package_vlock: ensure => installed, } [root@bogon media]# puppet apply test.pp Notice: Compiled catalog for bogon in environment production in 1.62 seconds Notice: /Stage[main]/Main/Package[vlock]