我正在编写 Puppet 配置来自动创建 Elastic Search 存储库资源。不幸的是,据我所知,无法在 Elastic Search YAML 配置文件中指定此配置,因此我只能使用 HTTP 和curl。我已将以下内容声明为资源:
file { 'curator_repository_config':
path => "${elasticsearch::install_dir}/config/s3-repository.json",
owner => $elasticsearch::user,
group => $elasticsearch::user,
mode => '0400',
content => template('chromeriver/curator/s3-repository.json.erb'),
}
exec { 'create_es_repository':
command => "curl -is -X PUT 'http://localhost:9200/_snapshot/s3' -d @${elasticsearch::install_dir}/config/s3-repository.json",
unless => "curl -is -X GET 'http://localhost:9200/_snapshot/s3'",
path => '/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin',
user => $elasticsearch::user,
require => [
Service['elasticsearch'],
File['curator_repository_config']
]
}
了解 Puppet 配置并不是回答这个问题所必需的,但上面的内容本质上创建了一个名为 的文件,s3-repository.json
其中包含最终在 POST 到 Elastic Search 中使用的配置详细信息。
第二个资源有条件地执行,仅当以下命令的返回代码非零时才运行。它本质上是这样做的:
#!/bin/bash
if ! curl -is -X GET 'http://localhost:9200/_snapshot/s3' &>/dev/null; then
curl -is -X PUT 'http://localhost:9200/_snapshot/s3' @/path/to/s3-repository.json
fi
我遇到的问题是根据请求curl
返回0
a 。如果响应不是 200 响应,我希望返回。404
GET
curl
1
有没有一种简单的方法可以做到这一点curl
?
答案1
--fail
我在选项中找到了答案curl
。通过传递此选项,curl
将为非 200 响应返回非零退出代码:
curl -i -X GET --fail 'http://localhost:9200/_snapshot/s3'