it-swarm.com.de

Füge Swap Memory mit ansible hinzu

Ich arbeite an einem Projekt, in dem ein Swap-Speicher auf meinen Servern erforderlich ist, um zu vermeiden, dass einige Python-lange laufende Prozesse nicht mehr ausreichen. Zum ersten Mal wurde mir klar, dass meine Ubuntu-Vagrant-Boxen und AWS-Ubuntu-Instanzen noch keine hatten Konfiguration.

In https://github.com/ansible/ansible/issues/5241 wurde eine mögliche integrierte Lösung besprochen, aber nie implementiert. Ich vermute, dies sollte eine recht häufige Aufgabe bei der Automatisierung sein.

Wie würden Sie einen dateibasierten Swap-Speicher mit Ansible auf idempotente Weise einrichten? Welche Module oder Variablen bietet ansible bei diesem Setup an (wie ansible_swaptotal_mb variable)?

22
gonz

Dies ist meine aktuelle Lösung:

- name: Create swap file
  command: dd if=/dev/zero of={{ swap_file_path }} bs=1024 count={{ swap_file_size_mb }}k
           creates="{{ swap_file_path }}"
  tags:
    - swap.file.create


- name: Change swap file permissions
  file: path="{{ swap_file_path }}"
        owner=root
        group=root
        mode=0600
  tags:
    - swap.file.permissions


- name: "Check swap file type"
  command: file {{ swap_file_path }}
  register: swapfile
  tags:
    - swap.file.mkswap


- name: Make swap file
  command: "Sudo mkswap {{ swap_file_path }}"
  when: swapfile.stdout.find('swap file') == -1
  tags:
    - swap.file.mkswap


- name: Write swap entry in fstab
  mount: name=none
         src={{ swap_file_path }}
         fstype=swap
         opts=sw
         passno=0
         dump=0
         state=present
  tags:
    - swap.fstab


- name: Mount swap
  command: "swapon {{ swap_file_path }}"
  when: ansible_swaptotal_mb < 1
  tags:
    - swap.file.swapon
29
gonz

Ich habe die Antwort oben ausprobiert, aber "Check swap file type" kam immer als changed zurück und ist daher nicht idempotent , was als Best Practice beim Schreiben von Ansible-Aufgaben empfohlen wird.

Die folgende Rolle wurde unter Ubuntu 14.04 Trusty getestet und erfordert keine Aktivierung von gather_facts.

- name: Set swap_file variable
  set_fact:
    swap_file: "{{swap_file_path}}"
  tags:
    - swap.set.file.path

- name: Check if swap file exists
  stat:
    path: "{{swap_file}}"
  register: swap_file_check
  tags:
    - swap.file.check

- name: Create swap file
  command: fallocate -l {{swap_file_size}} {{swap_file}}
  when: not swap_file_check.stat.exists
  tags:
    - swap.file.create

- name: Change swap file permissions
  file: path="{{swap_file}}"
        owner=root
        group=root
        mode=0600
  tags:
    - swap.file.permissions

- name: Format swap file
  Sudo: yes
  command: "mkswap {{swap_file}}"
  when: not swap_file_check.stat.exists
  tags:
    - swap.file.mkswap

- name: Write swap entry in fstab
  mount: name=none
         src={{swap_file}}
         fstype=swap
         opts=sw
         passno=0
         dump=0
         state=present
  tags:
    - swap.fstab

- name: Turn on swap
  Sudo: yes
  command: swapon -a
  when: not swap_file_check.stat.exists
  tags:
    - swap.turn.on

- name: Set swappiness
  Sudo: yes
  sysctl:
    name: vm.swappiness
    value: "{{swappiness}}"
  tags:
    - swap.set.swappiness

Vars erforderlich:

swap_file_path: /swapfile
# Use any of the following suffixes
# c=1
# w=2
# b=512
# kB=1000
# K=1024
# MB=1000*1000
# M=1024*1024
# xM=M
# GB=1000*1000*1000
# G=1024*1024*1024
swap_file_size: 4G
swappiness: 1
15
Ash

Hier ist das Ansible-Swap-Playbook, mit dem ich 4 GB (oder was auch immer ich group_vars für dd_bs_size_mb * swap_count konfiguriere) Swap-Speicherplatz auf neuen Servern installiere:

https://github.com/tribou/ansible-swap

Ich habe auch eine Funktion in meinem ~/.bash_profile hinzugefügt, um bei der Aufgabe zu helfen:

# Path to where you clone the repo
ANSIBLE_SWAP_PLAYBOOK=$HOME/dev/ansible-swap

install-swap ()
{
    usage='Usage: install-swap Host';
    if [ $# -ne 1 ]; then
        echo "$usage";
        return 1;
    fi;
    ansible-playbook $ANSIBLE_SWAP_PLAYBOOK/ansible-swap/site.yml --extra-vars "target=$1"
}

Stellen Sie einfach sicher, dass Ihre Host zuerst zu Ihrem anzeigbaren Inventar hinzugefügt wird.

Dann ist es nur noch install-swap Host.

0
Aaron Tribou