配置管理101:编写厨师食谱weixin0010034

在之前的指南中,我们讨论了为服务器基础架构实施配置管理策略的主要好处、配置管理工具的工作原理以及这些工具通常具有的共同点。

本系列的这一部分将引导您完成使用Chef自动化服务器配置的过程,Chef是一个强大的配置管理工具,它利用Ruby编程语言来自动化基础设施管理和配置。我们将专注于创建简化示例所需的语言术语、语法和功能,以使用Apache完全自动化部署Ubuntu18.04Web服务器。

这是我们需要自动化以实现目标的步骤列表:

1.更新apt缓存

2.安装阿帕奇

3.创建自定义文档根目录

4.在自定义文档根目录下放置一个index.html文件

6.重启阿帕奇

注意:本指南旨在向您介绍Chef语言以及如何编写食谱以自动化您的服务器配置。有关Chef的更多介绍性视图,包括安装和开始使用此工具所需的步骤,请参阅Chef的官方文档。

##GettingStarted在我们更深入地了解Chef之前,我们必须熟悉此工具引入的重要术语和概念。###厨师条款

###Recipe格式厨师食谱是使用Ruby编写的。配方基本上是资源定义的集合,这些定义将创建由节点执行的逐步指令集。这些资源定义可以与Ruby代码混合使用,以获得更大的灵活性和模块化。

您可以在下面找到一个简单的配方示例,该配方将运行apt-getupdate并在之后安装vim:

execute"apt-getupdate"docommand"apt-getupdate"endapt_package"vim"doaction:installend##WritingRecipes###WorkingwithVariables局部变量可以在recipes中定义为常规的Ruby局部变量。下面的示例显示了如何创建稍后在资源定义中使用的局部变量:

package="vim"apt_packagepackagedoaction:installend但是,这些变量的范围有限,仅在定义它们的文件内有效。如果您想创建一个变量并使其全局可用,以便您可以从任何食谱或食谱中使用它,您需要定义一个自定义属性。

####UsingAttributes属性表示节点的详细信息。Chef具有自动属性,这些属性由名为Ohai的工具收集并包含有关系统的信息(例如平台、主机名和默认IP地址),但它也允许您定义自己的自定义属性。

属性具有不同的优先级,由您创建的属性类型定义。default属性是最常见的选择,因为它们仍然可以在需要时被其他属性类型覆盖。

以下示例显示了使用default节点属性而不是局部变量的前一个示例的外观:

node.default['main']['package']="vim"apt_packagenode['main']['package']doaction:installend在这个例子中有两个细节需要观察:

定义节点变量时的推荐做法是使用当前使用的说明书作为键将它们组织为散列。在本例中,我们使用了main,因为我们有一本同名的食谱。如果您正在使用可能具有相似命名属性的多个说明书,这可以避免混淆。请注意,我们在定义属性时使用了node.default,但是在稍后访问其值时,我们直接使用了node。node.default用法定义我们正在创建一个类型为default的属性。此属性的值可能会被具有更高优先级的其他类型覆盖,例如normal或override属性。

属性的优先级一开始可能会有点混乱,但经过一些练习后你会习惯的。为了说明该行为,请考虑以下示例:

