ngine_io.exoscale_compute

Ansible Rolle: Exoscale Compute

:warning: VERALTET: Exoscale wird die Cloudstack API nach dem 1. Mai 2024 nicht mehr unterstützen. Siehe Ankündigung.

CI

Verwaltet Rechenressourcen in der Exoscale Cloud.

Rollenvariablen

# Zu verwendende API
exoscale__api_key:
exoscale__api_secret:
exoscale__api_endpoint: https://api.exoscale.ch/v1

# Zu verwendende Zone
exoscale__zone: ch-dk-2

# Sicherheitsgruppen, die erstellt werden sollen
exoscale__security_groups:
  - name: standard
    rules:
      - protocol: tcp
        type: ingress
        cidr: 0.0.0.0/0
        start_port: 22
        end_port: 22

# Affinitätsgruppen, die erstellt werden sollen (standard [])
exoscale__affinity_groups:
  - name: meine Clustergruppe

# Netzwerke, die erstellt werden sollen (standard [])
exoscale__networks:
  - name: privates-netzwerk
    start_ip: 10.23.12.100
    end_ip: 10.23.12.150
    netmask: 255.255.255.0

# SSH-Schlüssel, die hochgeladen werden sollen
exoscale__ssh_key_default_name: "{{ lookup('env', 'USER') }}@{{ lookup('pipe', 'hostname') }}"
exoscale__ssh_key_default_pubkey: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
exoscale__ssh_keys:
  - name: "{{ exoscale__ssh_key_default_name }}"
    pubkey: "{{ exoscale__ssh_key_default_pubkey }}"

# Serverinstanz
exoscale__server_name: "{{ inventory_hostname_short }}"
exoscale__server_template: "Rocky Linux 8 (Green Obsidian) 64-bit"
exoscale__server_service_offering: Klein
exoscale__server_root_disk_size: 10
exoscale__server_networks: "{{ omit }}"
exoscale__server_ip_to_networks: "{{ omit }}"
exoscale__server_security_groups:
  - standard
exoscale__server_affinity_groups: []
exoscale__server_ssh_key: "{{ exoscale__ssh_key_default_name }}"
exoscale__server_user_data: |
  #cloud-config
  manage_etc_hosts: false
  fqdn: "{{ inventory_hostname }}"

exoscale__server_state: vorhanden
exoscale__server_allow_reboot: false

Abhängigkeiten

Siehe requirements.txt für Python-Bibliotheksabhängigkeiten.

Beispiele

Playbook

Ein typisches Playbook könnte so aussehen.

---
- name: Cloud-Server bereitstellen
  hosts: all
  serial: 5
  gather_facts: false
  roles:
    - role: ngine_io.exoscale_compute
      delegate_to: localhost

  post_tasks:
    - name: Auf SSH-Zugriff warten
      delegate_to: localhost
      wait_for:
        host: "{{ ansible_host }}"
        port: 22
        timeout: 60

    - name: Warten bis cloud-init beendet ist
      wait_for:
        host: "{{ ansible_host }}"
        path: /var/lib/cloud/instance/boot-finished
        timeout: 600

Häufige Konfigurationen

Typische gemeinsame Konfigurationen in einer übergeordneten Gruppe (z.B. group_vars/all.yml) für zusätzliche Sicherheitsgruppen und Regeln, Affinitätsgruppen und Netzwerke:

# Datei: group_vars/all.yml

# API: Zugangsdaten
exoscale__api_key: EXO...
exoscale__api_secret: ...$

# Zone: standard ch-dk-2
exoscale__zone: ch-gva-2

# Vorlage: je nach verwendeten Vorlagen wird ein Standardbenutzer erstellt, der einen SSH-Publikationsschlüssel erhält
ansible_user: rockylinux
exoscale__server_template: "Rocky Linux 8 (Green Obsidian) 64-bit 2021-08-25-13bb54"

# IPv6 aktivieren
exoscale__server_ipv6_enabled: true

# Sicherheitsgruppen: diese Sicherheitsgruppen erstellen.
# HINWEIS: Vorhandene Sicherheitsgruppen mit anderen Namen werden nicht berührt.
# HINWEIS: Zusätzliche vorhandene Regeln in den Gruppen werden nicht berührt.
exoscale__security_groups:
  - name: proxy
    rules:
      - protocol: tcp
        type: ingress
        cidr: 0.0.0.0/0
        port: 443

      - protocol: tcp
        type: ingress
        cidr: 0.0.0.0/0
        port: 80

      - protocol: tcp
        type: ingress
        cidr: 1.2.3.4/32
        start_port: 8000
        end_port:  8999

  - name: mqtt
    rules:
      - port: 1883
      - port: 8883

# Affinitätsgruppen: diese Gruppen erstellen.
exoscale__affinity_groups:
  - name: cassandra
  - name: proxy

# Erstellen eines privaten Netzwerks für den Backend-Zugriff.
exoscale__networks:
  - name: mein privates netz
    start_ip: 10.23.12.100
    end_ip: 10.23.12.150
    netmask: 255.255.255.0

Instanzkonfiguration über Gruppen- / Host-Variablen

Angenommen, eine Inventarliste sieht ähnlich aus wie die folgende:

[proxy]
proxy1.example.com
proxy2.example.com

[cassandra]
cassandra1.example.com
cassandra2.example.com
cassandra3.example.com

Stellen Sie sicher, dass alle Proxy-Instanzen ein anderes Angebot und die zusätzliche Sicherheitsgruppe Proxy verwenden:

# Datei: group_vars/proxy.yml

# Großes Angebot (Standard ist Klein)
exoscale__server_service_offering: Medium

# Sicherheitsgruppen den Instanzen zuweisen (Standard: [standard])
exoscale__server_security_groups:
  - standard
  - proxy

# Ein privates Netzwerk anhängen
exoscale__server_networks:
  - mein privates netz

Stellen Sie sicher, dass alle Cassandra-Instanzen auf verschiedenen Hardware-Hosts sind:

# Datei: group_vars/cassandra.yml

# Affinitätsgruppe allen Instanzen zuweisen
exoscale__server_affinity_groups: cassandra

# Hardware, die auf CPU bezogen ist
exoscale__server_service_offering: CPU-extra-large

# Ein privates Netzwerk anhängen
exoscale__server_networks:
  - mein privates netz

:information_source: HINWEIS: Holen Sie sich eine Liste aller Angebote mit cs listServiceOfferings | jq --raw-output '.serviceoffering[].name'. Siehe https://github.com/exoscale/cs/ wie Sie die Bibliothek, die darunter als CLI verwendet wird, nutzen können.


Lizenz

MIT

Autoreninformation

René Moser (@resmo)

Über das Projekt

Manages Exoscale Cloud compute resources

Installieren
ansible-galaxy install ngine_io.exoscale_compute
GitHub Repository
Lizenz
mit
Downloads
1.2k
Besitzer
Engineering Cloud Computing