Загрузить переменную из файла и сравнить - PullRequest
1 голос
/ 21 июня 2019

Я пишу ANSIBLE скрипт, чтобы добавить приемлемое правило, проверяя, существуют ли уже правила.

В скрипте я сохраняю все результаты iptables в переменную "ipall".Затем я читаю новые правила в "rules.txt" и сохраняю их в переменной rules.Теперь я пытаюсь взять первое правило из "rules.txt" и проверить, существуют ли правила в ipall, если нет, то добавьте его в iptables.

  tasks:
    - name: fetch iptable
      shell: iptables-save
      register: ipall

    - debug: var=ipall

    - name: load variables
      command: cat rules.txt
      register: rules

    - debug: var=rules

    - name: search a rule
      debug:
        msg: "iptables {{ item }}"
      loop: rules.stdout_lines
      when: item not in ipall.stdout_lines
[root@localhost myplaybooks]# cat rules.txt 
-A TESTCHAIN -p tcp -m tcp --dport 100 -j ACCEPT
-A TESTCHAIN -p tcp -m tcp --dport 101 -j ACCEPT
-A TESTCHAIN -p tcp -m tcp --dport 102 -j ACCEPT

Я ожидаю, что скрипт добавит правила в rules.txt, вместо этого я получаю следующую ошибку.

ok: [localhost] => (item=rules.stdout_lines) => {
    "msg": "iptables rules.stdout_lines"
}

Ответы [ 2 ]

1 голос
/ 21 июня 2019

ниже работает:

---
- hosts: localhost
  vars:
    rules: "{{ lookup('file', 'rules.txt') }}"
  tasks:
    - name: fetch iptable
      shell: iptables-save
      register: ipall
    - debug:
        var: ipall.stdout_lines
    - debug:
        var: rules
    - name: search a rule
      debug:
        msg: "{{ item }}"
      with_items:
        - "{{ ipall.stdout_lines }}"
      when: item not in rules

файл ->

-A TESTCHAIN -p tcp -m tcp --dport 100 -j ACCEPT
-A TESTCHAIN -p tcp -m tcp --dport 101 -j ACCEPT
-A TESTCHAIN -p tcp -m tcp --dport 102 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-2 -j RETURN

частичный вывод ->

}
ok: [localhost] => (item=-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP) => {
    "msg": "-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP"
}
skipping: [localhost] => (item=-A DOCKER-ISOLATION-STAGE-2 -j RETURN)
ok: [localhost] => (item=-A DOCKER-USER -j RETURN) => {
    "msg": "-A DOCKER-USER -j RETURN"
}
ok: [localhost] => (item=COMMIT) => {
    "msg": "COMMIT"
}
ok: [localhost] => (item=# Completed on Fri Jun 21 17:07:15 2019) => {
    "msg": "# Completed on Fri Jun 21 17:07:15 2019"
}

PLAY RECAP ********************************************************************************************************************
localhost                  : ok=5    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
1 голос
/ 21 июня 2019

Сначала посмотрим, что будет

- name: Print commands to apply missing rules
  debug:
     msg: "iptables {{ item }}"
  loop: rules.stdout_lines
  when: item not in ipall.stdout_lines

Затем попробуйте выполнить задание ниже (конечно, сначала с помощью TESTCHAIN)

- name: Search and apply missing rules
  command: "iptables {{ item }}"
  loop: rules.stdout_lines
  when: item not in ipall.stdout_lines

(не тестировалось)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...