Установка нескольких значений в sysctl с помощью Ansible

У меня есть playbook с несколькими задачами, устанавливающими значения для sysctl. Вместо того, чтобы иметь задачу для каждого параметра, как я могу установить все значения с помощью одной задачи, используя модуль sysctl?

Фрагмент плейбука:

- name: Set tcp_keepalive_probes in sysctl
  become: yes
  sysctl:
    name: net.ipv4.tcp_keepalive_probes
    value: 3
    state: present
    reload: yes

- name: Set tcp_keepalive_intvl in sysctl
  become: yes
  sysctl:
    name: net.ipv4.tcp_keepalive_intvl
    value: 10
    state: present
    reload: yes

- name: Set rmem_default in sysctl
  become: yes
  sysctl:
    name: net.core.rmem_default
    value: 16777216
    state: present
    reload: yes

person Pedro Gordo    schedule 28.02.2019    source источник


Ответы (2)


определить все переменные в файле var:

e.g.

sysctl:
  - name: test
    value: test

... ...

playbook:

- hosts: "{{ }}"
  tasks: 
    - name: update sysctl param
      sysctl:
        name: "{{ item.name }}"
        value: "{{ item.value }}"
        state: present
        reload: yes
      with_items:
        - "{{ hosts }}"
person error404    schedule 28.02.2019
comment
with_subelements выдавал эту ошибку: subelements lookup expects a list of two or three items. Замена этого на with_items сработала. - person Pedro Gordo; 04.03.2019
comment
да .. мои плохие подэлементы используются для вложенного dict. with_items достаточно для этого случая - person error404; 04.03.2019
comment
начиная с ansible 2.7 вы должны использовать loop: в порядке, чем with_items - person Jérôme B; 03.10.2019

Простое решение: определите переменную как dict

Пример сценария:

---
- hosts: all
  gather_facts: false
  become: true
  vars:
    ansible_python_interpreter: /usr/bin/python3
    sysctl_config:
      net.ipv4.ip_forward: 1
      net.ipv4.conf.all.forwarding: 1
      net.ipv6.conf.all.forwarding: 1

  tasks:
   - name: Change various sysctl-settings
     sysctl:
       name: '{{ item.key }}'
       value: '{{ item.value }}'
       sysctl_set: yes
       state: present
       reload: yes
       ignoreerrors: yes
     with_dict: '{{ sysctl_config }}'

Вывод:

TASK [Change various sysctl-settings] **********************************************************************************************************************************************************************
changed: [10.10.10.10] => (item={'key': 'net.ipv4.ip_forward', 'value': 1}) => {
    "ansible_loop_var": "item",
    "changed": true,
    "item": {
        "key": "net.ipv4.ip_forward",
        "value": 1
    }
}
changed: [10.10.10.10] => (item={'key': 'net.ipv4.conf.all.forwarding', 'value': 1}) => {
    "ansible_loop_var": "item",
    "changed": true,
    "item": {
        "key": "net.ipv4.conf.all.forwarding",
        "value": 1
    }
}
changed: [10.10.10.10] => (item={'key': 'net.ipv6.conf.all.forwarding', 'value': 1}) => {
    "ansible_loop_var": "item",
    "changed": true,
    "item": {
        "key": "net.ipv6.conf.all.forwarding",
        "value": 1
    }
}
person Hieu Huynh    schedule 05.09.2019