В данный момент я изучаю замечательный инструмент Ansible.
Ansible — сравнительно молодая система управления конфигурацией, его история насчитывает чуть более четырех лет. Но, несмотря на это, он стремительно и быстро ворвался в мир систем управления конфигурацией, потеснив Chef, Puppet и SaltStack.
Давайте посмотрим на него внимательно, чтобы понять, почему он так любим технарями.
Итак, чем же хорош ansbile:
- низкий порог входа;
- декларативный язык описания конфигурации;
- на управляемые узлы не нужно устанавливать никакого дополнительного ПО;
- просто написать дополнительный модуль.
Установку я описал чуть ранее: http://blog.asidorov.name/2016/02/ansible-ubuntu-1204.html
Добавим в /etc/ansible/hosts новый хост:
[test]
ubuntu ansible_ssh_host=192.168.0.102 ansible_connection=ssh ansible_ssh_user=root
# cat web-notls.yml
- name: Configure webserver with nginx # название плейбука
hosts: ubuntu # хосты к которым будет применен плейбук
sudo: True
tasks: # Задачи, которые надо выполнить на удаленном хосте
- name: Install nginx # Название задачи
apt: name=nginx update_cache=yes # используем модуль apt для обновления кеша пакетов (update_cache=yes) и установки nginx (name=nginx)
- name: copy nginx config file # Скопируем файл files/nginx.conf с локального сервера на удаленный хост
copy: src=files/nginx.conf dest=/etc/nginx/sites-available/default
- name: Enable configuration # создадим симлинк для включения сайта
file: >
dest=/etc/nginx/sites-enabled/default
src=/etc/nginx/sites-available/default
state=link
- name: copy index.html # скопируем с локального сервера файл templates/index.html.j2 с правами доступа 0644
template: src=templates/index.html.j2 dest=/usr/share/nginx/html/index.html
mode=0644
- name: restart nginx # Перезапустим nginx
service: name=nginx state=restarted
Содержимое files/nginx.conf:
# cat files/nginx.conf
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
server_name ans.com www.ans.com;
location / {
try_files $uri $uri/ =404;
}
}
Запустим этот плейбук:
# ansible-playbook web-notls.yml
PLAY [Configure webserver with nginx] ******************************************
TASK [setup] *******************************************************************
ok: [ubuntu]
TASK [Install nginx] ***********************************************************
changed: [ubuntu]
TASK [copy nginx config file] **************************************************
changed: [ubuntu]
TASK [Enable configuration] ****************************************************
ok: [ubuntu]
TASK [copy index.html] *********************************************************
changed: [ubuntu]
TASK [restart nginx] ***********************************************************
changed: [ubuntu]
PLAY RECAP *********************************************************************
ubuntu : ok=6 changed=4 unreachable=0 failed=0
Так как я задал сервер нейм ans.com и прописал в hosts: 192.168.0.102 ans.com, то при заходе на ans.com получаю такую картину:
# cat web-tls.yml
- name: Configure webserver with nginx and tls
hosts: ubuntu
sudo: True
vars: # Определим переменные для плейбука
key_file: /etc/nginx/ssl/nginx.key
cert_file: /etc/nginx/ssl/nginx.crt
conf_file: /etc/nginx/sites-available/default
server_name: ans.com
tasks:
- name: Install nginx
apt: name=nginx update_cache=yes cache_valid_time=3600
- name: create directories for ssl certificates # Создадим директорию для TLS
file: path=/etc/nginx/ssl state=directory
# Копируем TLS файлы
- name: copy TLS key
copy: src=files/nginx.key dest={{ key_file }} owner=root mode=0600
- name: copy TLS certificate
copy: src=files/nginx.crt dest={{ cert_file }}
- name: copy nginx config file
template: src=templates/nginx.conf.j2 dest={{ conf_file }}
# Тут добавилось notify: restart nginx - это означает, что необходимо запустить обработчик с именем restart nginx
- name: enable configuration
file: dest=/etc/nginx/sites-enabled/default src={{ conf_file }} state=link
notify: restart nginx
- name: copy index.html
template: src=templates/index.html.j2 dest=/usr/share/nginx/html/index.html mode=0644
# Сам обработчик, который перезапускает nginx
handlers:
- name: restart nginx
service: name=nginx state=restarted
Генерируем SSL сертификат:
# openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -subj /CN=ans.com -keyout files/nginx.key -out files/nginx.crt
Generating a 2048 bit RSA private key
.........................................................................................+++
..........................+++
writing new private key to 'files/nginx.key'
-----
Ansible — сравнительно молодая система управления конфигурацией, его история насчитывает чуть более четырех лет. Но, несмотря на это, он стремительно и быстро ворвался в мир систем управления конфигурацией, потеснив Chef, Puppet и SaltStack.
Давайте посмотрим на него внимательно, чтобы понять, почему он так любим технарями.
Итак, чем же хорош ansbile:
- низкий порог входа;
- декларативный язык описания конфигурации;
- на управляемые узлы не нужно устанавливать никакого дополнительного ПО;
- просто написать дополнительный модуль.
Установку я описал чуть ранее: http://blog.asidorov.name/2016/02/ansible-ubuntu-1204.html
Добавим в /etc/ansible/hosts новый хост:
[test]
ubuntu ansible_ssh_host=192.168.0.102 ansible_connection=ssh ansible_ssh_user=root
Пример 1:
Создадим простой плейбук и проверим его работу:# cat web-notls.yml
- name: Configure webserver with nginx # название плейбука
hosts: ubuntu # хосты к которым будет применен плейбук
sudo: True
tasks: # Задачи, которые надо выполнить на удаленном хосте
- name: Install nginx # Название задачи
apt: name=nginx update_cache=yes # используем модуль apt для обновления кеша пакетов (update_cache=yes) и установки nginx (name=nginx)
- name: copy nginx config file # Скопируем файл files/nginx.conf с локального сервера на удаленный хост
copy: src=files/nginx.conf dest=/etc/nginx/sites-available/default
- name: Enable configuration # создадим симлинк для включения сайта
file: >
dest=/etc/nginx/sites-enabled/default
src=/etc/nginx/sites-available/default
state=link
- name: copy index.html # скопируем с локального сервера файл templates/index.html.j2 с правами доступа 0644
template: src=templates/index.html.j2 dest=/usr/share/nginx/html/index.html
mode=0644
- name: restart nginx # Перезапустим nginx
service: name=nginx state=restarted
Содержимое files/nginx.conf:
# cat files/nginx.conf
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
server_name ans.com www.ans.com;
location / {
try_files $uri $uri/ =404;
}
}
Содержимое templates/index.html.j2:
# cat templates/index.html.j2
<html>
<head>
<title>Welcome to ansible</title>
</head>
<body>
<h1> nginx, configured by Ansible</h1>
<p>If you can see this, Ansible successfully installed nginx.</p>
<p>{{ ansible_managed }}</p>
</body>
</html>
# ansible-playbook web-notls.yml
PLAY [Configure webserver with nginx] ******************************************
TASK [setup] *******************************************************************
ok: [ubuntu]
TASK [Install nginx] ***********************************************************
changed: [ubuntu]
TASK [copy nginx config file] **************************************************
changed: [ubuntu]
TASK [Enable configuration] ****************************************************
ok: [ubuntu]
TASK [copy index.html] *********************************************************
changed: [ubuntu]
TASK [restart nginx] ***********************************************************
changed: [ubuntu]
PLAY RECAP *********************************************************************
ubuntu : ok=6 changed=4 unreachable=0 failed=0
Так как я задал сервер нейм ans.com и прописал в hosts: 192.168.0.102 ans.com, то при заходе на ans.com получаю такую картину:
Пример 2:
Создадим плейбук для настройки nginx с TLS:# cat web-tls.yml
- name: Configure webserver with nginx and tls
hosts: ubuntu
sudo: True
vars: # Определим переменные для плейбука
key_file: /etc/nginx/ssl/nginx.key
cert_file: /etc/nginx/ssl/nginx.crt
conf_file: /etc/nginx/sites-available/default
server_name: ans.com
tasks:
- name: Install nginx
apt: name=nginx update_cache=yes cache_valid_time=3600
- name: create directories for ssl certificates # Создадим директорию для TLS
file: path=/etc/nginx/ssl state=directory
# Копируем TLS файлы
- name: copy TLS key
copy: src=files/nginx.key dest={{ key_file }} owner=root mode=0600
- name: copy TLS certificate
copy: src=files/nginx.crt dest={{ cert_file }}
- name: copy nginx config file
template: src=templates/nginx.conf.j2 dest={{ conf_file }}
# Тут добавилось notify: restart nginx - это означает, что необходимо запустить обработчик с именем restart nginx
- name: enable configuration
file: dest=/etc/nginx/sites-enabled/default src={{ conf_file }} state=link
notify: restart nginx
- name: copy index.html
template: src=templates/index.html.j2 dest=/usr/share/nginx/html/index.html mode=0644
# Сам обработчик, который перезапускает nginx
handlers:
- name: restart nginx
service: name=nginx state=restarted
# openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -subj /CN=ans.com -keyout files/nginx.key -out files/nginx.crt
Generating a 2048 bit RSA private key
.........................................................................................+++
..........................+++
writing new private key to 'files/nginx.key'
-----
Содержимое templates/nginx.conf.j2:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
listen 443 ssl;
root /usr/share/nginx/html;
index index.html index.htm;
server_name {{ server_name }} www.{{ server_name }};
ssl_certificate {{ cert_file }};
ssl_certificate_key {{ key_file }};
location / {
try_files $uri $uri/ =404;
}
}
Запустим этот плейбук:
# ansible-playbook web-tls.yml
PLAY [Configure webserver with nginx and tls] **********************************
TASK [setup] *******************************************************************
ok: [ubuntu]
TASK [Install nginx] ***********************************************************
changed: [ubuntu]
TASK [create directories for ssl certificates] *********************************
ok: [ubuntu]
TASK [copy TLS key] ************************************************************
ok: [ubuntu]
TASK [copy TLS certificate] ****************************************************
ok: [ubuntu]
TASK [copy nginx config file] **************************************************
changed: [ubuntu]
TASK [enable configuration] ****************************************************
ok: [ubuntu]
TASK [copy index.html] *********************************************************
ok: [ubuntu]
RUNNING HANDLER [restart nginx] ************************************************
changed: [ubuntu]
PLAY RECAP *********************************************************************
ubuntu : ok=9 changed=3 unreachable=0 failed=0
Комментариев нет:
Отправить комментарий