Админим с Буквой
5.35K subscribers
302 photos
8 videos
59 files
1.15K links
Канал о системном администрировании, DevOps и немного Инфобеза.

По всем вопросам обращаться к @bykva. Рекламу не размещаю.
Download Telegram
Ansible vmware dynamic inventory

1) включаем поддержку vmware в конфиге ~/.ansible.cfg:

[inventory]
enable_plugins = vmware_vm_inventory

2) устанавливаем необходимые пакеты. Второй пакет - python sdk, команда установки взята из их гитхаба.

pip3 install --upgrade pyvmomi
pip3 install --upgrade git+https://github.com/vmware/vsphere-automation-sdk-python.git

3) записываем в файл доступы (это чисто для дебага, понятно что при нормальной работе это будет выглядеть по-другому)
hosts.vmware.yaml:

plugin: vmware_vm_inventory
strict: False
hostname: 10.65.223.31
username: administrator@vsphere.local
password: Esxi@123$%
validate_certs: False
with_tags: True


4) проверяем:

ansible-inventory --list -i hosts.vmware.yaml


#ansible #vmware
Удобная конструкция для установки хелма ансиблом

  - 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
ansible base64 multiply vars

{
"auths": {
"{{ dkr_url }}": {
"auth": "{{ (dkr_user+':'+dkr_password) | b64encode }}"
},
"{{ dkr_dev_url }}": {
"auth": "{{ (dkr_dev_user+':'+dkr_dev_password) | b64encode }}"
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/19.03.2 (linux)"
}

#ansible #docker
изолированные 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

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. сначала получаем список файлов в папке, потом удалем те, которые нами не поддерживаются.

- 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 как не ставить последнюю запятую в цикле

дано
: переменная с количеством серверов
задача: составить строку вида

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