cmacrae.consul
Consul
一个简单明了的 Ansible 角色,用于部署和配置 Consul
特点
使用 YAML 配置 Consul
Consul 服务的配置是通过 YAML 转换为 JSON 来实现的,因此您可以这样表达您的 Consul 配置:
consul_master_token: myToken
consul_server: true
consul_configs:
main:
acl_datacenter: pantheon
acl_master_token: "{{ consul_master_token | to_uuid }}"
bootstrap: true
bind_addr: 0.0.0.0
client_addr: 0.0.0.0
datacenter: pantheon
data_dir: "{{ consul_data_dir }}"
log_level: INFO
node_name: master
server: "{{ consul_server }}"
ui: true
这使用了 Jinja2 过滤器。此角色没有预设的配置条目,因此您无需将 Consul 的配置写成 JSON;您可以简单地用 YAML 的等效语法表达,这意味着它可以放在您的 Ansible 配置的任何位置。
如上例所示,这非常强大,因为它允许您利用 Ansible 中可用的其他过滤器来构建任意数据并将其用于配置。您可以使用 Ansible 模板中的任何表达(包括从清单中获取数据/主机信息等)来进行配置。
上面的示例配置展示了简单的字符串键/值对,但您当然可以在 YAML 中定义任何有效类型,如字典和列表。
如果您不知道怎么将 Consul 的 JSON 配置转为 YAML,可以点击这里使用方便的转换器。
多配置文件部署
如上面的示例所示,consul_configs
变量有一个 main
字典。您可以定义多个配置字典。然后这些配置会被部署到以其父键命名的文件,在 conf.d
目录中。
保持简单
我不太确定这是否应该列为一个功能……但我认为它很有价值。
Consul 作为一款工具,其配置和启动非常简单,因此也值得有一个同样简单的 Ansible 角色。
主要的任务文件仅70多行,包括空白行。主要配置模板? 1行。
保持这个角色简单,使它具有很好的灵活性,并且易于与您可能想要的其他内容进行集成。
Packer 供应支持
此角色的一个非常简单但实用的特性是可以将 consul_packer_provision
设置为 true
(默认值为 false
)。当设置为 true
时,在 Ansible 运行期间,它不会启动 Consul 服务。这是为了让您可以在配置中放置可能无效的值,旨在与 Packer 一起生成某种机器映像使用,后续可以通过某种启动配置/用户脚本/用户数据替换。
要求
这个角色仅在 Ubuntu 16.04 上进行了测试,但应该可以在运行 systemd
并且可用 unzip
包的任何 Linux 发型版上运行。
默认角色变量
consul_group_name: consul
consul_group_gid: 3000
consul_user_name: consul
consul_user_uid: 3000
consul_user_home: /opt/consul
consul_config_dir: "{{ consul_user_home }}/conf.d"
consul_data_dir: "{{ consul_user_home }}/data"
consul_version: 0.8.4
consul_server: false
consul_uri: "https://releases.hashicorp.com/consul/{{ consul_version }}/consul_{{ consul_version }}_linux_amd64.zip"
consul_config_src: main.json.j2
consul_service_file:
src: consul.service.j2
dest: /etc/systemd/system/consul.service
consul_config:
datacenter: dc-1
data_dir: "{{ consul_data_dir }}"
log_level: INFO
node_name: node-1
server: "{{ consul_server }}"
示例剧本
- hosts: consul_servers
vars:
consul_master_token: myToken
consul_server: true
consul_config:
acl_datacenter: pantheon
acl_master_token: "{{ consul_master_token | to_uuid }}"
bootstrap: true
bind_addr: 0.0.0.0
client_addr: 0.0.0.0
datacenter: pantheon
data_dir: "{{ consul_data_dir }}"
log_level: INFO
node_name: master
server: "{{ consul_server }}"
ui: true
roles:
- cmacrae.consul
许可证
MIT
作者信息
由 Calum MacRae 创建
欢迎联系我:
- Twitter: @calumacrae
- 邮箱: [email protected]
- 提出问题
- 贡献代码
ansible-galaxy install cmacrae.consul