项目作者: mtchavez

项目描述 :
Ansible Module for Consul HTTP API
高级语言: Python
项目地址: git://github.com/mtchavez/consul-ansible-module.git
创建时间: 2015-04-01T23:33:01Z
项目社区:https://github.com/mtchavez/consul-ansible-module

开源协议:MIT License

下载


Consul HTTP API Ansible Module

Latest Version
Build Status

An Ansible module to interact with consul’s API from your playbooks and roles.

API Endpoints

ACL

Usage

  1. - name: Create ACL with defaults
  2. consul_acl:
  3. action: create
  4. token: "master-token"
  5. - name: Update ACL
  6. consul_acl:
  7. action: update
  8. acl_id: "existing-acl-id"
  9. name: "updated-acl-name"
  10. token: "master-token"
  11. - name: List ACL
  12. consul_acl:
  13. action: list
  14. token: "master-token"
  15. - name: Get ACL replication
  16. consul_acl:
  17. action: replication
  18. token: "master-token"
  19. - name: Get ACL info
  20. consul_acl:
  21. action: info
  22. acl_id: "asdf-1234-asdf-1234"
  23. token: "master-token"
  24. - name: Destroy ACL
  25. consul_acl:
  26. action: destroy
  27. acl_id: "asdf-1234-asdf-1234"
  28. token: "master-token"
  29. - name: Clone ACL
  30. consul_acl:
  31. action: clone
  32. acl_id: "asdf-1234-asdf-1234"
  33. token: "master-token"

Documentation

  1. ---
  2. module: consul_acl
  3. version_added: "1.9"
  4. author: Chavez
  5. short_description: Interact with Consul ACL API
  6. description:
  7. - Use Consul ACL API in your playbooks and roles
  8. options:
  9. acl_type:
  10. description:
  11. - Type of ACL
  12. required: false
  13. action:
  14. description:
  15. - One of [create]
  16. required: true
  17. dc:
  18. desription:
  19. - The datacenter to use
  20. required: false
  21. default: dc1
  22. host:
  23. description:
  24. - Consul host
  25. required: true
  26. default: 127.0.0.1
  27. name:
  28. description:
  29. - Name of event to fire
  30. required: false
  31. port:
  32. description:
  33. - Consul API port
  34. required: true
  35. rules:
  36. description:
  37. - ACL rules to set or update
  38. required: false
  39. token:
  40. description:
  41. - ACL token to use with requests
  42. required: false
  43. version:
  44. description:
  45. - Consul API version
  46. required: true
  47. default: v1

Events

Usage

Examples

  1. - name: Event new
  2. consul_event:
  3. action: fire
  4. name: deploy
  5. register: new_event
  6. - name: Event new
  7. consul_event:
  8. action: list
  9. register: all_events

Documentation

  1. ---
  2. module: consul_events
  3. version_added: "1.9"
  4. author: Chavez
  5. short_description: Interact with Consul Event API
  6. description:
  7. - Use Consul Event API in your playbooks and roles
  8. options:
  9. action:
  10. description:
  11. - One of [leader, peers]
  12. required: true
  13. dc:
  14. desription:
  15. - The datacenter to use
  16. required: false
  17. default: dc1
  18. host:
  19. description:
  20. - Consul host
  21. required: true
  22. default: 127.0.0.1
  23. name:
  24. description:
  25. - Name of event to fire
  26. required: false
  27. node:
  28. description:
  29. - Node query filter for event fire
  30. required: false
  31. port:
  32. description:
  33. - Consul API port
  34. required: true
  35. service:

Key/Value

Usage

