第 15 步:更新说明书以使用条件逻辑 - AWS OpsWorks

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

第 15 步:更新说明书以使用条件逻辑

重要

AWS OpsWorks Stacks 不再接受新客户。在 2024 年 5 月 26 日之前,现有客户将能够照常使用 OpsWorks 控制台、API、CLI 和 CloudFormation 资源,届时这些工具或资源将停用。为准备此过渡,我们建议您尽快将堆栈过渡到AWS Systems Manager。有关更多信息,请参阅 AWS OpsWorks Stacks 生命周期终止常见问题解答将 AWS OpsWorks Stacks 应用程序迁移到 AWS Systems Manager Application Manager

现在,通过添加可使用条件逻辑 (只有在满足某些条件时才运行代码的一种方法) 的配方来更新您的说明书。有关更多信息,请转到 if Statementscase Statements

此配方会根据数据包内容执行两项操作:在日志中显示一则消息以确定实例在哪个操作系统上运行,以及只有在操作系统是 Linux 的情况下,才会为所规定的 Linux 发行版使用相应的程序包管理器来安装程序包。此程序包名为“tree”,是一款用于显示目录列表的简单应用程序。

更新实例上的说明书并运行新的配方
  1. 在您的本地工作站上的 opsworks_cookbook_demo directoryrecipes 子目录中,创建名为 conditional_logic.rb 的包含以下代码的文件:

    instance = search("aws_opsworks_instance").first os = instance["os"] if os == "Red Hat Enterprise Linux 7" Chef::Log.info("********** Operating system is Red Hat Enterprise Linux. **********") elsif os == "Ubuntu 14.04 LTS" || os == "Ubuntu 16.04 LTS" || os == "Ubuntu 18.04 LTS" Chef::Log.info("********** Operating system is Ubuntu. **********") elsif os == "Microsoft Windows Server 2012 R2 Base" Chef::Log.info("********** Operating system is Windows. **********") elsif os == "Amazon Linux 2015.03" || os == "Amazon Linux 2015.09" || os == "Amazon Linux 2016.03" || os == "Amazon Linux 2016.09" || os == "Amazon Linux 2017.03" || os == "Amazon Linux 2017.09" || os == "Amazon Linux 2018.03" || os == "Amazon Linux 2" Chef::Log.info("********** Operating system is Amazon Linux. **********") elsif os == "CentOS Linux 7" Chef::Log.info("********** Operating system is CentOS 7. **********") else Chef::Log.info("********** Cannot determine operating system. **********") end case os when "Ubuntu 14.04 LTS", "Ubuntu 16.04 LTS", "Ubuntu 18.04 LTS" apt_package "Install a package with apt-get" do package_name "tree" end when "Amazon Linux 2015.03", "Amazon Linux 2015.09", "Amazon Linux 2016.03", "Amazon Linux 2016.09", "Amazon Linux 2017.03", "Amazon Linux 2017.09", "Amazon Linux 2018.03", "Amazon Linux 2", "Red Hat Enterprise Linux 7", "CentOS Linux 7" yum_package "Install a package with yum" do package_name "tree" end else Chef::Log.info("********** Cannot determine operating system type, or operating system is not Linux. Package not installed. **********") end
  2. 在终端处或在命令提示符下,使用 tar 命令创建 opsworks_cookbook_demo.tar.gz 文件的新版本,该文件包含 opsworks_cookbook_demo 目录及其更新的内容。

  3. 将更新后的 opsworks_cookbook_demo.tar.gz 文件上传到 S3 存储桶。

  4. 按照第 5 步:更新实例上的说明书并运行配方中的步骤,更新实例上的说明书并运行配方。在“运行配方”步骤中,对于 Recipes to execute (要执行的配方),键入 opsworks_cookbook_demo::conditional_logic

测试配方
  1. 通过上一步骤显示了 Running command execute_recipes 页面时,对于 cookbooks-demo1 中的 Log,选择 show。此时将显示 execute_recipes 日志页面。

  2. 向下滚动日志并查找类似于以下内容的条目:

    [2015-11-16T19:59:05+00:00] INFO: ********** Operating system is Amazon Linux. **********

    由于实例的操作系统是 Amazon Linux 2016.09,日志中将仅显示 (配方代码中五个可能的条目的) 前一个条目。

  3. 如果操作系统是 Linux,配方会安装树包。要查看形象化的目录内容,在预期目录的命令提示符下键入 tree 或键入预期目录的路径(例如 tree /var/chef/runs)。

下一步中,您将更新说明书,以使用由 Chef 社区提供的外部说明书的功能。