first commit
This commit is contained in:
112
playbooks/1.txt
Normal file
112
playbooks/1.txt
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
############################################################
|
||||
# 1. Infrastruktur erstellen
|
||||
############################################################
|
||||
|
||||
- name: Provision infrastructure in Hetzner Cloud
|
||||
hosts: localhost
|
||||
gather_facts: true
|
||||
|
||||
vars:
|
||||
base_name: ansible-demo
|
||||
ssh_key_name: ansible-key
|
||||
|
||||
tasks:
|
||||
|
||||
- name: Set unique server name (timestamp based)
|
||||
set_fact:
|
||||
server_name: "{{ base_name }}-{{ ansible_date_time.epoch }}"
|
||||
|
||||
- name: Show calculated server name
|
||||
debug:
|
||||
var: server_name
|
||||
|
||||
- name: Create SSH key in Hetzner
|
||||
hetzner.hcloud.hcloud_ssh_key:
|
||||
api_token: "{{ hcloud_token }}"
|
||||
name: "{{ ssh_key_name }}"
|
||||
public_key: "{{ hcloud_ssh_public_key }}"
|
||||
state: present
|
||||
|
||||
- name: Create Hetzner Cloud Server
|
||||
hetzner.hcloud.hcloud_server:
|
||||
api_token: "{{ hcloud_token }}"
|
||||
name: "{{ server_name }}"
|
||||
server_type: "{{ hcloud_server_type }}"
|
||||
image: "{{ hcloud_image }}"
|
||||
location: "{{ hcloud_location }}"
|
||||
ssh_keys:
|
||||
- "{{ ssh_key_name }}"
|
||||
firewalls: "{{ hcloud_firewalls | default(omit) }}"
|
||||
state: present
|
||||
register: created_server
|
||||
|
||||
- name: Store server info in Supabase
|
||||
ansible.builtin.uri:
|
||||
url: "{{ supabase_url }}/rest/v1/servers"
|
||||
method: POST
|
||||
headers:
|
||||
apikey: "{{ supabase_api_key }}"
|
||||
Authorization: "Bearer {{ supabase_api_key }}"
|
||||
Content-Type: "application/json"
|
||||
Prefer: "resolution=merge-duplicates"
|
||||
body_format: json
|
||||
body:
|
||||
server_id: "{{ created_server.hcloud_server.id }}"
|
||||
name: "{{ created_server.hcloud_server.name }}"
|
||||
ipv4: "{{ created_server.hcloud_server.ipv4_address }}"
|
||||
server_type: "{{ created_server.hcloud_server.server_type }}"
|
||||
location: "{{ created_server.hcloud_server.location }}"
|
||||
status: "{{ created_server.hcloud_server.status }}"
|
||||
status_code: [200, 201]
|
||||
delegate_to: localhost
|
||||
|
||||
- name: Add new server to runtime inventory
|
||||
add_host:
|
||||
name: newserver
|
||||
ansible_host: "{{ created_server.hcloud_server.ipv4_address }}"
|
||||
ansible_user: root
|
||||
ansible_ssh_private_key_file: "~/.ssh/id_ed25519"
|
||||
|
||||
- name: Wait for SSH to become reachable
|
||||
wait_for:
|
||||
host: "{{ created_server.hcloud_server.ipv4_address }}"
|
||||
port: 22
|
||||
delay: 5
|
||||
timeout: 180
|
||||
state: started
|
||||
|
||||
|
||||
############################################################
|
||||
# 2. Server konfigurieren
|
||||
############################################################
|
||||
|
||||
- name: Configure new server
|
||||
hosts: newserver
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
vars:
|
||||
new_username: sysadmin46E9
|
||||
|
||||
tasks:
|
||||
|
||||
- name: Create sudo user
|
||||
ansible.builtin.user:
|
||||
name: "{{ new_username }}"
|
||||
shell: /bin/bash
|
||||
groups: sudo
|
||||
append: yes
|
||||
create_home: yes
|
||||
|
||||
- name: Add SSH key for user
|
||||
ansible.posix.authorized_key:
|
||||
user: "{{ new_username }}"
|
||||
key: "{{ lookup('file', '~/.ssh/id_ed25519.pub') }}"
|
||||
|
||||
- name: Allow passwordless sudo
|
||||
ansible.builtin.copy:
|
||||
dest: "/etc/sudoers.d/{{ new_username }}"
|
||||
content: "{{ new_username }} ALL=(ALL) NOPASSWD:ALL"
|
||||
mode: '0440'
|
||||
|
||||
Reference in New Issue
Block a user