【问题标题】:Setting multiple values in sysctl with Ansible使用 Ansible 在 sysctl 中设置多个值
【发布时间】:2019-07-22 18:27:10
【问题描述】:

我有几个任务设置值到 sysctl 的剧本。我如何使用 sysctl 模块通过一项任务设置所有值,而不是为每个设置设置一个任务?

剧本sn-p:

- 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

【问题讨论】:

    标签: ansible sysctl


    【解决方案1】:

    在一个 var 文件中定义所有变量:

    例如

    sysctl:
      - name: test
        value: test
    

    ... ...

    剧本:

    - hosts: "{{ }}"
      tasks: 
        - name: update sysctl param
          sysctl:
            name: "{{ item.name }}"
            value: "{{ item.value }}"
            state: present
            reload: yes
          with_items:
            - "{{ hosts }}"
    

    【讨论】:

    • with_subelements 给出了这个错误:subelements lookup expects a list of two or three items。将其替换为 with_items 有效。
    • 是的..我的错误子元素用于嵌套字典。对于这种情况,with_items 就足够了
    • 从 ansible 2.7 开始你应该使用 loop: in order than with_items
    【解决方案2】:

    简单解决方案:将变量定义为字典

    示例剧本:

    ---
    - 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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-05-20
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      • 2017-07-28
      • 2017-09-10
      • 2020-06-13
      • 2019-01-01
      相关资源
      最近更新 更多