使用curl作为测试

使用curl作为测试

我正在编写 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返回0a 。如果响应不是 200 响应,我希望返回。404GETcurl1

有没有一种简单的方法可以做到这一点curl

答案1

--fail我在选项中找到了答案curl。通过传递此选项,curl将为非 200 响应返回非零退出代码:

curl -i -X GET --fail 'http://localhost:9200/_snapshot/s3'

相关内容