Chef - 资源

Chef 资源代表操作系统处于其期望状态的一部分。它是配置策略的声明,描述了希望使用资源提供程序将当前配置带到的节点的期望状态。它有助于使用 Chef 的 Ohai 机制了解目标机器的当前状态。它还有助于定义使目标机器进入该状态所需执行的步骤。资源按描述工作配置的Kitchen(配方)分组。

对于 Chef,chef::Platform 映射每个节点的提供程序和平台版本。在每次 Chef 客户端运行开始时,Chef 服务器都会收集任何机器当前状态的详细信息。稍后,Chef 服务器使用这些值来识别正确的提供程序。

资源语法

type 'name' do 
   attribute 'value' 
   action :type_of_action 
end

在上述语法中,"type"是资源类型,"name"是我们要使用的名称。在"do"和"end"块中,我们有该资源的属性以及我们需要对该特定资源采取的操作。

我们在Kitchen(配方)中使用的每个资源都有自己的一组操作,这些操作在"do"和"end"块内定义。

示例

type 'name' do 
   attribute 'value' 
   action :type_of_action 
end 

所有资源都共享一组通用的功能、操作、属性、条件执行、通知和相关操作路径。

操作 :nothing 操作可用于任何资源或自定义资源。
属性 ignore_failure、provider、retries、retry_delay 和 supports 属性可用于任何资源或自定义资源。
保护 not_if 和 only_if 条件执行可用于在某些资源周围放置额外的保护,以便它们仅在条件满足时运行满足。
Guard 解释器 使用基于 脚本 的资源评估字符串命令:bash、csh、perl、powershell_script、pythonruby
通知 通知和订阅通知可用于任何资源。
相对路径 #{ENV['HOME']} 相对路径可用于任何资源。
Windows 文件安全 template、file、remote_file、cookbook_file、directoryremote_directory 资源支持在Kitchen(配方)中使用继承和访问控制列表 (ACL)。
在编译阶段运行 有时,某个资源需要在所有其他资源之前运行,或者在所有资源添加到资源集合之后运行。

可用资源

apt_package

使用 apt_package 资源管理 Debian 和 Ubuntu 平台的软件包。

Bash

使用 bash 资源通过 Bash 解释器执行脚本。此资源还可以使用 execute 资源可用的任何操作和属性。使用此资源执行的命令(本质上)不是幂等的,因为它们通常是运行环境所特有的。使用 not_if 和 only_if 保护此资源的幂等性。

Batch

使用 batch 资源通过 cmd.exe 解释器执行批处理脚本。 batch 资源创建并执行临时文件(类似于 script 资源的行为方式),而不是内联运行命令。

此资源从 execute 资源继承操作(:run 和 :nothing)和属性(creates、cwd、environment、group、path、timeout 和 user)。使用此资源执行的命令(本质上)不是幂等的,因为它们通常对于运行它们的环境是唯一的。使用 not_ifonly_if 来保护此资源的幂等性。

bff_package

使用 bff_package 资源通过 installp 实用程序管理 AIX 平台的软件包。从本地文件安装包时,必须使用 remote_filecookbook_file 资源 将其添加到节点。

chef_gem

使用 chef_gem 资源仅为 Chef-Client 专用的 Ruby 实例安装 gem。从本地文件安装 gem 时,必须使用 remote_filecookbook_file 资源将其添加到节点。

chef_gem 资源与 gem_package 资源具有相同的属性和选项,但不接受 gem_binary 属性,因为它始终使用 Chef-Client 正在运行的 CurrentGemEnvironment。除了执行与 gem_package 资源类似的操作外,chef_gem 资源还执行上述操作。

cookbook_file

使用 cookbook_file 资源将文件从 COOKBOOK_NAME/files/ 的子​​目录传输到运行 ChefClient 的主机上的指定路径。

根据文件特异性选择文件,这允许根据主机名、主机平台(操作系统、发行版或视情况而定)或平台版本使用不同的源文件。位于 COOKBOOK_NAME/files/default 子目录中的文件可在任何平台上使用。

Cron

