Intereting Posts
Сопоставление физического сектора с именем файла Каноническая переменная среды bash, представляющая адрес электронной почты пользователя Как правильно проверить, будет ли добавление файла в sudoers.d конфликтующим с другими файлами? Изображение ddrescue слишком велико Перемещение / загрузка на новый раздел создает: файл '/boot/grub/i386-pc/normal.mod' не найден переадресация сокетов tcp от нескольких последовательных клиентов к одному постоянному подключению сокета к серверу Не блокировать команду экрана Сетевая адресация для многопроцессорных систем Vim, как создать файл .swp вручную? Когда Automake переключился на использование Perl Почему fdisk настаивает на запуске первого раздела в секторе 65535 (MiB 31.9995 …) программа для ПК-телефона с использованием Gtalk? Заменить колонку с результатом команды Echo to Serialport Почему `cd ~" / mydata "` преуспевает, а `cd ~ /" mydata "` not

Использование curl в качестве теста

Я пишу конфигурацию Puppet для автоматизации создания ресурса репозитория Elastic Search. К сожалению, насколько я могу судить, нет способа указать эту конфигурацию в конфигурационном файле Elastic Search YAML, поэтому я застрял в HTTP и зависании. В качестве ресурсов я объявлял следующее:

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 для 404 в запросе GET . Я хотел бы иметь curl return 1 если ответ является ответом не-200.

Есть ли простой способ сделать это с помощью curl ?

Я нашел свой ответ в опции --fail для curl . Передавая эту опцию, curl возвращает ненулевой код выхода для не-200 ответов:

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