- Configuration Management 101: Writing Ansible Playbooks — норм
- Automating Server Setup with Ansible: A DigitalOcean Workshop Kit
- How to Use Ansible Roles to Abstract your Infrastructure Environment
- zsh
- oh-my-zsh
- плагины и настройки к нему
- user'ов и их ssh ключи
- настройки firewall'а (ufw)
- soft
- docker
- openvpn server (конфиги, ключи и т.д)
- socks5
- home-assistant
- hassio
- hacs
- ? mattermost
- ? gitlab-agent
resources: - как добавить свои ssh ключи на вагрант машину: https://stackoverflow.com/questions/30075461/how-do-i-add-my-own-public-key-to-vagrant-vm
После того как прогнали vagrant up
ключи будут скопированы в папки root'а и vagrant пользователей, соответственно зайти под ssh сможем только под ними
ssh root@172.16.20.10
# или
ssh -A vagrant@172.16.20.10
чтобы не писать имя пользователя, можно прописать его в конфиге .ssh
Host 172.16.20.*
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
User vagrant
IdentityFile /Users/ujlbu4/.ssh/id_rsa
resources:
From your local machine or Ansible control node, run:
ansible all -m ping -u vagrant
This command will use Ansible’s built-in ping module to run a connectivity test on all nodes from your default inventory, connecting as vagrant
. The ping module will test:
- if hosts are accessible;
- if you have valid SSH credentials;
- if hosts are able to run Ansible modules using Python.
если все норм вернется что-то типа:
homeserver.v | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
resources:
Galaxy удобен тем, что он как pip install
— не нужно заморачиваться с сабмодулями для ролей — создаешь requirements.txt файл, прописываешь нужные roles (community collections чот не зашли, либо я прост не встретил подходящих), запускаешь:
ansible-galaxy role install -r requirements.yml
и оно все приезжает, ты это коммитишь в репу, ну и апдейтишь при необходимости.
Примечание: чтобы ansible-galaxy устанавливал в нужную папку по умолчанию, то проще ее прописать в ansible.cfg
— поле roles_path
resources:
- https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html — отличный раздел, в котором приведены вомзожные операции на jinja2 переменными (которые повсеместно используются в плейбуках)
- https://docs.ansible.com/ansible/latest/dev_guide/developing_plugins.html — developing plugins
В общем, для одной из community ролей потребовалось преобразовать массив пользователей в массив словарей пользователей:
['user1', 'user2'] --> [{'username': 'user1'}, {'username': 'user2'}]
стандартных фильров для такой операции не нашлось и как позже оказалось, самым простым и быстро было создать свой фильтр по образу и подобию существующих (тыц):
resources: - https://docs.ansible.com/ansible/latest/reference_appendices/faq.html#running-in-a-virtualenv
В моменты, когда не все ansible фильтры отрабатывали, хоть и брались из документации, была мысля, что поскольку ansible преобразует все playbook'и на контроллер машине и использует jinja2 (питоновская либа), то подумал, что возможно у меня в system-site-packages питоновских стоит старая версия jinja'ы и поэтому он не может найти нужный фильтр.
Поэтому, чтобы чисто запустить ансибл на нужной версии питона и с читыми актуальными site-package'ами для него, то можно заюзать virtualenv
.
У меня, конечно, проблема оказалось не в этом, но на будущее все равно полезно знать про такой момент.
resources:
-
ansible
- https://www.techchorus.net/blog/run-your-own-openvpn-server/ — при первом взгляде норм статься с инсрукциями и примерами как что настрорить
- gavika.openvpn — см. playbook execution flow
- gavika.easy_rsa
- а вообще хз, предлагет запускать 3 раза в правильном порядке — "You are responsible to execute the roles the required number of times and in required order", чот идемпотентностью и не пахнет (updated: по коду все же пока этот варик нравится больше чем с stouts в котором много возни было, текущий я ставить не пробовал, но идеалогически он выглядит более правильным.. ну и firewall у него по коду выглядит рабочим, в stouts пришлось руками рул прописывать)
- https://itnext.io/setup-privacy-with-openvpn-using-ansible-b9e613a66f85 — более кардкодный способ, выглядит что как-будто в лоб вот эту инструкцицию (digitalocean) автоматизировал
- https://dteslya.engineer/automation/2019-02-25-ansible-openvpn/ — вот еще чувак, но чот мне не нравится его решение
- исходинки
- вот пример того, что не нравится
- https://github.com/Stouts/Stouts.openvpn — использовал этот, но возни было много (думаю попробовать и переехать на gavika)
- смущает что ключи не подписывают для openvpn-server'а, а сразу используют сгенерированные в rsa, с другой стороны для pet-project'а возможно это норм
- https://www.techchorus.net/blog/run-your-own-openvpn-server/ — при первом взгляде норм статься с инсрукциями и примерами как что настрорить
-
troubleshooting
- https://habr.com/ru/post/233971/ — отличный, подробный обзор openvpn, CA, клиентов — какие оно работает и т.д (дает собственно понимание зависимостей и как следствие сильно помогает в дебаге и настройки конфигов)
- OpenVPN client connection not started , no logs get written
в общем, проблема такая, что
service openvpn status
пишет, что стартанул, но файл с логами не создается (т.е. я даже не мог задебажить почему vpn не подключается), ответы нашел здесь: - https://unix.stackexchange.com/questions/292091/ubuntu-server-16-04-openvpn-seems-not-to-start-no-logs-get-written - https://a20.net/bert/2016/09/27/openvpn-client-connection-not-started-on-ubuntu-16-04/ - плюс почитать в принципе про systemd
TODO:
- загружать ранее сгенеренные ключи (для случая, когда на новый сервак переехали с нуля, чтобы не перездавать всем клиентам новые ключи (*.ovpn) )