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、python 或 ruby。 |
通知 | 通知和订阅通知可用于任何资源。 |
相对路径 | #{ENV['HOME']} 相对路径可用于任何资源。 |
Windows 文件安全 | template、file、remote_file、cookbook_file、directory 和 remote_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_if 和 only_if 来保护此资源的幂等性。
bff_package
使用 bff_package 资源通过 installp 实用程序管理 AIX 平台的软件包。从本地文件安装包时,必须使用 remote_file 或 cookbook_file 资源 将其添加到节点。
chef_gem
使用 chef_gem 资源仅为 Chef-Client 专用的 Ruby 实例安装 gem。从本地文件安装 gem 时,必须使用 remote_file 或 cookbook_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_file 或 cookbook_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_if 和 only_if 保护此资源以实现幂等性。
File
使用 file 资源直接在节点上管理文件。
freebsd_package
使用 freebsd_package 资源管理 FreeBSD 平台的软件包。
gem_package
使用 gem_package 资源管理仅包含在Kitchen(配方)中的 gem 软件包。从本地文件安装软件包时,必须使用 remote_file 或 cookbook_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 从命令行运行时所做的那样。这允许使用各种选项来安装软件包,例如最低版本、虚拟提供和库名称。