【问题标题】:sed command using chef使用厨师的 sed 命令
【发布时间】:2014-09-29 02:58:54
【问题描述】:

您好,我在厨师食谱中使用 sed 命令,但它抛出错误。但是如果我只在 CLI 上运行 sed 命令,它就可以工作。任何帮助表示赞赏。

我的 sed 命令是 -

sed -i -e "/<BigSQL>/,/<\/BigSQL>/ s|<username>[0-9a-z.]\{1,\}</username>|<username>bigsql</username>|" /home/biadmin/install.xml

我的厨师食谱是-

bash "change_bigsqluser" do
user "root"
code <<-EOH
sed -i -e "/<BigSQL>/,/<\/BigSQL>/ s|<username>[0-9a-z.]\{1,\}</username>|<username>bigsql</username>|" /home/biadmin/install.xml
EOH
end

这是错误

Error executing action `run` on resource 'bash[change_bigsqluser]'
================================================================================


Mixlib::ShellOut::ShellCommandFailed
------------------------------------
Expected process to exit with [0], but received '1'
---- Begin output of "bash"  "/tmp/chef-script20140807-4025602-160wvt2" ----
STDOUT:
STDERR: sed: -e expression #1, char 15: unknown command: `B'
---- End output of "bash"  "/tmp/chef-script20140807-4025602-160wvt2" ----
Ran "bash"  "/tmp/chef-script20140807-4025602-160wvt2" returned 1


Resource Declaration:
---------------------
# In /var/chef/cache/cookbooks/biginsights/recipes/temp.rb

 22: bash "change_bigsqluser" do
 23: user "root"
 24: code <<-EOH
 25: sed -i -e "/<BigSQL>/,/<\/BigSQL>/ s|<username>[0-9a-z.]\{1,\}</username>|<username>bigsql</username>|" /home/biadmin/install.xml
 26: EOH
 27: end



Compiled Resource:
------------------
# Declared in /var/chef/cache/cookbooks/biginsights/recipes/temp.rb:22:in `from_file'

bash("change_bigsqluser") do
  action "run"
  retries 0
  retry_delay 2
  guard_interpreter :default
  command "\"bash\"  \"/tmp/chef-script20140807-4025602-160wvt2\""
  backup 5
  returns 0
  user "root"
  code "sed -i -e \"/<BigSQL>/,/</BigSQL>/ s|<username>[0-9a-z.]{1,}</username>|<username>bigsql</username>|\" /home/biadmin/install.xml\n"
  interpreter "bash"
  cookbook_name "biginsights"
  recipe_name "temp"
end



[2014-08-07T04:25:49-07:00] INFO: Running queued delayed notifications before re-raising exception

Running handlers:
[2014-08-07T04:25:49-07:00] ERROR: Running exception handlers
Running handlers complete

[2014-08-07T04:25:49-07:00] ERROR: Exception handlers complete
[2014-08-07T04:25:49-07:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
Chef Client failed. 0 resources updated in 7.374318882 seconds
[2014-08-07T04:25:49-07:00] ERROR: bash[change_bigsqluser] (biginsights::temp line 22) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of "bash"  "/tmp/chef-script20140807-4025602-160wvt2" ----
STDOUT:
STDERR: sed: -e expression #1, char 15: unknown command: `B'
---- End output of "bash"  "/tmp/chef-script20140807-4025602-160wvt2" ----
Ran "bash"  "/tmp/chef-script20140807-4025602-160wvt2" returned 1
[2014-08-07T04:25:49-07:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)

【问题讨论】:

  • “它的抛出错误” - 什么错误?如果您自己不理解问题,请务必在问题中包含可能有助于其他人理解问题的详细信息。
  • 它抛出了什么错误?

标签: xml linux sed chef-infra


【解决方案1】:

自从这是谷歌的第一个结果以来,我想我已经提供了一个完整的答案。

如果你查看编译后的资源,代码的开头是这样的:

sed -i -e \"/<BigSQL>/,/</BigSQL>/

问题在于转义。只需将:code &lt;&lt;-EOH 更改为 code &lt;&lt;-'EOH'

bash "change_bigsqluser" do
user "root"
code <<-'EOH'
sed -i -e "/<BigSQL>/,/<\/BigSQL>/ s|<username>[0-9a-z.]\{1,\}</username>|<username>bigsql</username>|" /home/biadmin/install.xml
EOH
end

【讨论】:

    【解决方案2】:

    由于您只执行一个命令并且没有使用任何 bash 功能,我将使用 execute 资源:

    execute "Do some sed" do
        command "sed -i '/<BigSQL>/,/</BigSQL>/ s|<username>[0-9a-z.]{1,}</username>|<username>bigsql</username>|' /home/biadmin/install.xml"
        action :run
    end
    

    【讨论】:

    • 嗨 hek2mgl ,我也已经这样做了。在执行目标中运行相同的命令,但它也抛出相同的错误。
    • 如果它抛出 same 错误,似乎它实际上正在执行旧版本的配方。您能否再次引导主机或至少清理厨师缓存并检查它是否正常工作?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多