Всем привет.
Продолжим тему инсталлирования софта с помощью Ansible в Linux. Представим задачу что у нас есть сервер mysql который привязан на адрес 127.0.0.1. А мы хотим дать к нему доступ для всех. Т.е. имеем: [mysqld] bind-address = 127.0.0.1. А хотим указать как: [mysqld] bind-address = 0.0.0.0.
1) Пишем наш плейбук:
---
- name: Reconfigure MariaDB Server to listen for external connections
lineinfile:
path: /etc/mysql/mariadb.conf.d/50-server.cnf
regexp: '^bind-address\s+='
line: 'bind-address = 0.0.0.0'
insertafter: '^\[mysqld\]'
state: present
- name: Restart MariaDB to pick up configuration changes
service:
name: mariadb
state: restarted
Давайте задачу lineinfile рассмотрим более подробно:
-path: Сообщает своему модулю какой файл настроек изменять.
-regexp: Применяется для определения имеющейся изменяемой строки, когда она присутствует, чтобы у нас не было двух конфликтующих директив bind-address.
-line: Значение строки для замены/ вставки в изменяемый файл настроек.
-insertafter: Когда не найдено соответствие regexp (то есть данная строка не представлена в изменяемом файле), данная директива обеспечит вставку модулем lineinfile некой новой строки после имеющегося оператора [mysqld], тем самым обеспечивая его наличие в верной части данного файла.
-state: Установка в значение present обеспечивает что данная строка присутствует в изменяемом файле, даже когда нет первоначального совпадения regexp - в такой ситуации в изменяемый файл добавляется некая строка в соответствии со значением line.
2) другая задача - отключить SSH для root:
---
- name: Disable root logins over SSH
lineinfile:
dest: /etc/ssh/sshd_config
regexp: "^PermitRootLogin"
line: "PermitRootLogin no"
state: present
3) Еще одна задача - настройкa конфигурации демона SSH. Формально конфигурация sshd_config выглядит так:
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding no
PrintMotd no
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
PasswordAuthentication no
PermitRootLogin no
Мы сохраним этот файл "sshd_config" внутри структуры своего каталога roles/ и развернём его с помощью следующих задач роли. Здесь мы пользуемся модулем Ansible copy для копирования созданного нами ранее и сохранённого внутри самой роли файла sshd_config в наш целевой хост и обеспечения что его обладатель и режим подходящие для самого демона SSH.
roles/
--- securesshd
--- files
| --- sshd_config
--- tasks
--- main.yml
---
- name: Copy SSHd configuration to target host
copy:
src: files/sshd_config
dest: /etc/ssh/sshd_config
owner: root
group: root
mode: 0644
- name: Restart SSH daemon
service:
name: ssh
state: restarted
---
- name: Reconfigure SSH
hosts: all
become: yes
roles:
- securesshd
4) Улучшим настройку конфигурации демона SSH с уведомлением о рестарте сервиса.
Получаемый в результате каталог roles должен выглядеть так:
roles/
--- securesshd
--- files
| --- sshd_config
--- handlers
| --- main.yml
--- tasks
--- main.yml
securesshd.yml
---
- name: Copy SSHd configuration to target host
copy:
src: files/sshd_config
dest: /etc/ssh/sshd_config
owner: root
group: root
mode: 0644
notify:
- Restart SSH daemon
Теперь нам требуется в своей роли создать каталог handlers/ и добавить в неё свой ранее удалённй код обработчика, чтобы он выглядел так:
main.yml
---
- name: Restart SSH daemon
service:
name: ssh
state: restarted
5) еще один вариант настройки конфигурации демона SSH с уведомлением о рестарте сервиса.
Restart SSH daemon выполнится только раз.
---
- name: Copy SSHd configuration to target host
copy:
src: files/sshd_config
dest: /etc/ssh/sshd_config
owner: root
group: root
mode: 0644
notify:
- Restart SSH daemon
- name: Perform an additional modification
lineinfile:
path: /etc/ssh/sshd_config
regexp: '^\# Configured by Ansible'
line: '# Configured by Ansible on {{ inventory_hostname }}'
insertbefore: BOF
state: present
notify:
- Restart SSH daemon
Для Python 3:
ReplyDeletepython3 -m http.server
Для Python 2:
python2 -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...