Progress on Issue #2: Ansible Base Configuration Completed: - ✅ Ansible installed via pipx (isolated Python environment) - ✅ Hetzner Cloud dynamic inventory configured - ✅ Ansible configuration (ansible.cfg) - ✅ Common role for base system hardening: - SSH hardening (key-only, no root password) - UFW firewall configuration - Fail2ban for SSH protection - Automatic security updates - Timezone and system packages - ✅ Comprehensive Ansible README with setup guide Architecture Updates: - Added Decision #15: pipx for isolated Python environments - Updated ADR changelog with pipx adoption Still TODO for #2: - Docker role - Traefik role - Setup playbook - Deploy playbook - Testing against live server Files added: - ansible/README.md - Complete Ansible guide - ansible/ansible.cfg - Ansible configuration - ansible/hcloud.yml - Hetzner dynamic inventory - ansible/roles/common/* - Base hardening role Partial progress on #2 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
39 lines
820 B
INI
39 lines
820 B
INI
[defaults]
|
|
# Inventory configuration
|
|
inventory = hcloud.yml
|
|
host_key_checking = False
|
|
interpreter_python = auto_silent
|
|
|
|
# Performance
|
|
forks = 10
|
|
gathering = smart
|
|
fact_caching = jsonfile
|
|
fact_caching_connection = /tmp/ansible_facts
|
|
fact_caching_timeout = 86400
|
|
|
|
# Output
|
|
stdout_callback = yaml
|
|
bin_ansible_callbacks = True
|
|
display_skipped_hosts = False
|
|
|
|
# SSH
|
|
remote_user = root
|
|
private_key_file = ~/.ssh/ptt_infrastructure
|
|
timeout = 30
|
|
|
|
# Roles
|
|
roles_path = ./roles
|
|
|
|
[inventory]
|
|
# Enable Hetzner Cloud dynamic inventory plugin
|
|
enable_plugins = hetzner.hcloud.hcloud
|
|
|
|
[privilege_escalation]
|
|
become = True
|
|
become_method = sudo
|
|
become_user = root
|
|
become_ask_pass = False
|
|
|
|
[ssh_connection]
|
|
pipelining = True
|
|
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
|