使用 cron 资源管理基于时间的作业调度的 cron 条目。如果未提供,则计划的属性将默认为 *。 cron 资源需要访问 crontab 程序,通常是 cron。

Csh

使用 csh 资源通过 csh 解释器执行脚本。此资源还可以使用执行资源可用的任何操作和属性。

使用此资源执行的命令(本质上)不是幂等的,因为它们通常是运行环境所特有的。使用 not_if 和 only_if 保护此资源的幂等性。

Deploy

使用 Deploy 资源来管理和控制部署。这是一种常用的资源,但也很复杂,具有最多的属性、多个提供程序、回调的复杂性,以及四个支持从Kitchen(配方)内部修改布局的属性。

Directory

使用 Directory 资源来管理目录,目录是包含计算机上存储的所有信息的文件夹层次结构。根目录是顶层,目录的其余部分都组织在其下。

目录 资源使用 name 属性来指定目录中某个位置的路径。通常,需要访问目录中该位置的权限。

dpkg_package

使用 dpkg_package 资源来管理 dpkg 平台的包。从本地文件安装包时,必须使用 remote_filecookbook_file 资源将其添加到节点。

easy_install_package

使用 easy_install_package 资源管理 Python 平台的包。

Env

使用 env 资源管理 Microsoft Windows 中的环境密钥。设置环境密钥后,必须重新启动 Microsoft Windows,然后任务计划程序才能使用该环境密钥。

erl_call

使用 erl_call 资源连接到分布式 Erlang 系统内的节点。使用此资源执行的命令(就其性质而言)不是幂等的,因为它们通常对于运行它们的环境是唯一的。使用 not_if 和 only_if 来保护此资源的幂等性。

执行

使用 execute 资源执行单个命令。使用此资源执行的命令(就其性质而言)不是幂等的,因为它们通常对于运行它们的环境是唯一的。使用 not_ifonly_if 保护此资源以实现幂等性。

File

使用 file 资源直接在节点上管理文件。

freebsd_package

使用 freebsd_package 资源管理 FreeBSD 平台的软件包。

gem_package

使用 gem_package 资源管理仅包含在Kitchen(配方)中的 gem 软件包。从本地文件安装软件包时,必须使用 remote_filecookbook_file 资源将其添加到节点。

Git

使用 git 资源管理 git 存储库中存在的源代码控制资源。需要 git 版本 1.6.5(或更高版本)才能使用 git 资源中的所有功能。

Group

使用 group 资源管理本地组。

homebrew_package

使用 homebrew_package 资源管理 Mac OS X 平台的软件包。

http_request

使用 http_request 资源发送带有任意消息的 HTTP 请求(GET、PUT、POST、DELETE、HEAD 或 OPTIONS)。当需要自定义回调时,此资源通常很有用。

Ifconfig

使用 ifconfig 资源管理接口。

ips_package

使用 ips_package 资源管理 Solaris 11 平台上的软件包(使用映像打包系统 (IPS))。

Ksh

使用 ksh 资源通过 Korn shell (ksh) 解释器执行脚本。此资源还可以使用执行资源可用的任何操作和属性。

使用此资源执行的命令(本质上)不是幂等的,因为它们通常是运行它们的环境所独有的。使用 not_if 和 only_if 来保护此资源以实现幂等性。

Link

使用 link 资源创建符号或硬链接。

Log

使用 log 资源创建日志条目。日志资源的行为与其他资源一样:在编译阶段内置于资源集合中,然后在执行阶段运行。(要创建未内置于资源集合中的日志条目,请使用 Chef::Log 而不是日志资源)

macports_package

使用 macports_package 资源管理 Mac OS X 平台的软件包。

Mdadm

使用 mdadm 资源通过 mdadm 实用程序管理 Linux 环境中的 RAID 设备。 mdadm 提供程序将创建并组装一个阵列,但它不会创建用于在重新启动时保留该阵列的配置文件。

如果需要配置文件,则必须通过指定具有正确阵列布局的模板来完成,然后使用挂载提供程序创建文件系统表 (fstab) 条目。

Mount

使用挂载资源管理已挂载的文件系统。

Ohai