node.normal['main']['package']="vim"node.override['main']['package']="git"node.default['main']['package']="curl"apt_packagenode['main']['package']doaction:installend你知道在这种情况下会安装哪个包吗如果你猜到了git,那么你猜对了。无论定义属性的顺序如何,类型override的较高优先级将使node['main']['package']beevaluatedtogit`。###UsingLoops循环通常用于使用不同的输入值重复任务。例如,不是为安装10个不同的包创建10个任务,您可以创建一个任务并使用循环对要安装的所有不同包重复该任务。

Chef支持所有Ruby循环结构,用于在配方中创建循环。对于简单的使用,each是一个常见的选择:

['vim','git','curl'].eachdo|package|apt_packagepackagedoaction:installendend除了使用内联数组,您还可以创建一个变量或属性来定义要在循环内使用的参数。这将使事情更有条理,更容易阅读。下面,同样的例子现在使用一个局部变量来定义应该安装的包:

packages=['vim','git','curl']packages.eachdo|package|apt_packagepackagedoaction:installendend###UsingConditionals条件可用于动态决定是否应该执行代码块,例如,基于变量或命令的输出。

Chef支持所有Ruby条件语句,用于在配方中创建条件语句。此外,所有资源类型都支持两个特殊属性,它们将在决定是否执行任务之前评估表达式:if_only和not_if。

下面的示例将在尝试安装扩展程序php-pear之前检查php的存在。它将使用命令which来验证当前系统上是否安装了php可执行文件。如果命令whichphp返回false,则不会执行此任务:

apt_package"php-pear"doaction:installonly_if"whichphp"end如果我们想反其道而行之,始终执行命令除了当条件评估为真时,我们使用not_if代替。除非系统是CentOS,否则此示例将安装php5:

apt_package"php5"doaction:installnot_if{node['platform']=='centos'}end为了执行更复杂的评估,如果您想在特定条件下执行多个任务,您可以使用任何标准的Ruby条件。以下示例仅在系统为Debian或Ubuntu时执行apt-getupdate:

ifnode['platform']=='debian'||node['platform']=='ubuntu'execute"apt-getupdate"docommand"apt-getupdate"endend属性node['platform']是Chef的自动属性。最后一个例子只是为了演示一个更复杂的条件构造,但是它可以被一个使用自动属性node['platform_family']的简单测试代替,这对于Debian和Ubuntu系统都将返回“debian”。<###WorkingwithTemplates模板是通常用于设置配置文件,允许使用旨在使这些文件更加通用和可重用的变量和其他功能。

Chef使用EmbeddedRuby(ERB)模板,这与Puppet使用的格式相同。它们支持条件、循环和其他Ruby特性。

下面是一个用于设置Apache虚拟主机的ERB模板示例,使用变量来定义该主机的文档根目录:

ServerAdminwebmaster@localhostDocumentRoot<%=@doc_root%>>AllowOverrideAllRequireallgranted为了应用模板,我们需要创建一个template资源。这是应用此模板替换默认Apache虚拟主机的方式:

template"/etc/apache2/sites-available/000-default.conf"dosource"vhost.erb"variables({:doc_root=>node['main']['doc_root']})action:createendChef在处理本地文件时做了一些假设,以加强组织和模块化。在这种情况下,Chef将在templates文件夹中查找vhost.erb模板文件,该文件夹应位于此食谱所在的同一本食谱中。

与迄今为止我们看到的其他配置管理工具不同,Chef对变量有更严格的范围。这意味着在定义template资源时,您必须明确提供您计划在模板中使用的任何变量。在这个例子中,我们使用variables方法来传递我们在虚拟主机模板中需要的doc_root属性。###Defining和触发服务服务资源用于确保服务已初始化和启用。它们还用于触发服务重启。

让我们考虑一下我们之前的模板使用示例,我们在其中设置了一个Apache虚拟主机。如果您想确保Apache在虚拟主机更改后重新启动,您首先需要为Apache服务创建一个service资源。这是在Chef中定义此类资源的方式:

service"apache2"doaction[:enable,:start]end现在,在定义template资源时,您需要包含一个notify选项以触发重新启动:

template"/etc/apache2/sites-available/000-default.conf"dosource"vhost.erb"variables({:doc_root=>node['main']['doc_root']})action:createnotifies:restart,resources(:service=>"apache2")end##ExampleRecipe现在让我们看一下在Ubuntu14.04系统中自动安装ApacheWeb服务器的方法,如本指南的介绍中所述。

您可以在下面找到完整的食谱:

node.default['main']['doc_root']="/vagrant/web"execute"apt-getupdate"docommand"apt-getupdate"endapt_package"apache2"doaction:installendservice"apache2"doaction[:enable,:start]enddirectorynode['main']['doc_root']doowner'www-data'group'www-data'mode'0644'action:createendcookbook_file"#{node['main']['doc_root']}/index.html"dosource'index.html'owner'www-data'group'www-data'action:createendtemplate"/etc/apache2/sites-available/000-default.conf"dosource"vhost.erb"variables({:doc_root=>node['main']['doc_root']})action:createnotifies:restart,resources(:service=>"apache2")end###食谱解释

####line1配方以属性定义开始,node['main']['doc_root']。我们可以在这里使用一个简单的局部变量,但是在大多数用例场景中,配方需要定义将从包含的配方中使用的全局变量或其他文件。对于这些情况,有必要创建属性而不是局部变量,因为后者的范围有限。

####lines3-5这个execute资源运行apt-getupdate。

####lines7-10这个apt_package资源安装包apache2。

####lines12-15这个service资源启用并启动服务apache2。稍后,我们需要通知此资源以重新启动服务。重要的是,服务定义位于任何尝试通知服务的资源之前,否则您将收到错误消息。

####lines17-22这个directory资源使用自定义属性node['main']['doc_root']定义的值来创建一个目录,作为我们的documentroot。

####lines24-29cookbook_file资源用于将本地文件复制到远程服务器。该资源将复制我们的index.html文件并将其放置在我们在之前的任务中创建的文档根目录中。

####lines31-36最后,这个template资源应用我们的Apache虚拟主机模板并通知服务apache2重新启动。

##ConclusionChef是一个强大的配置管理工具,它利用Ruby语言来自动化服务器配置和部署。它使您可以自由使用标准语言功能以获得最大的灵活性,同时还为某些资源提供自定义DSL。

开发云社区提供前沿行业资讯和优质的学习知识,同时提供优质稳定、价格优惠的云主机、数据库、网络、云储存等云服务产品

更多推荐

负载均衡/路由一个使用socketio和flask制作的应用

问题:负载均衡/路由一个使用socketio和flask制作的应用在部署Web应用程序方面,我有点菜鸟,我想确保我正在构建的一个小应用程序能够与我正在尝试使用的技术一起使用。我对烧瓶有一些经验,但只使用过测试服务器。我的理解是,使用nginx或apache,如果我编写一个烧瓶应用程序,每个访问我的网站的用户都可以获得一个烧瓶应用程序的不同实例,具体如何工作让我有点困惑。我想做的应用

Nginx重写规则没有按预期工作

MySQL远程时缓存如何工作

问题:MySQL远程时缓存如何工作我一直在使用PHP5.6进行旧电子商务应用程序的服务器迁移。切换涉及来自Linode的两台Dedicated32服务器。一台服务器用于NginX+PHP,另一台仅用于MySQL。遗留应用程序利用memcached。切换后,我可以看到由于私有入站和出站连接导致的大量内部流量。到目前为止,这个元素没有对性能造成任何问题。但是,

THE END
1.食谱编制的方法有哪几种(2)按热比值计算碳水化合物、脂肪和蛋白质的每日需要量; (3)确定主食的需要量; (4)确定副食的需要量; (5)确定蔬菜水果的需要量; (6)精纯食品的供给量 包括精纯糖类、食盐、植物油; (7)编制食谱。 2、按“食品交换份法”中各类食品能量及营养素的含量设计食谱。 3、电脑软件进行编制。优选推荐励志https://m.yyk.iask.sina.com.cn/q/87s3gxESSqkh.html
2.15个简单有趣的小食谱~有手就会系列在上学的日子里发疯抽象的东西看多了就是有副作用,我一开始以为up准备搞水?冰?水加冰食谱。 2024-06-15 23:5513812回复 还在嘴硬嗯我也是,第一道菜冰镇矿泉水,没想到还有后续 2024-06-16 01:44206回复 bili_47085028063草怎么大家都一样 2024-06-16 02:0450回复 阿兹卡班优秀食死徒我也是!我还以为第一个就是冰水呢https://www.bilibili.com/medialist/play/ml2583060217
3.请按计算法的食谱编写程序为某65岁轻体力活动男性制订午餐的营养关于"请按计算法的食谱编写程序为某65岁轻体力活动男性制订午餐的营养食谱,要求三大营养素供能比例为蛋白质15%,脂肪25%,碳水化合物60%,并简述老年人的膳食补充指南。"的答案很多朋友不是很清楚,接下来小编就为介绍一下改题答案吧。 请按计算法的食谱编写程序为某65岁轻体力活动男性制订午餐的营养食谱,要求三大营养https://www.duote.com/tech/202408/746538.html
4.NatMicrobiol:科学家为肠道细菌编写分子食谱@MedSci科学家们编写了一本不同寻常的食谱,不仅适用于我们人类,而且是专门为我们体内的微生物写的。 市面上有各种食谱,但这是第一本关于肠道细菌的食谱。 过去,科学家们发表的往往都是关于以前未知的机制或过程的复杂论文。而现在,科学家们近日在《Nature Microbiology》上发表了一种新形式的研究成果:在实验室中成功培养https://m.medsci.cn/article/show_article.do?id=7f95134389da
5.自由创作食谱记录页附带食帖编写的实用烹饪指南l食贴当当华文苑图书专营店在线销售正版《这是我的料理手帐 新型手帐书 食帖番组 记录烹饪家庭私房菜食谱/烹饪生活 自由创作食谱记录页 附带食帖编写的实用烹饪指南l食贴》。最新《这是我的料理手帐 新型手帐书 食帖番组 记录烹饪家庭私房菜食谱/烹饪生活 自由创作食谱记录页 附http://product.dangdang.com/11279624804.html
6.Chef运行了错误的食谱Ubuntu19.10上的Chef:破碎的食谱学习和改进:错误是学习的机会。通过分析错误的原因和解决方法,可以不断改进Chef食谱的编写和管理过程,提高配置管理的效率和准确性。 在腾讯云中,推荐使用的与Chef相关的产品是腾讯云自动化运维服务(Tencent Cloud Automation Service,CAS)。CAS是一种基于Chef的自动化运维服务,提供了丰富的功能和工具,帮助用户实现自动化https://cloud.tencent.com/developer/information/Chef%E8%BF%90%E8%A1%8C%E4%BA%86%E9%94%99%E8%AF%AF%E7%9A%84%E9%A3%9F%E8%B0%B1
7.试述采用计算法编制营养食谱的基本程序请按计算法的食谱编写程序为某65岁轻体力活动男性制订午餐的营养食谱,要求三大营养素供能比例为蛋白质15%,脂肪25%,碳水化合物60%,并简述老年人的膳食补充指南。 免费查看参考答案及解析 幼儿园营养食谱编制的方法不包括()。? A. 计算法 B. 食品交换份法 C. 平衡膳食宝塔法 D. 记账法 免费查看参考https://m.12tiku.com/tiku/919876/36871893.html
8.一个月超3万个GPTs!深扒全球Top50GPTs,谁是民间GPT王者?编程、网站搭建和视图设计,也是非官方GPT落地的主要赛道。比如支持一句话搭建网站的设计师GPT(DesignerGPT)、聊天方式编写代码的网页向导(WebPilot)、输入公司名生成商标的商标设计师(Logo Creator)等。 ▲通过一句话生成网页 还有一些非常细分但与人们日常生活和娱乐息息相关的赛道,涌现出了GPT爆款,比如“派对神器”无http://www.bianews.com/news/details?id=173450
9.月子食谱找月嫂就上亲亲妈咪网罗全城金牌月嫂月子餐功能饮食,清淡为主,品味佳 品尝月嫂的厨艺 亲亲妈咪的月嫂会根据月子食谱编写食材采购单供家人采购食材 住家月嫂会每一天制作 专业营养私教 签约VIP级,明星月嫂服务有孕妈妈将获得更多专业的营养服务 热量摄入知道与营养评估会对有健康需求的孕妈妈传递更多的健康理念 服务师推荐 我要咨询 企业http://www.kissmami.cn/yzsp/
10.《VitePress简易速速上手小册》第2章:Markdown与页面创建(2024使用Markdown 的基本格式编写食谱,包括标题、介绍、材料列表和烹饪步骤。 利用列表来清晰展示材料和步骤,使用加粗或斜体来强调特别提示或重要信息。 步骤2:添加图片和视频 在食谱中嵌入高质量的食物图片和烹饪过程的视频。这不仅使食谱更加生动,也帮助读者更好地理解烹饪过程。 https://developer.aliyun.com/article/1487075
11.如何在Foodie社交平台上分享自己的美食烹饪心得?除了烹饪心得,分享食谱也是Foodie社交平台的一大亮点。我们可以根据自己的口味和经验,编写一些简单易学、美味可口的食谱。在编写食谱时,注意突出食材的新鲜和搭配的合理性,同时附上详细的步骤图和文字说明。此外,我们还可以根据不同的节日和场合,编写一些具有特殊意义或趣味的食谱,与朋友们分享欢乐时光。 https://www.sousou.com/bk/370676.html