我有一个Lift应用程序打包为WAR存档,必须在Jetty下部署.但是,我希望能够自动执行一些任务:
我正在使用SBT,我不知道这将与Puppet或类似的东西有多好.你会怎么做?
我们都知道Puppet和Chef是IT自动化领域的超级明星,它们是用Ruby开发的(尽管Chef 11服务器是在Erlang中重写的).
在我的工作环境中,一大群运营团队使用Python作为主要语言来开发操作工具或基本系统应用程序.
我想找到为什么Puppet和Chef都是用Ruby编写的?有什么好处?Ruby很好地支持DSL.Python可以做这样的事吗?
我刚刚开始使用puppet(和vagrant)为我们的团队设置开发环境,该团队由8个以上的开发人员组成,每个开发人员都有他们特定的bash配置等等.我已经安装了所有的软件.用于快速部署新开发虚拟机的系统,但我不确定以自动方式为每个特定用户设置开发环境的最佳方式(我们最终会有几个开发环境,编写一次会很方便)并完成).
例如,我想设置一个用户joe,从github克隆Joe的配置repo,然后在该github存储库中运行一个脚本来为Joe设置环境.关于Joe以及Jimmy,James,Julie,Jane,Jim,Jake和Jimbo如何做到这一点的任何建议?
如果有任何帮助,开发机器几乎肯定是ubuntu系统.
我对boxen(和puppet)完全不熟悉,我想在设置过程中提示用户输入密码.我需要加密输入并将其添加到配置文件中.
我将使用模板生成文件,但获取密码有点棘手,因为木偶在模板内执行代码时不会写入控制台.
我已经考虑过使用ruby或shell脚本来提示用户,然后将密码存储在环境变量中以便稍后在模板中使用,但我不知道这是否是最好或最安全的方法来执行此操作.
有什么建议?用boxen/puppet做这种事情是否有"最佳实践"?
我在两个节点上安装了puppet,服务器节点主机名为"uys0115",客户端节点主机名为"uys0119",服务器节点已经设置了客户机节点.当我执行commad:时puppet cert list --all,我们可以看到:
+ "uys0115" (24:55:95:77:8E:60:33:77:C8:D4:74:EA:01:21:BD:5A)
+ "uys0119" (86:53:1B:81:E5:4F:88:23:E8:34:E1:AB:03:D4:AE:7C)
Run Code Online (Sandbox Code Playgroud)
puppet主目录是/ etc/puppet /,我写了一个例子和文件组织如下:
/etc/puppet/--
|-/manifests/site.pp
|-/modules/test/--
|-/files/text.txt
|-/manifests/init.pp
|-/manifests/test.pp
Run Code Online (Sandbox Code Playgroud)
代码/etc/puppet/modules/test/manifests/test.pp是:
class test1 {
package { "bison":
ensure=>"installed",
}
exec { "puppet test":
command=>"/bin/touch /tmp/puppet-test",
}
file { "/tmp/test.txt":
ensure => "present",
source => "puppet:///modules/test/test.txt"
}
}
Run Code Online (Sandbox Code Playgroud)
而代码/etc/puppet/modules/test/manifests/init.pp就是import "*"; 和代码/etc/puppet/manifests/site.pp如下:
import "test"
node default {
include "test1"
}
Run Code Online (Sandbox Code Playgroud)
当我在客户端节点uys0119和exec命令puppet agent --test --server uys0115.它成功执行并在目录/ tmp /中创建了两个文件puppet-test和test.txt.在我执行命令的服务器节点中puppet apply site.pp,它也成功执行并创建了两个文件.但是,终端输出两条警告信息: …
我正在使用这个Apache2处理Puppet模块
https://forge.puppetlabs.com/puppetlabs/apache
当我执行以下代码时,它成功安装了虚拟主机,但它永远不会为Apache2启用PHP5模块.我该如何启用它?
class { 'apache':
mpm_module => 'prefork',
}
apache::vhost { 'mysite':
...
xyz
...
}
apache::mod { 'php5': }
Run Code Online (Sandbox Code Playgroud)
我还尝试用以下代码替换该行:
apache::mod { 'php': }
Run Code Online (Sandbox Code Playgroud)
但这没有帮助.php5模块没有启用.我必须通过运行手动启用它a2enmod php5.文档没有说明这一点.谢谢!
所以我正在尝试做一些看起来与" 通过augeas向XML根节点添加属性的问题"相同的问题,但是提供的答案对我不起作用.没有insert命令,我收到此错误消息(在puppet agent -t --debug --verbose模式下):
Debug: Augeas[context.xml](provider=augeas): /augeas/files/usr/share/tomcat/conf/context.xml/error/message = Failed to match
{ /#attribute/ }?({ /#text/ = /(\\]\\]\\]*[^]\001-\004<>][^]\001-\004<]*\\]|(\\][^]\001-\004<]|[^]\001-\004<][^]\001-\004<])[^]\001-\004<]*\\]|[^]\001-\004<]\\])(\\]\\]*[^]\001-\004<>][^]\001-\004<]*\\]|[^]\001-\004<][^]\001-\004<]*\\])*(\\]\\]*([^]\001-\004<>][^]\001-\004<]*|)|[^]\001-\004<][^]\001-\004<]*|)|\\]\\]\\]*([^]\001-\004<>][^]\001-\004<]*|)|(\\][^]\001-\004<]|[^]\001-\004<][^]\001-\004<])[^]\001-\004<]*|\\]|[^]\001-\004<]/ } | { /#comment/ = /([^\001-\004-]|-[^\001-\004-])*/ } | <<rec>> | { /[:A-Z_a-z][.0-:A-Z_a-z-]*/ = /#empty/ } | { /#pi/ })*
with tree
{ "#text" = "
" } { "#comment" = " Default set of monitored resources " } { "#text" = "
" } { "WatchedResource" } { "#text" = "
" } { "#comment" = " Uncomment …Run Code Online (Sandbox Code Playgroud) 我正在使用hiera 为我的节点分配类webserver或类dbserver.该webserver班仅包括了Apache和设置它的一些配置(如端口).显然我不想为每个节点复制这个配置,所以我把它放在common.yaml中.但是,我的common.yaml变大了,所以我想把它分开.我想有一个文件包含webserver角色的配置,另一个文件包含dbserver角色等.我想我的hiera.yaml看起来像这样:
:hierarchy:
- "fqdn/%{::fqdn}"
- "role/%{ROLE}"
- common
Run Code Online (Sandbox Code Playgroud)
当role文件夹将包含类似的文件webserver.yaml,appserver.yaml,dbserver.yaml.我已经看到各种博客帖子说解决方案是创建一个自定义的"角色"事实,但大多数人通过从代理节点上的文件(例如从/etc/role)加载该事实来实现这一点,这对我来说似乎打败了木偶点(我特意使用木偶,所以每次我希望它有一些新角色时我都不必登录每个节点并更改一些配置).
为了清楚起见,我不想编辑代理上的文件以使其工作,我希望使用主服务器上的配置完成所有操作.
我想我可能会有类似下面的内容并详尽地列出每个角色作为层次结构中的元素,但这似乎不可管理.
:hierarchy:
- "fqdn/%{::fqdn}"
- "webserver"
- "appserver"
- "dbserver"
- common
Run Code Online (Sandbox Code Playgroud)
有什么方法可以解决这个问题吗?
hiera.yaml
---
:hierarchy:
- node/%{host_fqdn}
- site_config/%{host_site_name}
- site_config/perf_%{host_performance_class}
- site_config/%{host_type}_v%{host_type_version}
- site/%{host_site_name}
- environments/%{site_environment}
- types/%{host_type}_v%{host_type_version}
- hosts
- sites
- users
- common
# options are native, deep, deeper
:merge_behavior: deeper
Run Code Online (Sandbox Code Playgroud)
我们目前有这个hiera配置.因此,配置按以下顺序合并:common.yaml> users.yaml> sites.yaml> hosts.yaml> types/xxx_vxxx.yaml>等.对于变量顶层次结构,仅当该文件存在时才会被覆盖.
例如:common.yaml
server:
instance_type: m3.medium
Run Code Online (Sandbox Code Playgroud)
site_config/mysite.yaml
server:
instance_type: m4.large
Run Code Online (Sandbox Code Playgroud)
因此对于所有其他站点,实例类型将是m3.medium,但仅对于mysite,它将是m4.large.
我怎样才能在Ansible中实现同样的目标?
我是puppet的新手,在学习puppet课程时,我发现一个人使用'puppet agent -t'命令配置代理节点,而在另一门课程中,讲师使用'puppet apply'命令。
这两个命令有什么区别?