使用 ohai 资源在节点上重新加载 Ohai 配置。这允许更改系统属性的Kitchen(配方)(例如添加用户的Kitchen(配方))稍后在 chef-client 运行期间引用这些属性。

Package

使用 package 资源管理软件包。当软件包从本地文件安装时(例如使用 RubyGems、dpkg 或 RPM 软件包管理器),必须使用 remote_file 或 cookbook_file 资源将该文件添加到节点。

pacman_package

使用 pacman_package 资源在 Arch Linux 平台上管理软件包(使用 pacman)。

powershell_script

使用 powershell_script 资源通过 Windows PowerShell 解释器执行脚本,就像使用脚本和基于脚本的资源(bash、csh、perl、python 和 ruby​​)一样。 powershell_script 特定于 Microsoft Windows 平台和 Windows PowerShell 解释器。

Python

使用 python 资源通过 Python 解释器执行脚本。此资源还可以使用执行资源可用的任何操作和属性。

使用此资源执行的命令(本质上)不是幂等的,因为它们通常对于运行它们的环境是唯一的。使用 not_if 和 only_if 来保护此资源的幂等性。

reboot

使用 reboot 资源重新启动节点,这是某些平台上某些安装的必要步骤。此资源支持在 Microsoft Windows、Mac OS X 和 Linux 平台上使用。

registry_key

使用 registry_key 资源在 Microsoft Windows 中创建和删除注册表项。

remote_directory

使用 remote_directory 资源将目录从 cookbook 逐步传输到节点。从 cookbook 复制的目录应位于 COOKBOOK_NAME/files/default/REMOTE_DIRECTORY 下。

remote_directory 资源将遵循文件特定性。

remote_file

使用 remote_file 资源通过文件特定性从远程位置传输文件。此资源与文件资源类似。

Route

使用路由资源管理 Linux 环境中的系统路由表。

rpm_package

使用 rpm_package 资源管理 RPM 包管理器平台的包。

Ruby

使用 ruby 资源通过 Ruby 解释器执行脚本。此资源还可以使用执行资源可用的任何操作和属性。

使用此资源执行的命令(本质上)不是幂等的,因为它们通常是运行环境所独有的。使用 not_if 和 only_if 来保护此资源的幂等性。

ruby_block

使用 ruby_block 资源在 Chef-Client 运行期间执行 Ruby 代码。ruby_block 资源中的 Ruby 代码在收敛期间与其他资源一起评估,而 ruby​​_block 资源之外的 Ruby 代码则在编译Kitchen(配方)时先于其他资源进行评估。

脚本

使用脚本资源通过指定的解释器(例如 Bash、csh、Perl、Python 或 Ruby)执行脚本。此资源还可以使用执行资源可用的任何操作和属性。

使用此资源执行的命令(就其性质而言)不是幂等的,因为它们通常是运行环境所特有的。使用 not_if 和 only_if 来保护此资源以实现幂等性。

service

使用 service 资源来管理服务。

smart_os_package

使用 smartos_package 资源来管理 SmartOS 平台的软件包。

solaris_package

solaris_package 资源用于管理 Solaris 平台的软件包。

Subversion

使用 subversion 资源来管理 Subversion 存储库中存在的源代码控制资源。

template

使用 template 资源通过从子目录传输文件,使用嵌入式 Ruby (ERB) 模板来管理文件的内容COOKBOOK_NAME/templates/ 到运行 Chef-Client 的主机上的指定路径。此资源包括来自文件资源的操作和属性。模板资源管理的模板文件遵循与 remote_file 和 file 资源相同的文件特定性规则。

User

使用 User 资源添加用户、更新现有用户、删除用户以及锁定/解锁用户密码。

windows_package

使用 windows_package 资源管理 Microsoft Windows 平台的 Microsoft Installer Package (MSI) 软件包。

windows_service

使用 windows_service 资源管理 Microsoft Windows 平台上的服务。

yum_package

使用 yum_package 资源使用 Yum 安装、升级和删除 Red Hat 和 CentOS 平台的软件包。 yum_package 资源能够解析软件包的提供数据,就像 Yum 从命令行运行时所做的那样。这允许使用各种选项来安装软件包,例如最低版本、虚拟提供和库名称。