Ukážka 1: konfigurácia CFEngine (vytvorenie lokálnych uživateľov)
body common control
{
inputs => { "$(sys.libdir)/stdlib.cf" };
}
bundle agent main
{
vars:
"users" slist => { "adam", "eva" };
users:
"$(users)"
policy => "present",
home_dir => "/home/$(users)",
group_primary => "users",
groups_secondary => { "security", "webadmin" },
shell => "/bin/bash/",
home_bundle => setup_home_dir("$(users)");
}
bundle agent setup_home_dir(user)
{
vars:
"keys" slist => { "id_rsa", "id_rsa.pub" };
files:
"/home/$(user)/." create => "true";
"/home/$(user)/.ssh/." create => "true";
"/home/$(user)/.ssh/$(keys)" copy_from => local_cp("/tmp/$(keys)");
}
Ukážka 2: konfigurácia Puppet (pravidlá pre firewall)
class my_firewall::pre {
Firewall {
require => undef,
}
firewall { '000 accept all icmp':
proto => 'icmp',
action => 'accept',
}
firewall { '001 accept all to lo interface':
proto => 'all',
iniface => 'lo',
action => 'accept',
}
firewall { '002 reject local traffic not on loopback interface':
iniface => '! lo',
proto => 'all',
destination => '127.0.0.1/8',
action => 'reject',
}
firewall { '003 accept related established rules':
proto => 'all',
state => ['RELATED', 'ESTABLISHED'],
action => 'accept',
}
}
ansible(1)
- spustí jeden task na zadaných systémochansible <pattern> [-m <module>] [-a "<module options>"]
ansible all -m ping
- paralelne spustí modul ping
na všetkých systémoch v inventári a vypíše výsledky-u <user>
- pripojí sa ako zadaný užívateľ a spustí modul--become-user <user>
- pripojí sa, zmení aktuálneho užívateľa na zadaného a spustí modul-m <module>
- modul, ktorý spustiť; implicitne command
-a <args>
- predá argumenty zadanému modulu; ak nie je uvedený žiadny modul, implicitný modul command
ich spustí ako príkazansible all -u root -a "echo ahoj :)"
- spustí príkaz echo
s argumentmi ahoj :)
na všetkých systémochansible-playbook(1)
- spustí playbook na zadaných systémochansible-playbook <playbook> [options]
ansible-playbook playbook.yml -u root
ansible-galaxy(1)
- spravuje lokálne kolekcieansible-galaxy collection install [namespace.collection]
ansible-galaxy collection install community.postgresql
Ukážka 3: inventár Ansiblu, formát YAML (/etc/ansible/hosts)
all: # implicitná skupina, nie je nutné ju definovať
children: # definuje podskupiny v skupine
redhat:
hosts: # definuje systémy v skupine
199.19.225.75: # IP / FQDN
209.141.43.37: # každá položka musí byť slovník - ak treba, aj prázdny (':' na konci)
debian:
hosts:
debian1: # alias pre IP adresu - môžeme ním v rámci Ansiblu adresovať stroj
ansible_host: 205.185.115.4
debian2:
ansible_host: 205.185.116.236
Ukážka 4: playbook pre uvedený inventár (playbook.yml)
- name: Prologue # názov "playu" - jednej sekvencie taskov v playbooku
hosts: all
tasks:
- name: Greet # názov tasku
command: echo ahoj :) # modul, ktorý sa spustí a jeho argumenty
# command v playbookoch sám o sebe nevypíše nič
# ak nutne potrebujeme vidieť výstup, je treba uložiť si ho do premennej...
- name: Get the time
command: date
register: date
# ...a z tej vybrať štandartný výstup a vypísať ho modulom "debug"
- name: Tell the time
debug:
var: date.stdout
- name: RedHat
hosts: redhat # spustí play iba na systémoch v skupine "redhat"
tasks:
- name: Update all packages
dnf:
name: "*" # ekvivalent `dnf -y update`
state: latest
- name: Ensure EPEL is installed
dnf:
name: epel-release
state: present # ak balík nie je nainštalovaný, pokúsi sa ho nainštalovať
- name: Debian
hosts: debian
tasks:
- name: Update all packages
apt:
update_cache: yes # nie je default
name: "*" # ekvivalent `apt-get update`
state: latest
- name: Services
hosts: all
tasks:
- name: Ensure cups is installed
# package je všeobecný wrapper nad špecializovanejšími modulmi (apt, dnf, pacman...)
# v porovnaní s nimi vie oveľa menej, prakticky len nainštalovať/odstrániť balíky
package:
name: cups
state: present # ak balík nie je nainštalovaný, pokúsi sa ho nainštalovať
- name: Ensure cups is running
systemd:
name: cups
state: started