LINUX.ORG.RU
ФорумAdmin

Как делать swap в ansible?

 ,


0

2

Сап, лор!

Пишу playbook. Как быть, если нужно создать SWAP по феншуй - в два раза больше RAM?

Гугл читал, приводятся простые примеры, подразумевая, что SWAP отсутствует.

На VPS может:

  • SWAP отсутствовать;
  • SWAP есть, но неправильного размера (например 1Gb для 16Gb RAM).

Вопросы:

  1. Проверяем размер RAM, делаем в два раза больше. Как реализовать?
  2. Как поудалять записи в fstab в случае, когда там есть уже свап.
  3. И опять SWAP на разных VPS реализуют по разному. Где-то - как раздел на диске, а где-то - как файл.
  4. Как сделать красиво?

Обычно делаю это вручную - пять команд в консоли. А с ansible - прямо полотнище получается.

1. Берешь
2. Делаешь

zgen ★★★★★
()

Проверяем размер RAM, делаем в два раза больше. Как реализовать?

Что-то типа {{(ansible_memtotal_mb * 2)|int}} (нужно сбор информации о хосте (facts) включить), ну или тот же принцип через регистры

Как поудалять записи в fstab в случае, когда там есть уже свап.

lineinfile, регулярки

И опять SWAP на разных VPS реализуют по разному. Где-то - как раздел на диске, а где-то - как файл.

Ну если вы знаете по какому критерию выбирается тот или иной тип свопа можете нагородить условия.

Как сделать красиво?

Не пихайте все в shell\command а пользуйтесь подходящими модулями

Обычно делаю это вручную - пять команд в консоли. А с ansible - прямо полотнище получается.

Телепаты сейчас в отпуске, если вам нужны советы по вашему сценарию вам придется показать то что вы уже успели сделать.

micronekodesu ★★★
()
Ответ на: комментарий от micronekodesu

Мой первый ansible playbook. Нарисовал вчера за час перед сном:

- hosts: all
  tasks:

  - name: Change hostname.
    hostname:
      name: "ok"

  - name: Upgrade all packages.
    yum: name=* state=latest

  - name: Install EPEL.
    yum: 
      name: epel-release 
      state: present 

  - name: Istall tools - vim, mc, wget, htop, iftop, nload, net-tools, bind-utils.
    yum:
      name: ['vim', 'mc', 'wget', 'htop', 'iftop', 'nload', 'net-tools', 'bind-utils']
      state: present

#  - name: Disable firewalld
#    systemd:
#      name: firewalld
#      enabled: no
#
#  - name: Stop firewalld
#    systemd: name=firewalld state=stopped

  - name: Disable SELinux.
    selinux: state=disabled


  - name: Setup alternate SSH port
    lineinfile:
      dest: "/etc/ssh/sshd_config"
      regexp: "^Port"
      line: "Port 1234"


  - name: Restart sshd
    systemd:
      name: sshd
      state: restarted  




# Create SWAP
 
# Install CSF
dopedopedope
() автор топика
Последнее исправление: dopedopedope (всего исправлений: 1)
Ответ на: комментарий от micronekodesu

Взятый за основу со стековерфлоу. Тут вроде проверяется наличие свопа. И если нет, то создается. Если есть ничего не делается. Но тут нет случая, если свап неправильного размера:

- hosts: all
  tasks:

  - name: Create 8 Gb swap
    command: dd if=/dev/zero of={{ /swapfile }} bs=256M count={{ 32 }}
             creates="{{ /swapfile }}"
    tags:
      - swap.file.create
  
  
  - name: Change swap file permissions
    file: path="{{ /swapfile }}"
          owner=root
          group=root
          mode=0600
    tags:
      - swap.file.permissions
  
  
  - name: "Check swap file type"
    command: file {{ /swapfile }}
    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
dopedopedope
() автор топика
Последнее исправление: dopedopedope (всего исправлений: 1)
Ответ на: комментарий от dopedopedope

