有时包之间会有复杂的交互。 为了避免带有无数看起来不相关的参数的类接口,我关于使用标签, defined(<resource>)函数让资源根据configuration的其余部分(而不是事实)稍微改变它们的行为。 不幸的是,我无法想出让Puppet首先parsing可以生成条件的类的方法,然后才能通过隐式地(通过标签)来parsing类的行为取决于第一个类的执行方式。 假设这里是一个class级,pipe理一个地方,一个特定的用户存储他敏感的个人数据。 这个类可以创build分区(可能是encryption的),或者只是维护一个外部文件夹(比如/ mnt / user)。 或者它可以保持文件夹在默认位置,即在/ home / user(spurcetype =>'none')中 class userdocs ( $sourcetype) { case $sourcetype { 'cryptpartition' : { tag 'dedicated_user_docs_partition' … } 'partition' : { tag 'dedicated_user_docs_partition' … } 'none' : { … } } … } 除了相当标准的文件夹集,用户可能要转发到他的分区,有文件夹的存在取决于特定的软件运行,如thunderbird或virtualbox。 如果满足两个条件,创build链接(而不是文件夹),例如virtualbox应该只做:a)用户pipe理单独的分区( tagged('dedicated_user_docs_partition') ) ,用户安装VirtualBox。 必须有一个地方,我可以放置额外的代码,检查这两个条件。 我可以把它放到课堂上,pipe理virtualbox: class vbox { if […]
我有一个由AWS CloudFormation生成的堆栈,其中包含一个EC2实例(运行Ubuntu 14.04)和一个RDS(数据库)实例。 他们都在一个VPC内,其中包括一个木偶大师(不是云形成堆栈的一部分): —————– VPC ——————– +—–+ +—–+ +—————+ | EC2 | <—> | RDS | | Puppet master | +—–+ +—–+ +—————+ 我想伪装EC2节点,为Web服务器和包括数据库连接信息的应用程序编写一个configuration,其中一部分是RDS实例的内部主机名。 问题是,如果需要知道RDS节点的内部主机名,我该如何让puppetmaster为应用程序configuration编译模板。 我对这些技术大部分都是新手,特别是CloudFormation和Puppet。 到目前为止,我已经想到了一些解决scheme,但想要一些指导,并想知道我是否错过了一些东西。 使用CloudFormation模板中的UserData使其可用于EC2实例,以便将其添加到EC2 puppet代理上的Facter。 这似乎是错误的EC2节点正在向另一台机器的puppet报告。 在木偶大师上使用EC2 API来检查VPC中的RDS节点,并find正确的(通过标签也许?),但我不知道如何让Puppet调用EC2的API,并从它插入一个值到一个模板
我正在尝试创build一个stream氓框用于开发Puppet作为提供者。 我想为stream浪用户设置一个特定的.bashrc。 这是我的相关文件。 dev.pp : class dev { $target = "dev" $root_dir = "/home/vagrant/demo" $user = "demo" $group = "demo" class { "demo": target => $target, root_dir => $root_dir, user => $user, group => $group; } class { "demo::app::site": } } class { "dev": } 模块/演示/舱单/ init.pp: class demo ($target, $root_dir, $user, $group) { group […]
我开始使用R10k来部署Puppet环境,但我不想把我们的控制回购到GitHub中,而且我目前没有本地的GitLab服务器。 我已经尝试使用以下来源节: :sources: mysource: basedir: /tmp/puppet-test/environments prefix: false remote: /srv/git/control.repo 当我运行r10k deploy display我得到正确的值显示,但没有环境。 我在回购中有两个分支,不过,都是使用Puppetfiles和其余的。 R10k能够使用通过文件访问的远程工作吗? 我需要预先安装一个文件://scheme吗?
我在Vagrant VM中开发Puppet清单。 我想configuration一个SSL终止的networking服务器,但显然,当节点只在我的笔记本电脑上运行时,我们的encryptionvalidation将失败。 有没有一种很好的方式来configurationPuppet使用真正的Let's Encrypt只在真实的服务器上,并在开发环境中生成一个自签名证书? Let's Encrypt服务器可能使用自签名CA授予所有请求的假实现?
在puppet中,我试图用cron资源创build一个定义的资源。 这是一个网站,有一个批量的工作,必须在某些日子上运行。 define website ( $sitename, $sitealias, $document_root, $cronjobs, $cron_weekday, $cron_minute, $cron_hour, …一些其他的代码… cron { "${title}-batchjob": user => "apache", command => "cd ${document_root}/scripts && /usr/bin/php ./batch.php &> /dev/null", minute => "${cron_minute}", hour => "${cron_hour}", weekday => "${cron_weekday}", } ) 问题是,如果我想在多个日子里运行这个cron工作,比如星期二和星期四,我将不得不设置$ weekday ='2,4'。 但要做到这一点,cron资源将weekday参数定义为一个数组。 但是,如何将数组作为variables传递给已定义的资源? 如果我宣布这个细化资源如下: website { 'mysite': sitename => 'www.mysite.com', sitealias => 'mysite', document_root […]
我在一台RHEL5机器上安装了一台完全可用的补鞋机服务器。 这可以在裸机上部署新服务器,分区磁盘,使用LVM并根据需要创build尽可能多的虚拟机。 虚拟机也从皮匠服务器获取安装指令,configuration,yum库等。 这真的是退出,但下一步是通过这个机制提供一个完整的Zimbra服务器。 我的目标是让Zimbra在两台虚拟机上运行,一台用于邮件引擎,另一台用于Webmail界面(至less作为第一步)。 使用puppet部署和configuration整个系统的最佳方式是什么? 其理念是使用皮匠来实现机器的最小部署(包括裸机和虚拟化),并将每个configuration问题留给傀儡。 预先感谢任何人会给我一些结构化的信息和build议的话题
我开始使用Puppetconfiguration系统,并且在设置我的用户帐户时遇到问题。 在我们的CentOS 5.3服务器上,sudoers组是“wheel”,gid 10.在我们的Ubuntu 9.10服务器上,这个组是“sudo”,gid 27.我如何设置组帐户,这样两个组合才能得到正确的组,用户被添加到正确的组? 我试过把这个configuration分成os_vars.pp,virt_groups.pp和virt_users.pp。 os_vars.pp: class os_vars { case $operatingsystem { centos: { $os_admin_group = "wheel" $os_admin_group_gid = "10" } ubuntu: { $os_admin_group = "sudo" $os_admin_group_gid = "27" } } notice("in os_vars, admin group is: ${os_admin_group}, ${os_admin_group_gid}") } virt_groups.pp: class virt_groups { include os_vars notice("in virt_groups, admin group is: ${os_admin_group}, ${os_admin_group_gid}") @group […]
我仍然正在处理木偶,开始混淆基于Ruby的ERB系统的模板。 我一般不熟悉Ruby,有没有人知道ERB的备忘单,还是需要弄脏我的手,学习一些Ruby的基础知识?
我们环境中的主目录使用用户名的前两个字母散列。 例如,用户lars的主目录是/home/l/a/lars 。 我想使用木偶强制在用户主目录模式0700权限,但我不知道如何定位主目录。 基本上我想这样做: chmod 700 /home/*/*/* 在没有散列的情况下,这很容易(例如使用recurse和recurse recurselimit ),但散列让我寻找一个解决scheme。 更新 :我不想列举我们的用户在puppet(因为主目录是作为我们的帐户pipe理过程的一部分创build的)。 在思考这个问题的时候,我也变得更加混乱了。 即使我们的主目录没有被散列,我怎样才能让puppet在不影响顶层目录本身的情况下对目录的内容应用权限呢? 我正在想这样的事情: file { '/home: ensure => directory, mode => 0700, recurse => true, recurselimit => 1, } 但是这会将模式应用于/home及其直接内容。 /home/lars上的模式700正常。 /home模式700是一个大问题。 这甚至有可能吗?