{"id":22683295,"url":"https://github.com/mtchavez/consul-ansible-module","last_synced_at":"2025-04-12T18:26:10.515Z","repository":{"id":29735209,"uuid":"33278534","full_name":"mtchavez/consul-ansible-module","owner":"mtchavez","description":"Ansible Module for Consul HTTP API","archived":false,"fork":false,"pushed_at":"2016-11-23T06:27:05.000Z","size":142,"stargazers_count":9,"open_issues_count":2,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-26T12:46:44.763Z","etag":null,"topics":["ansible","ansible-modules","consul-ansible"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mtchavez.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-04-01T23:33:01.000Z","updated_at":"2021-01-07T07:29:30.000Z","dependencies_parsed_at":"2022-09-06T18:10:45.586Z","dependency_job_id":null,"html_url":"https://github.com/mtchavez/consul-ansible-module","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mtchavez%2Fconsul-ansible-module","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mtchavez%2Fconsul-ansible-module/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mtchavez%2Fconsul-ansible-module/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mtchavez%2Fconsul-ansible-module/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mtchavez","download_url":"https://codeload.github.com/mtchavez/consul-ansible-module/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248611753,"owners_count":21133165,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansible","ansible-modules","consul-ansible"],"created_at":"2024-12-09T21:11:31.929Z","updated_at":"2025-04-12T18:26:10.495Z","avatar_url":"https://github.com/mtchavez.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Consul HTTP API Ansible Module\n\n[![Latest Version](http://img.shields.io/github/release/mtchavez/consul-ansible-module.svg?style=flat-square)](https://github.com/mtchavez/consul-ansible-module/releases)\n[![Build Status](https://travis-ci.org/mtchavez/consul-ansible-module.svg?branch=master)](https://travis-ci.org/mtchavez/consul-ansible-module)\n\nAn Ansible module to interact with consul's API from your playbooks and roles.\n\n## API Endpoints\n\n* [ACL](#acl)\n* [Events](#events)\n* [Key/Value](#keyvalue)\n* [Session](#session)\n* [Status](#status)\n\n### [ACL](#acl)\n\n#### Usage\n\n```yaml\n- name: Create ACL with defaults\n  consul_acl:\n    action: create\n    token: \"master-token\"\n\n- name: Update ACL\n  consul_acl:\n    action: update\n    acl_id: \"existing-acl-id\"\n    name: \"updated-acl-name\"\n    token: \"master-token\"\n\n- name: List ACL\n  consul_acl:\n    action: list\n    token: \"master-token\"\n\n- name: Get ACL replication\n  consul_acl:\n    action: replication\n    token: \"master-token\"\n\n- name: Get ACL info\n  consul_acl:\n    action: info\n    acl_id: \"asdf-1234-asdf-1234\"\n    token: \"master-token\"\n\n- name: Destroy ACL\n  consul_acl:\n    action: destroy\n    acl_id: \"asdf-1234-asdf-1234\"\n    token: \"master-token\"\n\n- name: Clone ACL\n  consul_acl:\n    action: clone\n    acl_id: \"asdf-1234-asdf-1234\"\n    token: \"master-token\"\n```\n\n#### Documentation\n\n```yaml\n---\nmodule: consul_acl\nversion_added: \"1.9\"\nauthor: Chavez\nshort_description: Interact with Consul ACL API\ndescription:\n   - Use Consul ACL API in your playbooks and roles\noptions:\n  acl_type:\n    description:\n      - Type of ACL\n    required: false\n  action:\n    description:\n      - One of [create]\n    required: true\n  dc:\n    desription:\n      - The datacenter to use\n    required: false\n    default: dc1\n  host:\n    description:\n      - Consul host\n    required: true\n    default: 127.0.0.1\n  name:\n    description:\n      - Name of event to fire\n    required: false\n  port:\n    description:\n      - Consul API port\n    required: true\n  rules:\n    description:\n      - ACL rules to set or update\n    required: false\n  token:\n    description:\n      - ACL token to use with requests\n    required: false\n  version:\n    description:\n      - Consul API version\n    required: true\n    default: v1\n```\n\n\n### [Events](#events)\n\n#### Usage\n\nExamples\n\n```yaml\n- name: Event new\n  consul_event:\n    action: fire\n    name: deploy\n  register: new_event\n\n- name: Event new\n  consul_event:\n    action: list\n  register: all_events\n\n```\n\n#### Documentation\n\n```yaml\n---\nmodule: consul_events\nversion_added: \"1.9\"\nauthor: Chavez\nshort_description: Interact with Consul Event API\ndescription:\n   - Use Consul Event API in your playbooks and roles\noptions:\n  action:\n    description:\n      - One of [leader, peers]\n    required: true\n  dc:\n    desription:\n      - The datacenter to use\n    required: false\n    default: dc1\n  host:\n    description:\n      - Consul host\n    required: true\n    default: 127.0.0.1\n  name:\n    description:\n      - Name of event to fire\n    required: false\n  node:\n    description:\n      - Node query filter for event fire\n    required: false\n  port:\n    description:\n      - Consul API port\n    required: true\n  service:\n```\n\n### [Key/Value](#keyvalue)\n\n#### Usage\n\nExamples\n\n```yaml\n- name: PUT a value for a key\n  consul_kv:\n    action: put\n    key: foo\n    value: bar\n\n- name: PUT value with flag\n  consul_kv:\n    action: put\n    key: bar/baz/bizzle\n    value: shizzle\n    flags: 23\n\n- name: GET key for PUT with check and set\n  consul_kv:\n    action: get\n    key: bar/baz/bizzle\n  register: bizzle\n\n- name: PUT check and set\n  consul_kv:\n    action: put\n    key: bar/baz/bizzle\n    value: \"no shizzle\"\n    cas: \"{{ item.ModifyIndex|int }}\"\n  with_items: bizzle.value\n\n- name: PUT with session\n  consul_kv:\n    action: put\n    key: razzle/acquired\n    value: true\n    acquire: \"some-valid-session\"\n\n- name: PUT with session release\n  consul_kv:\n    action: put\n    key: razzle/acquired\n    value: true\n    release: \"some-valid-session\"\n\n- name: GET a value for a key\n  consul_kv:\n    action: get\n    key: foo/bar/baz\n\n- name: GET keys for prefix\n  consul_kv:\n    action: get\n    key: bar\n    keys: true\n  register: bar_keys\n\n- name: GET keys up to separator\n  consul_kv:\n    action: get\n    key: bar/\n    keys: true\n    separator: \"/\"\n  register: separator_keys\n\n- name: DELETE a key\n  consul_kv:\n    action: delete\n    key: foo/tmp\n\n- name: DELETE a directory recursively\n  consul_kv:\n    action: delete\n    key: foo/bar\n    recurse: true\n```\n\n#### Documentation\n\n```yaml\nmodule: consul_kv\nversion_added: \"1.9\"\nauthor: Chavez\nshort_description: Interact with Consul K/V API\ndescription:\n   - Use Consul K/V API in your playbooks and roles\noptions:\n  acquire:\n    - description:\n      - Session to use for PUT requests\n    required: false\n\n    description:\n      - HTTP verb [GET, PUT, DELETE]\n    required: true\n  dc:\n    desription:\n      - The datacenter to use\n    required: false\n    default: dc1\n  cas:\n    description:\n      - Check and set parameter\n    require: false\n  flags:\n    description:\n      - Opaque flag to set as metadata for a key\n    require: false\n  host:\n    description:\n      - Consul host\n    required: true\n    default: 127.0.0.1\n  key:\n    description:\n      - Key to interact with in K/V store\n    required: true\n  keys:\n    description:\n      - Return keys on a GET request for a given path\n    required: false\n    default: False\n  port:\n    description:\n      - Consul API port\n    required: true\n    default: 8500\n  recurse:\n    description:\n      - Recurse flag for DELETE or GET actions\n    required: false\n    default: False\n  release:\n    - description:\n      - Session to release for PUT requests\n    required: false\n  separator:\n    description:\n      - Separator to use when listing keys for a GET\n    required: false\n  value:\n    description:\n      - Value to set when adding or updating a key\n    required: false\n  version:\n    description:\n      - Consul API version\n    required: true\n    default: v1\n```\n\n### [Session](#session)\n\n#### Usage\n\nExamples\n```yaml\n- name: Session create\n  consul_session:\n    action: create\n    ttl: 15s\n  register: session\n\n- name: Get session info\n  consul_session:\n    action: info\n    session: \"{{ session.value.ID }}\"\n  register: session_info\n\n- name: Session create with all params\n  consul_session:\n    action: create\n    lock_delay: 25s\n    node: \"{{ item.Node }}\"\n    behavior: delete\n    checks: \"\"\n    ttl: 25s\n  register: session_params\n  with_items: \"{{ session_info.value }}\"\n\n- name: Get session params info\n  consul_session:\n    action: info\n    session: \"{{ item.value.ID }}\"\n  register: session_params_info\n  with_items: \"{{ session_params.results }}\"\n\n- name: Get session renew\n  consul_session:\n    action: renew\n    session: \"{{ session.value.ID }}\"\n  register: session_renew\n\n- name: List sessions\n  consul_session:\n    action: list\n  register: all_sessions\n\n- name: All sessions for a node\n  consul_session:\n    action: node\n    node: \"{{ item.Node }}\"\n  register: node_sessions\n  with_items: \"{{ session_info.value }}\"\n\n- name: Destroy session\n  consul_session:\n    action: destroy\n    session: \"{{ item }}\"\n  with_items:\n    - \"{{ session.value.ID }}\"\n    - \"{{ session_params.results[0].value.ID }}\"\n```\n\n#### Documentation\n```yaml\nmodule: consul_session\nversion_added: \"1.9\"\nauthor: Chavez\nshort_description: Interact with Consul Sessions API\ndescription:\n   - Use Consul Sessions API in your playbooks and roles\noptions:\n  action:\n    description:\n      - API session action [create, destroy, info, node, list, renew]\n    required: true\n  behavior:\n    description:\n      - Controls when the session is invalidated [release, delete]\n    require: false\n  checks:\n    description:\n      - List of associated health checks comma separated \"foo,bar,baz\"\n    required: false\n  dc:\n    desription:\n      - The datacenter to use\n    required: false\n    default: dc1\n  host:\n    description:\n      - Consul host\n    required: true\n    default: 127.0.0.1\n  lock_delay:\n    description:\n      - Time to delay the lock of the session\n    require: false\n  node:\n    description:\n      - Node name to set on create\n    required: false\n  port:\n    description:\n      - Consul API port\n    required: true\n  session:\n    description:\n      - Consul session to interact with\n    require: false\n  ttl:\n    description:\n      - Session TTL\n    required: false\n  version:\n    description:\n      - Consul API version\n    required: true\n    default: v1\n```\n\n### [Status](#status)\n\n#### Usage\n\nExamples\n\n```yaml\n- name: Get leader\n  consul_status:\n    action: leader\n  register: leader\n\n- name: Get peers\n  consul_status:\n    action: peers\n  register: peers\n```\n\n#### Documentation\n```yaml\nmodule: consul_status\nversion_added: \"1.9\"\nauthor: Chavez\nshort_description: Interact with Consul Status API\ndescription:\n   - Use Consul Status API in your playbooks and roles\noptions:\n  action:\n    description:\n      - One of [leader, peers]\n    required: true\n  dc:\n    desription:\n      - The datacenter to use\n    required: false\n    default: dc1\n  host:\n    description:\n      - Consul host\n    required: true\n    default: 127.0.0.1\n  port:\n    description:\n      - Consul API port\n    required: true\n  version:\n    description:\n      - Consul API version\n    required: true\n    default: v1\n\n# informational: requirements for nodes\nrequirements: [ ]\n```\n\n## Testing\n\nYou will need to be running a consul server locally to run the test playbook.\n\nRun consul with\n  * DC1: `consul agent --server --bootstrap-expect=1 --data-dir=ci/consul/dc1/ --log-level=debug --config-file=ci/consul/dc1/config.json`\n  * DC2: `consul agent --server --bootstrap-expect=1 --config-file=ci/consul/dc2/config.json --data-dir=ci/consul/dc2 --log-level=debug`\n\nThen you can run the test playbook with `ansible-playbook -i ./hosts test-consul.yml`\n\n## TODO\n\n- ACL API\n  - [x]  `/v1/acl/create`\n  - [x]  `/v1/acl/update`\n  - [x]  `/v1/acl/destroy/\u003cid\u003e`\n  - [x]  `/v1/acl/info/\u003cid\u003e`\n  - [x]  `/v1/acl/clone/\u003cid\u003e`\n  - [x]  `/v1/acl/list`\n  - [x]  `/v1/acl/replication`\n- Agent API\n  - [ ] `/v1/agent/checks`\n  - [ ] `/v1/agent/services`\n  - [ ] `/v1/agent/members`\n  - [ ] `/v1/agent/self`\n  - [ ] `/v1/agent/maintenance`\n  - [ ] `/v1/agent/join/\u003caddress\u003e`\n  - [ ] `/v1/agent/force-leave/\u003cnode\u003e`\n  - [ ] `/v1/agent/check/register`\n  - [ ] `/v1/agent/check/deregister/\u003ccheckID\u003e`\n  - [ ] `/v1/agent/check/pass/\u003ccheckID\u003e`\n  - [ ] `/v1/agent/check/warn/\u003ccheckID\u003e`\n  - [ ] `/v1/agent/check/fail/\u003ccheckID\u003e`\n  - [ ] `/v1/agent/check/update/\u003ccheckID\u003e`\n  - [ ] `/v1/agent/service/register`\n  - [ ] `/v1/agent/service/deregister/\u003cserviceID\u003e`\n  - [ ] `/v1/agent/service/maintenance/\u003cserviceID\u003e`\n- Catalog API\n  - [ ] `/v1/catalog/register`\n  - [ ] `/v1/catalog/deregister`\n  - [ ] `/v1/catalog/datacenters`\n  - [ ] `/v1/catalog/nodes`\n  - [ ] `/v1/catalog/services`\n  - [ ] `/v1/catalog/service/\u003cservice\u003e`\n  - [ ] `/v1/catalog/node/\u003cnode\u003e`\n- Coordinate API\n  - [ ] ` /v1/coordinate/datacenters`\n  - [ ] ` /v1/coordinate/nodes`\n- Events API\n  - [x] fire\n  - [x] list\n- Health Checks API\n  - [ ] `/v1/health/node/\u003cnode\u003e`\n  - [ ] `/v1/health/checks/\u003cservice\u003e`\n  - [ ] `/v1/health/service/\u003cservice\u003e`\n  - [ ] `/v1/health/state/\u003cstate\u003e`\n- Key/Value API\n  - [x] GET\n  - [x] PUT\n  - [x] DELETE\n  - [x] Session acquire PUT\n  - [x] Session release PUT\n- Prepared Queries API\n  - [ ] `/v1/query`\n  - [ ] `/v1/query/\u003cquery`\n  - [ ] `/v1/query/\u003cquery or name\u003e/execute`\n  - [ ] `/v1/query/\u003cquery or name\u003e/explain`\n- Session API\n  - [x] create\n  - [x] destroy\n  - [x] info\n  - [x] node\n  - [x] list\n  - [x] renew\n- Status API\n  - [x] leader\n  - [x] peers\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmtchavez%2Fconsul-ansible-module","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmtchavez%2Fconsul-ansible-module","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmtchavez%2Fconsul-ansible-module/lists"}