3.4 Ρύθμιση φακέλων εργασίας 📁

Η δομή που θα φτιάξουμε

Πριν εγκαταστήσουμε την Ansible, ας οργανώσουμε σωστά τους φακέλους εργασίας. Μια καλή δομή εξαρχής γλιτώνει πολύ μπέρδεμα αργότερα.

/home/ansible/
└── ansible/                    ← ο κεντρικός φάκελος εργασίας
    ├── ansible.cfg             ← κεντρική ρύθμιση Ansible
    ├── inventory/              ← οι servers μας
    │   ├── hosts.ini           ← static inventory
    │   └── group_vars/         ← μεταβλητές ανά group
    │       └── all.yml         ← μεταβλητές για όλους
    ├── playbooks/              ← τα playbooks μας
    ├── roles/                  ← τα roles μας
    ├── files/                  ← αρχεία που στέλνουμε στους servers
    └── templates/              ← Jinja2 templates

Βήμα 1: Δημιουργία δομής φακέλων

# Σιγουρέψου ότι είσαι ως ansible user
# ansible@ansible-controller:~$

# Δημιουργία όλης της δομής με μία εντολή
mkdir -p ~/ansible/{inventory/group_vars,playbooks,roles,files,templates}

# Επαλήθευση με tree
tree ~/ansible/

# Αναμενόμενο output:
# /home/ansible/ansible/
# ├── files/
# ├── inventory/
# │   └── group_vars/
# ├── playbooks/
# ├── roles/
# └── templates/

📝 Αν δεν έχεις tree:

sudo apt install tree -y

Βήμα 2: Δημιουργία ansible.cfg

Αυτό είναι το κεντρικό αρχείο ρυθμίσεων της Ansible. Θα το αναλύσουμε πλήρως στο Κεφάλαιο 5, αλλά ας φτιάξουμε μια βασική έκδοση τώρα:

cat > ~/ansible/ansible.cfg << 'EOF'
[defaults]
# Το inventory μας
inventory           = ./inventory/hosts.ini
deprecation_warnings = False
interpreter_python   = auto_silent

# Ο χρήστης σύνδεσης στους remote servers
remote_user         = ansible

# Το SSH private key μας
private_key_file    = /home/ansible/.ssh/id_ed25519

# Πόσοι servers παράλληλα (default: 5)
forks               = 10

# Απενεργοποίηση host key checking (βολικό για αρχή)
host_key_checking   = False

# Καλύτερο output
stdout_callback     = default
result_format       = yaml

# Logging
log_path            = /home/ansible/ansible/ansible.log

[privilege_escalation]
# Sudo ρυθμίσεις
become              = true
become_method       = sudo
become_user         = root
become_ask_pass     = false
EOF

⚠️ Σημείωση για το host_key_checking = False: Για εκμάθηση είναι βολικό γιατί δεν ρωτάει κάθε φορά για νέους servers. Σε production περιβάλλον το θέτουμε True για ασφάλεια. Θα το δούμε στο Κεφάλαιο 5.


Βήμα 3: Δημιουργία βασικού Inventory

cat > ~/ansible/inventory/hosts.ini << 'EOF'
# ============================================
# Ansible Inventory
# Controller: ansible@ansible-controller
# ============================================

# Ο ίδιος ο controller
[controller]
localhost ansible_connection=local

# Debian based servers (Ubuntu, Debian, Armbian)
[debian_based]
# server01 ansible_host=192.168.1.X

# RedHat based servers (Rocky, AlmaLinux, CentOS)
[redhat_based]
# server01 ansible_host=192.168.1.X

# openSUSE based servers
[opensuse_based]
# server01 ansible_host=192.168.1.X

# Όλοι οι managed servers μαζί
[all_managed:children]
debian_based
redhat_based
opensuse_based

# Κοινές μεταβλητές για ΟΛΟΥΣ
[all:vars]
ansible_user                = ansible
ansible_ssh_private_key_file= /home/ansible/.ssh/id_ed25519
ansible_become              = true
ansible_become_method       = sudo
EOF

Βήμα 4: Δημιουργία group_vars

cat > ~/ansible/inventory/group_vars/all.yml << 'EOF'
---
# Μεταβλητές που ισχύουν για ΟΛΟΥΣ τους servers

# Timezone
system_timezone: "Europe/Athens"

# Κοινά packages που θέλουμε παντού
common_packages:
  - curl
  - wget
  - git
  - nano
  - htop
EOF

Βήμα 5: Επαλήθευση δομής

# Δες την τελική δομή
tree ~/ansible/

# Αναμενόμενο:
# /home/ansible/ansible/
# ├── ansible.cfg
# ├── files/
# ├── inventory/
# │   ├── group_vars/
# │   │   └── all.yml
# │   └── hosts.ini
# ├── playbooks/
# ├── roles/
# └── templates/

# Έλεγχος ansible.cfg
cat ~/ansible/ansible.cfg

# Έλεγχος inventory
cat ~/ansible/inventory/hosts.ini

Έλεγχος 3.4

✅ Δομή φακέλων δημιουργήθηκε
✅ ansible.cfg με βασικές ρυθμίσεις
✅ inventory/hosts.ini έτοιμο
✅ inventory/group_vars/all.yml έτοιμο