Chef 在多行上拆分 'execute' 命令
Chef splits 'execute' command on multiple lines
正在尝试创建说明书以将 EBS 卷附加到实例。
OS 是 Ubuntu 18.04 运行 在 AWS EC2 中使用通过 IAM 角色传递的凭证。
在某些时候我有一个块如下:
if do_attach
execute 'attach_ebs_vol' do
command "aws ec2 attach-volume --volume-id #{volume_id} --instance-id #{instance_id} --device #{ebs_device}"
action :run
end
end
然而,当我实际转到 运行 时,似乎 chef
将命令分成两行?这是输出的样子:
[2018-07-12T03:37:28+00:00] FATAL: Mixlib::ShellOut::ShellCommandFailed: execute[attach_ebs_vol] (aws_attach_ebs_vol::default line 69) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '127'
---- Begin output of aws ec2 attach-volume --volume-id vol-08a69721ee5ffe615 --instance-id i-0342cc9794decd206
--device /dev/sdf ----
STDOUT:
STDERR: usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:
aws help
aws <command> help
aws <command> <subcommand> help
aws: error: argument --device is required
sh: 2: --device: not found
---- End output of aws ec2 attach-volume --volume-id vol-08a69721ee5ffe615 --instance-id i-0342cc9794decd206
--device /dev/sdf ----
Ran aws ec2 attach-volume --volume-id vol-08a69721ee5ffe615 --instance-id i-0342cc9794decd206
--device /dev/sdf returned 127
知道我做错了什么吗? chef
和 ruby
都是新手,还没有找到任何可以在文档中为我指明正确方向的内容。
我最初尝试将命令设置为变量,如下所示:
if do_attach
attach_cmd = "aws ec2 attach-volume --volume-id #{volume_id} --instance-id #{instance_id} --device #{ebs_device}"
execute 'attach_ebs_vol' do
command attach_cmd
action :run
end
end
然而,这并没有什么不同。有什么想法吗?
感谢 /u/coderanger 上面的评论找到了答案!
我从 ec2metadata 中得到 instance_id
如下:
instance_id = shell_out("ec2metadata --instance-id").stdout
添加 .strip
修复了它:
instance_id = shell_out("ec2metadata --instance-id").stdout.strip
正在尝试创建说明书以将 EBS 卷附加到实例。
OS 是 Ubuntu 18.04 运行 在 AWS EC2 中使用通过 IAM 角色传递的凭证。
在某些时候我有一个块如下:
if do_attach
execute 'attach_ebs_vol' do
command "aws ec2 attach-volume --volume-id #{volume_id} --instance-id #{instance_id} --device #{ebs_device}"
action :run
end
end
然而,当我实际转到 运行 时,似乎 chef
将命令分成两行?这是输出的样子:
[2018-07-12T03:37:28+00:00] FATAL: Mixlib::ShellOut::ShellCommandFailed: execute[attach_ebs_vol] (aws_attach_ebs_vol::default line 69) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '127'
---- Begin output of aws ec2 attach-volume --volume-id vol-08a69721ee5ffe615 --instance-id i-0342cc9794decd206
--device /dev/sdf ----
STDOUT:
STDERR: usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:
aws help
aws <command> help
aws <command> <subcommand> help
aws: error: argument --device is required
sh: 2: --device: not found
---- End output of aws ec2 attach-volume --volume-id vol-08a69721ee5ffe615 --instance-id i-0342cc9794decd206
--device /dev/sdf ----
Ran aws ec2 attach-volume --volume-id vol-08a69721ee5ffe615 --instance-id i-0342cc9794decd206
--device /dev/sdf returned 127
知道我做错了什么吗? chef
和 ruby
都是新手,还没有找到任何可以在文档中为我指明正确方向的内容。
我最初尝试将命令设置为变量,如下所示:
if do_attach
attach_cmd = "aws ec2 attach-volume --volume-id #{volume_id} --instance-id #{instance_id} --device #{ebs_device}"
execute 'attach_ebs_vol' do
command attach_cmd
action :run
end
end
然而,这并没有什么不同。有什么想法吗?
感谢 /u/coderanger 上面的评论找到了答案!
我从 ec2metadata 中得到 instance_id
如下:
instance_id = shell_out("ec2metadata --instance-id").stdout
添加 .strip
修复了它:
instance_id = shell_out("ec2metadata --instance-id").stdout.strip