【问题标题】:Excecuting shell script from chef recipe从厨师食谱执行shell脚本
【发布时间】:2017-03-22 03:28:29
【问题描述】:

我必须根据我必须从 ubuntu 节点获得的结果从配方中执行一个脚本。我必须让代理的版本运行,并在此基础上执行脚本。以下是我正在运行的配方中的条件。

notifies :run, 'bash[uninstall CloudPassage]', :immediate
only_if { Mixlib::ShellOut.new("dpkg -s cphalo | grep Version | awk '{print $2}'" -lt "3.9.5").run_command.success? }

但它给出了一个语法。谁能帮我从 ubuntu 节点获取版本号的语法。

语法错误:

FATAL: Cookbook file recipes/default.rb has a ruby syntax error:
FATAL: /home/ubuntu/chef-repo/cookbooks/cloudPassage/recipes/default.rb:27:syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('
FATAL: ...rsion | awk '{print $2}'" -lt "3.9.5").run_command.success? }
FATAL: ...                               ^
FATAL: /home/ubuntu/chef-repo/cookbooks/cloudPassage/recipes/default.rb:27: syntax error, unexpected ')', expecting '}'
FATAL: ... awk '{print $2}'" -lt "3.9.5").run_command.success? }
FATAL: ...  

【问题讨论】:

    标签: ruby shell chef-infra chef-recipe


    【解决方案1】:

    正确的写法:

    only_if { Gem::Requirement.create('< 3.9.5').satisfied_by?(Gem::Version.create(shell_out!('dpkg -s cphalo').stdout[/^Version: (.*)$/, 1])) }
    

    或者类似的东西。

    【讨论】:

      【解决方案2】:

      此脚本检查 cphalo 版本是否小于 (-lt ) 3.9.5

      • 得到cphaloVersion 的行:

         "dpkg -s cphalo | grep Version" 
        
      • 然后管道awk并打印第二个字段($2

         | awk '{print $2}'" 
        
      • 结果与"3.9.5" 进行比较,感谢-lt

         ">result<" -lt "3.9.5"
        

      返回 truefalse

      但是你不能像使用内部双引号那样破坏你的字符串。试试下面的:

      " $(dpkg -s cphalo | grep Version | awk '{print $2}') -lt 3.9.5 "
      

      或者如果需要方括号:

      " [ $(dpkg -s cphalo | grep Version | awk '{print $2}') -lt 3.9.5 ] "
      

      【讨论】:

      • 我已经写了条件,但是条件给出了厨师食谱的语法错误。
      • 食谱已上传,但厨师客户端在节点中失败,我的 only_if 块中是否有任何错误??
      • 两种解决方案都试过了吗?如果y.x 小于a.b[ y.x -lt a.b ] 会说0
      • 可能会出现另一条消息失败?在服务器上运行 shell 命令会得到什么?
      • 好吧,我对食谱了解不多……[ 3.9.5 -lt 3.9.5 ] 适用于标准外壳。至少 语法错误 是固定的。
      猜你喜欢
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多