Examples

  1. - name: PUT a value for a key
  2. consul_kv:
  3. action: put
  4. key: foo
  5. value: bar
  6. - name: PUT value with flag
  7. consul_kv:
  8. action: put
  9. key: bar/baz/bizzle
  10. value: shizzle
  11. flags: 23
  12. - name: GET key for PUT with check and set
  13. consul_kv:
  14. action: get
  15. key: bar/baz/bizzle
  16. register: bizzle
  17. - name: PUT check and set
  18. consul_kv:
  19. action: put
  20. key: bar/baz/bizzle
  21. value: "no shizzle"
  22. cas: "{{ item.ModifyIndex|int }}"
  23. with_items: bizzle.value
  24. - name: PUT with session
  25. consul_kv:
  26. action: put
  27. key: razzle/acquired
  28. value: true
  29. acquire: "some-valid-session"
  30. - name: PUT with session release
  31. consul_kv:
  32. action: put
  33. key: razzle/acquired
  34. value: true
  35. release: "some-valid-session"
  36. - name: GET a value for a key
  37. consul_kv:
  38. action: get
  39. key: foo/bar/baz
  40. - name: GET keys for prefix
  41. consul_kv:
  42. action: get
  43. key: bar
  44. keys: true
  45. register: bar_keys
  46. - name: GET keys up to separator
  47. consul_kv:
  48. action: get
  49. key: bar/
  50. keys: true
  51. separator: "/"
  52. register: separator_keys
  53. - name: DELETE a key
  54. consul_kv:
  55. action: delete
  56. key: foo/tmp
  57. - name: DELETE a directory recursively
  58. consul_kv:
  59. action: delete
  60. key: foo/bar
  61. recurse: true

Documentation

  1. module: consul_kv
  2. version_added: "1.9"
  3. author: Chavez
  4. short_description: Interact with Consul K/V API
  5. description:
  6. - Use Consul K/V API in your playbooks and roles
  7. options:
  8. acquire:
  9. - description:
  10. - Session to use for PUT requests
  11. required: false
  12. description:
  13. - HTTP verb [GET, PUT, DELETE]
  14. required: true
  15. dc:
  16. desription:
  17. - The datacenter to use
  18. required: false
  19. default: dc1
  20. cas:
  21. description:
  22. - Check and set parameter
  23. require: false
  24. flags:
  25. description:
  26. - Opaque flag to set as metadata for a key
  27. require: false
  28. host:
  29. description:
  30. - Consul host
  31. required: true
  32. default: 127.0.0.1
  33. key:
  34. description:
  35. - Key to interact with in K/V store
  36. required: true
  37. keys:
  38. description:
  39. - Return keys on a GET request for a given path
  40. required: false
  41. default: False
  42. port:
  43. description:
  44. - Consul API port
  45. required: true
  46. default: 8500
  47. recurse:
  48. description:
  49. - Recurse flag for DELETE or GET actions
  50. required: false
  51. default: False
  52. release:
  53. - description:
  54. - Session to release for PUT requests
  55. required: false
  56. separator:
  57. description:
  58. - Separator to use when listing keys for a GET
  59. required: false
  60. value:
  61. description:
  62. - Value to set when adding or updating a key
  63. required: false
  64. version:
  65. description:
  66. - Consul API version
  67. required: true
  68. default: v1

Session

Usage

Examples

  1. - name: Session create
  2. consul_session:
  3. action: create
  4. ttl: 15s
  5. register: session
  6. - name: Get session info
  7. consul_session:
  8. action: info
  9. session: "{{ session.value.ID }}"
  10. register: session_info
  11. - name: Session create with all params
  12. consul_session:
  13. action: create
  14. lock_delay: 25s
  15. node: "{{ item.Node }}"
  16. behavior: delete
  17. checks: ""
  18. ttl: 25s
  19. register: session_params
  20. with_items: "{{ session_info.value }}"
  21. - name: Get session params info
  22. consul_session:
  23. action: info
  24. session: "{{ item.value.ID }}"
  25. register: session_params_info
  26. with_items: "{{ session_params.results }}"
  27. - name: Get session renew
  28. consul_session:
  29. action: renew
  30. session: "{{ session.value.ID }}"
  31. register: session_renew
  32. - name: List sessions
  33. consul_session:
  34. action: list
  35. register: all_sessions
  36. - name: All sessions for a node
  37. consul_session:
  38. action: node
  39. node: "{{ item.Node }}"
  40. register: node_sessions
  41. with_items: "{{ session_info.value }}"
  42. - name: Destroy session
  43. consul_session:
  44. action: destroy
  45. session: "{{ item }}"
  46. with_items:
  47. - "{{ session.value.ID }}"
  48. - "{{ session_params.results[0].value.ID }}"

