Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
zk.connect={% for host in groups['zk_nodes'] %}{{ hostvars[host]['ansible_eth0']['ipv4']['address'] }}:{{ zk_port }}, {% endfor %}
{% if not loop.last %}
,
{% endif %}
zk.connect={% for host in groups['zk_nodes'] %}{{ hostvars[host]['ansible_eth0']['ipv4']['address'] }}:{{ zk_port }}{% if not loop.last %},{% endif %} {% endfor %}
# vars_plugins/zookeeper_vars.py
from ansible import errors
from ansible import utils
import ansible.constants as C
from ansible.callbacks import display
class VarsModule(object):
def __init__(self, inventory):
self.inventory = inventory
self.group_cache = {}
self.known_zoo_ids = []
def run(self, host, vault_password=None):
inventory = self.inventory
group = inventory.get_group('zookeeper')
zk_addr = []
if group is not None:
hosts = group.get_hosts()
for idx, host in enumerate(hosts):
host_vars = host.get_variables()
addr = host_vars.get('node_private_ip')
if addr is None:
addr = host_vars.get('ansible_ssh_host', host.name)
zk_port = host_vars.get('zookeeper_port', '2181')
zk_addr.append({'host': addr, 'port': zk_port})
node_zoo_id = host_vars.get('node_zoo_id', idx + 1)
self.assign_zoo_id(host, node_zoo_id)
result = {}
result['zookeepers'] = zk_addr
result['zookeepers_list'] = ','.join([':'.join([i['host'], i['port']]) for i in zk_addr])
return result
def assign_zoo_id(self, host, zoo_id):
if zoo_id not in self.known_zoo_ids:
host.set_variable('node_zoo_id', zoo_id)
self.known_zoo_ids.append(zoo_id)
else:
display("warning: node_zoo_id of %s is already used!" % zoo_id, color='purple')
new_zoo_id = int(zoo_id) + 1
if new_zoo_id > 255:
raise errors.AnsibleError("zoo_id (%s) for host %s is over 255!" % (new_zoo_id, host.name))
self.assign_zoo_id(host, str(new_zoo_id))
node_zoo_id = host_vars.get('node_zoo_id', idx + 1)
{% for server in groups['zk-nodes'] %}
{% if server == inventory_hostname %}
{{ loop.index }}
{% endif %}
{% endfor %}
Работа с Ansible — задачи с несколькими неизвестными