厨师用Ohai插件而不是bash脚本

时间:2018-01-08 18:08:41

标签: ruby chef

在Chef中,我需要发现所有正在运行的实例。为此,我用bash脚本创建了ruby块,这是有效的。但是有人告诉我,这项工作应该在没有使用shell脚本的情况下使用Ohai插件完成。有人可以提供一些提示,如何使用Ruby和Ohai插件实现这一点,因为我对此一无所知。下面你可以看到bash脚本部分。

#!/bin/bash
result=$(ps -ef|grep "mysqld"|grep -v grep|awk '{print $8}')
if [ -z "${result}" ] ; then
  echo "no_instances"
  exit 0
else
  OIFS=$IFS
  IFS=$'\n'
  for i in $(ps -ef|grep "mysqld"|grep -v grep);  do
    if [[ $(`echo $i|awk '{print $8}'` --version) == *"MariaDB"* ]]; then
      instance=$(echo $i|awk '{print $1}')
      getent passwd ${instance} |cut -d':' -f1
    fi
  done
  IFS=$OIFS
fi

我已经在ruby中编辑了我的代码,但我怀疑通过这种方式我可以在Ohai插件下添加它。你能建议吗?

result = `ps -ef|grep "mysqld"|grep -v grep|awk '{print $1 , $8}'`
if result and result != ""
  result.each do |line|
    cmd = `#{line.split(" ")[1].chomp + " --version\n"}`
    if cmd != "" and cmd.include? "MariaDB"
      print `getent passwd #{line.split("/")[0]} |cut -d':' -f1`
    end
  end
else
  exit
end

我试着写一下Ohai插件,如果有人可以调查并提出错误或如何调整它,那将会很棒:

Ohai.plugin(:Mariadb_instances) do

  provides 'Mariadb_instances'

  collect_data(:linux) do
    Mariadb_instances Mash.new
    result = `ps -ef|grep "mysqld"|grep -v grep|awk '{print $1 , $8}'`
    if result and result != ""
      result.each do |entry|
        cmd = `#{entry.split(" ")[1].chomp + " --version\n"}`
        if cmd != "" and cmd.include? "MariaDB"
         Mariadb_instances[`hostname`] = `getent passwd #{entry.split("/")[0]} |cut -d':' -f1`  # [`hostname`] can be removed if chef provides it by default
        end
      end
    else
      Chef::Log.debug("MariaDB is not found")
    end
  end  
end

0 个答案:

没有答案