Consul Watch : Как запустить скрипт при смене адреса узла

У меня зарегистрирован следующий консульский сервис.

curl -s -X GET http://<CONSUL_URL>/v1/catalog/service/myservice | jq .
[
  {
    "ServicePort": 0000,
    "ServiceAddress": "",
    "ServiceTags": null,
    "ServiceName": "myservice",
    "ServiceID": "myservice",
    "Address": "10.3.6.28",
    "Node": "myservice-one"
  },
  {
    "ServicePort": 0000,
    "ServiceAddress": "",
    "ServiceTags": null,
    "ServiceName": "myservice",
    "ServiceID": "myservice",
    "Address": "10.3.6.28",
    "Node": "myservice-main"
  },
  {
    "ServicePort": 0000,
    "ServiceAddress": "",
    "ServiceTags": null,
    "ServiceName": "myservice",
    "ServiceID": "myservice",
    "Address": "10.3.6.26",
    "Node": "myservice-two"
  },
  {
    "ServicePort": 0000,
    "ServiceAddress": "",
    "ServiceTags": null,
    "ServiceName": "myservice",
    "ServiceID": "myservice",
    "Address": "10.3.6.27",
    "Node": "myservice-three"
  }
]


 curl -s -X GET http://10.3.6.21:8500/v1/catalog/node/myservice-main | jq .
{
  "Services": {
    "myservice": {
      "Port": 0000,
      "Address": "",
      "Tags": null,
      "Service": "myservice",
      "ID": "myservice"
    }
  },
  "Node": {
    "Address": "10.3.6.28",
    "Node": "myservice-main"
  }
}

Как показано здесь, у меня есть узел myservice-main в службе myservice, которая у меня есть. Я хочу выполнить некоторые конкретные действия при изменении адреса myservice-main. Я читал, что часы консула могут быть полезны для достижения этого, но я не могу написать команду curl для того же. Может ли кто-нибудь указать мне на http API, который я могу использовать для выполнения моего требования? Я могу использовать только HTTP API (curl) и сценарий оболочки, поскольку я хочу сделать это из удаленной системы.


person Subhankar    schedule 09.12.2015    source источник


Ответы (1)


Чтобы выполнить блокирующие запросы, вам нужно посмотреть заголовок X-Consul-Index в ответе и использовать его в качестве параметра запроса в URL-адресе для вашего следующего запроса. Вот документация.

Но в документации также указано, что ваш вызов может вернуться, даже если в сервисе не было изменений. И вы должны позаботиться о индексах.

Вместо этого я предлагаю вам взглянуть на шаблон консула: вы должны написать файл шаблона со всей информацией вы хотите отслеживать, включая IP-адреса. consul затем вызовет ваш скрипт, как только эта информация изменится.

person ahus1    schedule 12.12.2015