Удобная конструкция для установки хелма ансиблом
#helm #ansible
- name: install helm
unarchive:
src: https://storage.googleapis.com/kubernetes-helm/helm-{{ helm_version }}-linux-amd64.tar.gz
dest: /usr/local/bin
remote_src: yes
extra_opts:
- --strip-components=1
- linux-amd64/helm
creates: /usr/local/bin/helm
#helm #ansible
изолированные vars в каждом вызове ansible role
нерабочий вариант:
рабочий вариант:
нерабочий вариант:
---
- hosts: webservers
roles:
- common
- role: foo_app_instance
vars:
app_port: 5000
- role: foo_app_instance
vars:
dir: '/opt/b'
app_port: 5001
рабочий вариант:
---
- hosts: webservers
roles:
- common
- role: foo_app_instance
app_port: 5000
- role: foo_app_instance
dir: '/opt/b'
app_port: 5001
Отличие первого варианта от второго в том что vars передает переменные на уровень хоста. А вторая запись, вызывает role_vars, и действует только в рамках роли.
#ansible
объединение значений элементов массива в ansible
#ansible
myvar:
key1:
- value1
- value2
key2:
- value3
key3:
- value4
- value5
- value6
- name: Debug myvar_list
debug:
msg: >-
{{ myvar.values() | sum(start=[]) }}
TASK [Debug myvar_list]
ok: [localhost] =>
msg:
- value1
- value2
- value3
- value4
- value5
- value6
#ansible
ansible remove unmanaged files
на примере syslog-ng. сначала получаем список файлов в папке, потом удалем те, которые нами не поддерживаются.
Список поддерживаемых файлов находится в переменной configs, которая или задается заранее или формируется в момент раскатки конфигов на хост, если имена и количество конечных файлов на конечном хосте отлично от списка шаблонов подаваемых модулю
#ansible
на примере syslog-ng. сначала получаем список файлов в папке, потом удалем те, которые нами не поддерживаются.
- name: get files in syslog conf.d dir
shell: ls -1 /etc/syslog-ng/conf.d
register: syslog_existing_files
changed_when: false
- name: remove unmanaged syslog configs
file:
path: "/etc/syslog-ng/conf.d/{{ item }}"
state: absent
with_items: "{{ syslog_existing_files.stdout_lines }}"
when: item not in configs
Список поддерживаемых файлов находится в переменной configs, которая или задается заранее или формируется в момент раскатки конфигов на хост, если имена и количество конечных файлов на конечном хосте отлично от списка шаблонов подаваемых модулю
#ansible
jinja как не ставить последнюю запятую в цикле
дано: переменная с количеством серверов
задача: составить строку вида
1) вместо последней запятой стоит /kafka
2) необходимо убрать newline который добавляется на каждом проходе
Решение:
з.ы. счет начинается с нуля, поэтому для красоты именования серверов инкрементирую переменную server.
з.з.ы еще подсказали вот такой способ:
#jinja #ansible #kafka #zookeeper
дано: переменная с количеством серверов
задача: составить строку вида
zookeeper.connect=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181/kafkaв целом решается простым циклом for + 2 небольших нюанса:
1) вместо последней запятой стоит /kafka
2) необходимо убрать newline который добавляется на каждом проходе
Решение:
zookeeper.connect=все довольно просто - запятая ставится конструкцией
{%- for server in range(servers_count) -%}
zookeeper{{ server+1 }}:2181{% if not loop.last %},{% endif %}
{%- endfor %}/kafka
{% if not loop.last %},{% endif %}
, а переносы строк убираются постановкой дефиса у открывающих и закрывающих тегов {% и %}.з.ы. счет начинается с нуля, поэтому для красоты именования серверов инкрементирую переменную server.
з.з.ы еще подсказали вот такой способ:
zookeeper.connect={{ range(1, servers_count + 1) | map('regex_replace', '^(.*)$', 'zookeeper\\1:2181') | join(',') }}/kafka
#jinja #ansible #kafka #zookeeper
Размышления на тему питона в шапочных дистрах
это для тех кто стал задумываться о том как скрестить интерпретаторы в разных осях и не сойти с ума...
https://developers.redhat.com/blog/2018/11/14/python-in-rhel-8/
#ansible #python #centos
это для тех кто стал задумываться о том как скрестить интерпретаторы в разных осях и не сойти с ума...
https://developers.redhat.com/blog/2018/11/14/python-in-rhel-8/
#ansible #python #centos