如何使用 Centos Vagrant guest(类似 Amazon Linux)在 Linux (Debian9) 上本地调试 Opsworks/Chef 11.10.4 食谱

Posted

技术标签:

【中文标题】如何使用 Centos Vagrant guest(类似 Amazon Linux)在 Linux (Debian9) 上本地调试 Opsworks/Chef 11.10.4 食谱【英文标题】:How to debug an Opsworks/Chef 11.10.4 cookbook locally on Linux (Debian9) using Centos Vagrant guest (Amazon Linux like) 【发布时间】:2019-03-03 21:18:01 【问题描述】:

我搜索了 3 周,但没有找到任何真正的答案。

主要目标是节省在 AWS 上部署生产之前在本地测试开发厨师食谱的时间。

我发现的只是一些使用带有 Vagrant 的 Ubuntu 的提示:

Chef - How to run a cookbook locally http://pixelcog.com/blog/2015/simplify-opsworks-dev-with-packer/

有没有人体验过使用 Centos 来宾在本地运行厨房,并使用厨师食谱库使用 JSON(厨师节点配置)作为节点环境(如在 opsworks 中)?

我的.kitchen.yml 文件和树目录:

---
driver:
  # specifies the software that manages the machine. We're using the Vagrant Test Kitchen driver
  name: vagrant

provisioner:
  #  specifies how to run Chef. We use chef_zero because it enables you to mimic a Chef server environment on your local machine. This allows us to work with node attributes and other Chef server feature
  name: chef_zero
  environments_path: './env' # JSON file (node config) is not used !:  env/preprod.json
  client_rb:
    environment: preprod

verifier:
  # specifies which application to use when running automated tests. You'll learn more about automated testing in a future module.
  name: inspec

platforms:
  - name: centos-7

suites:
  - name: default
    run_list:
      # list of cookbooks
      - recipe[nginx::default]
    attributes:

没有存储库内容的树,没有所有文件,只有目录名称:

(缩小)

├── foobar-cookbooks
│   ├── agent_version
│   ├── apache2
│   │   └── templates
│   │       ├── default
│   ├── foobar
│   │   ├── attributes
│   │   ├── definitions
│   │   ├── recipes
│   │   └── templates
│   │       └── default
│   ├── foobar_app_akeneo
│   │   ├── definitions
│   │   ├── metadata.rb
│   │   └── templates
│   │       └── default
│   ├── foobar_app_drupal
│   │   ├── attributes
│   │   ├── definitions
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   └── templates
│   ├── foobar_app_joomla
│   │   ├── attributes
│   │   ├── definitions
│   │   ├── metadata.rb
│   │   └── recipes
│   ├── Config
│   ├── dependencies
│   │   ├── attributes
│   │   ├── libraries
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   └── specs
│   ├── deploy
│   │   ├── attributes
│   │   ├── definitions
│   │   ├── libraries
│   │   ├── metadata.rb
│   │   ├── specs
│   │   └── templates
│   │       └── default
│   ├── ebs
│   │   ├── attributes
│   │   ├── files
│   │   │   └── default
│   │   ├── libraries
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   ├── specs
│   │   └── templates
│   │       └── default
│   ├── gem_support
│   │   ├── libraries
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   └── specs
│   ├── haproxy
│   │   ├── attributes
│   │   ├── metadata.rb
│   │   ├── README.rdoc
│   │   ├── recipes
│   │   ├── specs
│   │   └── templates
│   │       └── default
│   ├── LICENSE
│   ├── memcached
│   │   ├── attributes
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   ├── specs
│   │   └── templates
│   │       └── default
│   ├── mod_php5_apache2
│   │   ├── attributes
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   ├── specs
│   │   └── templates
│   │       └── default
│   ├── mysql
│   │   ├── attributes
│   │   ├── files
│   │   │   └── default
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   ├── specs
│   │   └── templates
│   │       └── default
│   ├── nginx
│   │   ├── attributes
│   │   ├── definitions
│   │   ├── metadata.rb
│   │   ├── specs
│   │   └── templates
│   │       └── default
│   ├── opsworks_agent_monit
│   │   ├── attributes
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   ├── specs
│   │   └── templates
│   │       ├── default
│   ├── opsworks_aws_flow_ruby
│   │   ├── attributes
│   │   ├── definitions
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   └── templates
│   │       └── default
│   ├── opsworks_berkshelf
│   │   ├── attributes
│   │   ├── libraries
│   │   ├── metadata.rb
│   │   ├── providers
│   │   ├── recipes
│   │   └── resources
│   ├── opsworks_bundler
│   │   ├── attributes
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   └── specs
│   ├── opsworks_cleanup
│   │   ├── attributes
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   └── specs
│   ├── opsworks_commons
│   │   ├── attributes
│   │   ├── definitions
│   │   ├── libraries
│   │   ├── metadata.rb
│   │   ├── providers
│   │   ├── recipes
│   │   └── resources
│   ├── opsworks_custom_cookbooks
│   │   ├── attributes
│   │   ├── libraries
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   └── specs
│   ├── opsworks_ecs
│   │   ├── attributes
│   │   ├── files
│   │   │   └── default
│   │   ├── libraries
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   └── templates
│   │       └── default
│   ├── opsworks_ganglia
│   │   ├── attributes
│   │   ├── files
│   │   │   └── default
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   ├── specs
│   │   └── templates
│   │       └── default
│   ├── opsworks_initial_setup
│   │   ├── attributes
│   │   ├── libraries
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   ├── specs
│   │   └── templates
│   │       └── default
│   ├── opsworks_java
│   │   ├── attributes
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   ├── specs
│   │   └── templates
│   │       ├── amazon
│   │       ├── default
│   ├── opsworks_nodejs
│   │   ├── attributes
│   │   ├── definitions
│   │   ├── libraries
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   ├── specs
│   │   └── templates
│   │       └── default
│   ├── opsworks_rubygems
│   │   ├── attributes
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   └── specs
│   ├── opsworks_shutdown
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   └── specs
│   ├── opsworks_stack_state_sync
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   └── templates
│   │       └── default
│   ├── packages
│   │   ├── attributes
│   │   ├── libraries
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   └── specs
│   ├── passenger_apache2
│   │   ├── attributes
│   │   ├── definitions
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   ├── specs
│   │   └── templates
│   │       └── default
│   ├── php
│   │   ├── attributes
│   │   │   └── default.rb
│   │   ├── recipes
│   │   ├── specs
│   │   └── templates
│   │       └── default
│   ├── Rakefile
│   ├── README.md
│   ├── ruby
│   │   ├── attributes
│   │   ├── metadata.rb
│   │   ├── recipes
│   │   └── specs
│   ├── scm_helper
│   ├── ssh_host_keys
│   ├── ssh_users
│   ├── test_suite
├── attributes
├── Berksfile
├── chefignore
├── definitions
├── env
├── layers.json
├── metadata.rb
├── recipes
├── spec
├── specs
├── test