Documentation

  1. module: consul_session
  2. version_added: "1.9"
  3. author: Chavez
  4. short_description: Interact with Consul Sessions API
  5. description:
  6. - Use Consul Sessions API in your playbooks and roles
  7. options:
  8. action:
  9. description:
  10. - API session action [create, destroy, info, node, list, renew]
  11. required: true
  12. behavior:
  13. description:
  14. - Controls when the session is invalidated [release, delete]
  15. require: false
  16. checks:
  17. description:
  18. - List of associated health checks comma separated "foo,bar,baz"
  19. required: false
  20. dc:
  21. desription:
  22. - The datacenter to use
  23. required: false
  24. default: dc1
  25. host:
  26. description:
  27. - Consul host
  28. required: true
  29. default: 127.0.0.1
  30. lock_delay:
  31. description:
  32. - Time to delay the lock of the session
  33. require: false
  34. node:
  35. description:
  36. - Node name to set on create
  37. required: false
  38. port:
  39. description:
  40. - Consul API port
  41. required: true
  42. session:
  43. description:
  44. - Consul session to interact with
  45. require: false
  46. ttl:
  47. description:
  48. - Session TTL
  49. required: false
  50. version:
  51. description:
  52. - Consul API version
  53. required: true
  54. default: v1

Status

Usage

Examples

  1. - name: Get leader
  2. consul_status:
  3. action: leader
  4. register: leader
  5. - name: Get peers
  6. consul_status:
  7. action: peers
  8. register: peers

Documentation

  1. module: consul_status
  2. version_added: "1.9"
  3. author: Chavez
  4. short_description: Interact with Consul Status API
  5. description:
  6. - Use Consul Status API in your playbooks and roles
  7. options:
  8. action:
  9. description:
  10. - One of [leader, peers]
  11. required: true
  12. dc:
  13. desription:
  14. - The datacenter to use
  15. required: false
  16. default: dc1
  17. host:
  18. description:
  19. - Consul host
  20. required: true
  21. default: 127.0.0.1
  22. port:
  23. description:
  24. - Consul API port
  25. required: true
  26. version:
  27. description:
  28. - Consul API version
  29. required: true
  30. default: v1
  31. # informational: requirements for nodes
  32. requirements: [ ]

Testing

You will need to be running a consul server locally to run the test playbook.

Run consul with

  • DC1: consul agent --server --bootstrap-expect=1 --data-dir=ci/consul/dc1/ --log-level=debug --config-file=ci/consul/dc1/config.json
  • DC2: consul agent --server --bootstrap-expect=1 --config-file=ci/consul/dc2/config.json --data-dir=ci/consul/dc2 --log-level=debug

Then you can run the test playbook with ansible-playbook -i ./hosts test-consul.yml

TODO

  • ACL API
    • /v1/acl/create
    • /v1/acl/update
    • /v1/acl/destroy/<id>
    • /v1/acl/info/<id>
    • /v1/acl/clone/<id>
    • /v1/acl/list
    • /v1/acl/replication
  • Agent API
    • /v1/agent/checks
    • /v1/agent/services
    • /v1/agent/members
    • /v1/agent/self
    • /v1/agent/maintenance
    • /v1/agent/join/<address>
    • /v1/agent/force-leave/<node>
    • /v1/agent/check/register
    • /v1/agent/check/deregister/<checkID>
    • /v1/agent/check/pass/<checkID>
    • /v1/agent/check/warn/<checkID>
    • /v1/agent/check/fail/<checkID>
    • /v1/agent/check/update/<checkID>
    • /v1/agent/service/register
    • /v1/agent/service/deregister/<serviceID>
    • /v1/agent/service/maintenance/<serviceID>
  • Catalog API
    • /v1/catalog/register
    • /v1/catalog/deregister
    • /v1/catalog/datacenters
    • /v1/catalog/nodes
    • /v1/catalog/services
    • /v1/catalog/service/<service>
    • /v1/catalog/node/<node>
  • Coordinate API
    • /v1/coordinate/datacenters
    • /v1/coordinate/nodes
  • Events API
    • fire
    • list
  • Health Checks API
    • /v1/health/node/<node>
    • /v1/health/checks/<service>
    • /v1/health/service/<service>
    • /v1/health/state/<state>
  • Key/Value API
    • GET
    • PUT
    • DELETE
    • Session acquire PUT
    • Session release PUT
  • Prepared Queries API
    • /v1/query
    • /v1/query/<query
    • /v1/query/<query or name>/execute
    • /v1/query/<query or name>/explain
  • Session API
    • create
    • destroy
    • info
    • node
    • list
    • renew
  • Status API
    • leader
    • peers