较旧版本的食谱安装了一个我不再需要在我的系统上的软件包。我的理解是,chef 没有一种直接的方法来明确删除一个包,所以我使用了以下的钝锤execute:
execute "Remove nasty perl gearman-server" do
command "apt-get -y remove gearman-server"
ignore_failure true
end
Run Code Online (Sandbox Code Playgroud)
但这失败了,我猜是因为厨师本身对 dpkg 有锁定?
STDERR: E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
Run Code Online (Sandbox Code Playgroud)
我怎样才能以编程方式确保这个包不再在我的机器上?如果不清楚,我对仅限 ubuntu 的解决方案非常满意。
Chef、Puppet 等是否能够指向现有的 Linux 服务器并吸收 100% 构建服务器操作系统/包版本/自定义文件/等所需的“东西”,包括构建顺序?
(我猜不是,但相信我是从去年听到的一个演讲中相信这一点的。)
我有一个 EC2 和 Digital Ocean 服务器,我想在本地重新创建它们(相同的配置文件和所有内容)。本地我的意思是虚拟盒子(流浪者)。
我一开始是和 Chef 一起管理它们的,但不得不暂时解决这个问题(时间紧迫)。我的厨师食谱不再与服务器同步。
有什么办法可以对这个进行逆向工程吗?我尝试了蓝图,但无法正确安装应用程序。
DevOps 工具生态系统让我感到困惑。服务器编排/管理空间中的每个人都在使用自己的专有格式,而不是在任何地方都可以使用的 shell 脚本。Ansible 有他们的 YAML 剧本,Puppet 有它的类/图语言,salt like ansible 有某种 YAML 格式,chef 是一个嵌入式 Ruby DSL。在所有这些方法中,我最喜欢厨师,因为它可以做最简单的事情。所以我想,当您使用这些工具之一时,一个好处是可以更好地了解队列,但这与实际配置和供应组件正交。
我不太明白为什么每个人都试图用 YAML 重新发明 shell 脚本,因为通常ssh -t我需要用一些 shell 脚本库来完成工作。这些脚本通常打包为独立的 tar 文件,并且小而简单,可以根据需要进行混合和匹配。除了bash几乎可以在任何地方工作之外,它们具有零依赖性。那么为什么像这样的简单解决方案对于 ansible、puppet、chef 等来说还不够好?通过用bash其他格式替换脚本,所有这些解决方案有什么好处?
我正在尝试在包含的文件中使用局部变量。我收到未定义的错误。我不确定有什么方法可以做到这一点,是吗?我有一个配方文件夹:
recipes/
development.rb
testing.rb
config.rb
Run Code Online (Sandbox Code Playgroud)
发展.rb
username = "vagrant"
static = []
django = ["project1", "project2"]
include_recipe "server::config" # <-- Trying to use static and django in there.
Run Code Online (Sandbox Code Playgroud)
配置文件
static.each do |vhost| # <-- How do I get the "static" var in here?
...
end
django.each do |vhost| # <-- How do I get the "django" var in here?
...
end
Run Code Online (Sandbox Code Playgroud) 我已经安装了 Oracle VM 并在其上安装了 Centos-71。我正在通过 vigrant 用户登录 centos,并且在使用 Chef 配置它时也设置了密码。有没有办法解密root的密码?