【问题讨论】:

我不确定您想要实现什么,(a) 在本地(在您的开发机器上)测试 Opsworks?,然后再投入生产。或者,(b) 只在独立服务器上运行 chef? 我不尝试直接在我的桌面上进行测试,而是在 Vagrant Centos box guest 中进行测试 我将向任何提供完全可行的示例代码的人提供 250 个声誉点 我不确定 Opsworks 如何与 Chef12+ 交互(我无法再访问此类环境),但如果您拥有所有食谱的本地副本,则可以使用 test-kitchen 运行它们。是的,它是 Vagrant 上的“覆盖”,但界面更简单,更易于与 Chef 一起使用。抱歉,我无法提供更多帮助。 我在 Opsworks 中使用 Chef 11.10.4 【参考方案1】:

“使用测试厨房管理测试环境 虽然您可以在生产环境中启动之前在私有服务器上测试 Chef 代码,但当您运行代码时,Chef 节点会更改服务器的配置。

在开发过程中测试 Chef 代码的一种明智方法是设置一个与生产环境非常相似的沙盒环境。这将为您提供一个安全的地方来测试您的厨师食谱。 Chef 附带了 Test Kitchen,它可以帮助您创建用于测试的沙盒环境。 Test Kitchen 利用 Vagrant 和 Virtual Box 完成工作。

Test Kitchen 在 Vagrant 上运行,您可以在 Test Kitchen 之上创建沙盒环境。 Test Kitchen 是作为 Chef Development Kit 的一部分安装的,如果您使用 Chef Client,则需要单独安装。

要使用 Test Kitchen 创建虚拟环境,请使用 kitchen create 命令:

$ kitchen create default-centos65

这个例子展示了如何创建一个运行 CentOs 的虚拟环境。此命令下载 Vagrant 基础框并配置和启动 VM 实例。 Test Kitchen 将提取 Chef Software 通过 VagrantCloud 在 Internet 上提供的基本盒 最后一个命令创建的 CentOS 实例将设置一个准系统 CentOS 安装,其中包含足够的东西让 Chef 运行。

您可以这样登录 CentOS 虚拟机:

$ kitchen login default-centos65
Last login: Fri May 28 10:41:48 2016 
from 10.0.1.1

欢迎使用 Packer 构建的虚拟机。 在这个支持 Test Kitchen 的沙盒环境中运行所有测试 Chef 代码。

Test Kitchen 的配置文件使用 YAML 文件格式。 YAML 文件适用于两种类型的数据——键值对和列表。”- Alapati, S.(2018 年 3 月)。Modern Linux Administration。

【讨论】:

抱歉,如果没有完整的 .kitchen.yml 文件,您不能只运行 kitchen create default-centos65。此外,如前所述,我需要在环境中传递 JSON 节点对象。我期待一个完整的工作解决方案,网上已经有一些教程描述了 kitchen 的抽象用法,就像你一样。感谢您的帮助。

以上是关于如何使用 Centos Vagrant guest(类似 Amazon Linux)在 Linux (Debian9) 上本地调试 Opsworks/Chef 11.10.4 食谱的主要内容,如果未能解决你的问题,请参考以下文章

sh 如何使用vagrant更新VirtualBox Guest Additions

Vagrant 错误:无法挂载 VirtualBox 共享文件夹(Guest Additions,vboxsf)

text Vagrant pfsense + guest vm。

Vagrant Tip: Virtualbox Guest Additions

如何与 https 共享 vagrant 机器

在现有的vagrant box上添加端口转发