Ну вот у вас есть проверка размера свопа через ansible_swaptotal_mb. Как получить объем оперативки и удвоить его я выше писал. Создание своп-файла тут описано, удалить файл думаю сможете. Добавьте проверку размера, и дальше уже в зависимости от этого запускайте таски для удаления (если что-то не так) и потом для добавления. Для того чтоб таск выполнялся в зависимости от какого-то условия используется when. Можно сделать в одном плейбуке, можно завести разные роли (хотя это будет несколько нелогично), можно вынести операции в отдельные плейбуки и подтягивать нужный.

micronekodesu ★★★
()
Ответ на: комментарий от dopedopedope

Надо конфиг ssh не инлайном править, а весь конфиг переписывать. При изменении в шаблоне, ансайбл сам заменит нужные строчки в конфиге.

FireFighter ★★★
()
Последнее исправление: FireFighter (всего исправлений: 1)

Проспался и подумал, что подключение SWAP попадает под over-engineering. Слишком много пилить ради минимальной экономии времени.

Список task-ов для deploy-я моей %appname% можно разделить на две категории:

  1. Не зависит от провайдера:
  • установка нужных пакетов;
  • применение настоек безопасности;
  • правка конфигурационных файлов в нужных местах;
  • загрузка файлов на сервер и т.д.
  1. Зависит от провайдера:
  • Подключение swap (есть/нет/неправильный);
  • Кроме swap, например, нужно заоптимизировать работу PostgreSQL под конкретную серверную конфигурацию. Здесь больше вопросов, в конфигурации много настроек которые подкручиваются в зависимости от количества ядер, рамера оперативы, типа жесткого диска. Все это учесть в ansible playbook нереально, мне кажется (пруф ме вронг).

Вывод: пилить playbook-и нужно для 1-ой категоии задач. Для второй категории быстрее подправить ручками.

dopedopedope
() автор топика
Ответ на: комментарий от dopedopedope

Для первой категории вам надо просто опакетить ваше приложение, и тогда пакетный менеджер справится со всем перечисленным сам.

нужно заоптимизировать работу PostgreSQL под конкретную серверную конфигурацию.

Вы уверены что лучше DBA знаете что там и как надо оптимизировать в его конкретной инсталляции СУБД? Может лучше описать какой-то бестпрактис или рекомендации? Или вам самому надо это делать? Тогда

Все это учесть в ansible playbook нереально, мне кажется (пруф ме вронг).

все что вы можете выполнить в CLI (или заскриптовать) можно сделать и ансиблом. По сути он вас ничем не ограничивает (но некоторые вещи делаются в нем через одно известное место, да), а лишь помогает не забивать голову перенаправлением вывода и отслеживанием статуса. Так что если у вас есть алгоритм, то значит и ансибл вы можете использовать для выполнения задачи.

micronekodesu ★★★
()
Ответ на: комментарий от dopedopedope

Там чувак говорит, что swap должен быть 4 Gb

Ты прочитал пример и решил что так оно вообще? Мда…

Настройка свопа, достаточно тривиальная и простая задача, с всего 3мя параметрами тюнинга, 2 из которых ты конечно забыл.
Если у тебя с такой простой задачей возникают какие-то проблемы, может тебе другое занятие в жизни поискать?

подключение SWAP попадает под over-engineering.

ВОН ИЗ ПРОФЕССИИ!

bass ★★★★★
()
Ответ на: комментарий от dopedopedope

Затем, чтобы через одну роль и шаблон можно было разлить конфиг сразу на кучу хостов, используя переменные, с разными параметрами, такими как порт, который слушает демон.

FireFighter ★★★
()
Ответ на: комментарий от dopedopedope

которые подкручиваются в зависимости от количества ядер, рамера оперативы, типа жесткого диска

Это делается правильной разбивкой хостов на группы и переменными.

FireFighter ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.