Ansible удалить цитату из значения факта ansbile

#ansible

#ansible

Вопрос:

У меня ниже задача настроить IPv6, а не отключить настройки. когда я использовал ansible_default_ipv4.interface значения, его включали в значение кавычки. как удалить цитату из значения факта ansible для приведенной ниже задачи?

 - name: Ensure IPv6 not disabled with sysctl
  sysctl:
    name: "{{ item }}"
    value: '0'
    state: present
    sysctl_file: /etc/sysctl.conf
    reload: yes
  with_items:   
    - "net.ipv6.conf.{{ ansible_default_ipv4.interface }}.disable_ipv6"
  ignore_errors: yes
  
  
 

Это дает следующее сообщение

  cannot stat /proc/sys/net/ipv6/conf/"ens192"/disable_ipv6: No such file or directory 
 

Вот значение факта:

 "ansible_default_ipv4": {            
            "alias": "ens192",             
            "interface": "ens192",            
            "mtu": 1500,            
            "type": "ether"
        },
 

Спасибо
SR

Комментарии:

1. Не уверен, почему возникает ошибка, вы используете последнюю версию ansible? Кстати, поскольку вы заполняете «элемент» в with_items предложении, вам не нужно использовать фигурные скобки в name строке, т.е. Вы можете использовать: name: item но опять же, ваша задача должна работать как сейчас.

Ответ №1:

Работает для меня в Ansible 2.9.6. Например

     - sysctl:
        name: "{{ item }}"
        value: "1"
      register: result
      with_items:
        - "net.ipv4.conf.{{ ansible_default_ipv4.interface }}.forwarding"
    - debug:
        var: result
 

дает

 TASK [sysctl] ****
ok: [localhost] => (item=net.ipv4.conf.eth0.forwarding)

TASK [debug] ****
ok: [localhost] => 
  result:
    changed: false
    msg: All items completed
    results:
    - ansible_loop_var: item
      changed: false
      failed: false
      invocation:
        module_args:
          ignoreerrors: false
          name: net.ipv4.conf.eth0.forwarding
          reload: true
          state: present
          sysctl_file: /etc/sysctl.conf
          sysctl_set: false
          value: '1'
      item: net.ipv4.conf.eth0.forwarding
 

Комментарии:

1. то же самое не сработало для меня. Я использую ansible 2.9.10 клиентскую машину CentOS 8

2. ИМХО, это не проблема sysctl. Я бы проверил конкатенацию, например "{{ 'begin.' ~ ansible_default_ipv4.interface ~ '.end' }}"

3. первый раз запускал это так net.ipv6.conf."{{ ansible_default_ipv4.interface }}".disable_ipv6 . он добавил эту строку в /etc/sysctl.conf файл. после удаления этого файла из файла он работал нормально. Спасибо

4. Смотрите, когда заключать переменные в кавычки .