zarządzanie konfiguracją
This article is about a fictional communication device. For other uses, see Ansible (disambiguation).
An ansible is a category of fictional device or technology capable of near-instantaneous or superluminal communication. It can send and receive messages to and from a corresponding device over any distance or obstacle whatsoever with no delay, even between star systems.
z Wikipedii
kolega z pracy pisał
bardzo fajne skrypty shellowe
nagle wyjechał na Erasmusa
do Szwecji na pół roku
okazało się, że ma
tygodniowy okres wypowiedzenia
szybkie sprawdzenie,
czym różni się stan faktyczny
od stanu opisanego
ansible galaxy,
czyli gotowe kawałki
konfiguracji z recyklingu
# hosts
all:
hosts:
ld0:
networking:
ipv4_address: 172.31.0.75
nginx:
sites:
- dasie.mimuw.edu.pl
- oi.edu.pl
- szkopul.edu.pl
- main2.edu.pl
fox:
nginx:
sites:
- fox_internal
- OI25lecie
- CEOI2018
chell:
glados:
spr3g[1:13]:
auth:
ldap: no
vars:
ansible_user: ansible
children:
hosts_nginx:
hosts:
ld0:
fox:
chell:
glados:
# site.yml
- hosts: all
roles:
- role: ssh
tags: ['auth']
- role: bash
tags: ['base']
- role: icinga_client
tags: ['monit']
when: monitoring.enabled
- role: syslog
when: syslog is defined
tags: ['logs', 'monit']
# …
- hosts:
- stargate
roles:
- role: openvpn
tags: ['vpn']
- hosts: hosts_nginx
roles:
- role: nginx
when: nginx is defined
tags: ['web']
# roles/nginx/tasks/main.yml
- name: install dependencies
apt:
name: nginx
# roles/nginx/tasks/main.yml
- name: create configuration files
template:
src: "{{ item }}"
dest: "/etc/nginx"
backup: "yes"
mode: 0644
with_items:
- nginx.conf
- ssl_params
- proxy_params
notify:
- reload nginx
# roles/nginx/tasks/main.yml
- name: create diffie-hellman parameters file
shell: |
openssl dhparam -out /etc/nginx/dhparams.pem 2048
args:
creates: /etc/nginx/dhparams.pem
# roles/nginx/tasks/main.yml
- name: copy available site configuration files
template:
src: "nginx_sites/{{ item }}"
dest: "/etc/nginx/sites-available/{{ item }}"
backup: "yes"
mode: 0644
with_items: "{{ nginx.sites | default([]) }}"
notify:
- reload nginx
# dygresja:
# roles/nginx/handlers/main.yml
- name: restart nginx
systemd:
name: nginx
state: restarted
- name: reload nginx
systemd:
name: nginx
state: reloaded
# roles/nginx/tasks/main.yml
- name: gather enabled sites
shell: |
ls /etc/nginx/sites-enabled | cat
register: nginx_sites_enabled_discovery
check_mode: no
changed_when: false
- set_fact:
nginx_sites_enabled: |
{{ nginx_sites_enabled_discovery.stdout_lines | list }}
# roles/nginx/tasks/main.yml
- name: disable disabled sites
file:
path: "/etc/nginx/sites-enabled/{{ item }}"
state: absent
with_items: |
{{ nginx_sites_enabled | difference(nginx.sites|default([])) }}
notify:
- reload nginx
- name: enable enabled sites
file:
src: "/etc/nginx/sites-available/{{ item }}"
dest: "/etc/nginx/sites-enabled/{{ item }}"
state: link
force: yes
with_items: |
{{ nginx.sites | default([]) | difference(nginx_sites_enabled) }}
notify:
- reload nginx
# roles/nginx/tasks/main.yml
- name: enable and start nginx service
systemd:
name: nginx
enabled: yes
state: started
# hosts
all:
children:
hosts_dns:
hosts:
ae86:
vars:
dns:
zones:
- dasie.mimuw.edu.pl
- 31.172.in-addr.arpa
# roles/nsd/templates/nsd.conf
server:
database: ""
username: nsd
ip-address: 127.0.0.1@5300
do-ip4: yes
do-ip6: no
{% for zone in dns.zones %}
zone:
name: {{ zone }}
zonefile: /etc/nsd/{[ zone ]}.zone
{% endfor %}
wykona się szybko, będzie łatwe w edycji, zadziała: wybierz dwa
user { 'harry':
ensure => present,
uid => '1000',
shell => '/bin/bash',
home => '/var/tmp'
}
konfigurowany serwer regularnie sprawdza, czy nie zmieniła się ustalona konfiguracja w repozytorium
komputer konfigurujący wysyła nową konfigurację do konfigurowanego serwera
na konfigurowanym serwerze działa daemon, z którym komunikuje się program konfigurujący
nie wymagamy od serwera konfigurowanego specjalnego przygotowania
wystarczy np. działające ssh lub nawet konsola szeregowa
agentowe | bezagentowe | |
pull | ansible-pull | curl … | sudo sh |
push | salt | ansible, salt-ssh |