【问题标题】:unable to create folder on /mnt via chef recipe无法通过厨师食谱在 /mnt 上创建文件夹
【发布时间】:2016-01-17 12:24:45
【问题描述】:

我正在使用以下 chef 命令在 /mnt 上创建一个文件夹

directory '/mnt/node/deploy' do
  owner 'ubuntu'
  group 'ubuntu'
  mode '0755'
  recursive true
  action :create
end

这是通过打包程序调用以创建 AWS AMI 的配方的一部分。 ubuntu 是我用来将我的代码部署到预配置机器的用户。 当我使用 AMI 启动 EC2 实例时,不会在计算机上创建此文件夹。可能是什么问题呢?创建 AMI 时我没有看到任何错误。

更新-1

这些是日志。我尝试使用 root。

`amazon-ebs: * directory[/mnt/node/deploy] action create`
`amazon-ebs: - create new directory /mnt/node/deploy`
`amazon-ebs: - change mode from '' to '0755'`
`amazon-ebs: - change owner from '' to 'root'`
`amazon-ebs: - change group from '' to 'root'`

我看到 EC2 正在 /mnt 上安装临时存储。 我想在临时存储上创建这些文件夹。 我卸载了 /mnt,但没有看到那里的文件夹。

【问题讨论】:

  • 目录创建似乎正确。您能否粘贴完整的 Chef 日志输出?也许那里正在安装一些东西,这会使目录消失。
  • 我怀疑这与临时存储有关。 EC2 似乎在 /mnt 上安装了临时存储。
  • 尝试卸载/mnt并检查目录是否存在。

标签: amazon-web-services amazon-ec2 chef-infra chef-recipe packer


【解决方案1】:

Packer 在创建映像之前运行 Chef。所以,如果我理解正确的话:

  1. Chef 在实例临时存储上创建目录。
  2. Packer 创建 AMI。
  3. 您启动了 AMI,但临时存储中不存在该目录。

AFAIK 这是预期的行为。该目录是在一个临时分区中创建的,这种分区预计不会持久。

总之,当您创建 AWS AMI 映像时,它不包括临时存储。仅 EBS 卷。临时分区在启动时始终为空。如果要保留该目录,它必须位于 EBS 分区中。

如果您仍想使用/mnt 目录,您可以避免使用ami_block_device_mappings 选项挂载临时存储:

  "ami_block_device_mappings": [
    {
      "device_name": "/dev/sdb",
      "no_device": true
    }
  ],

launch_block_device_mappings 也是如此

另一种解决方案是在新创建的实例中再次运行您的 Chef 食谱。

【讨论】:

  • /mnt 是加载临时存储的地方。 AMI 创建过程会关闭清除临时存储的实例。
【解决方案2】:

amazon-ebs 是打包机生成器的名称:

amazon-ebs - 通过启动源 AMI 和 配置后将其重新打包到新的 AMI 中。如有疑问,请使用 这个构建器,最容易上手。

它将整个机器作为 EBS 支持运行,因此它可以稍后将 EBS 卷转换为 AMI。

这与 Chef 无关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 2019-01-29
    • 1970-01-01
    相关资源
    最近更新 更多