Ansible loop / условный - PullRequest
       30

Ansible loop / условный

0 голосов
/ 31 августа 2018

Я работал над игрой, чтобы создать виртуальный сервер, и делаю это, задавая пользователю несколько вопросов, чтобы собрать требования к конфигурации.

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

Когда вы запускаете «list ltm profile», вам нужно указать протокол, затем имя профиля, например, «list ltm profile tcp tcp». Проверка одного профиля LTM - это хорошо, но у меня возникает проблема, когда вам нужно проверить несколько профилей.

Есть ли способ, которым я мог бы зациклить свой вопрос и передать введенные пользователем данные в проверку? Допустим, пользователь хочет проверить следующие профили:

list ltm profile http http
list ltm profile tcp tcp

Вот вопрос, заданный:

- name: "vs_profile_type"
  prompt: "enter the profile(s) to run your pre-checks against"
  private: no 

А вот то, что у меня есть для предварительной проверки части игры:

  - name: Pre-check
    bigip_command:
      server: "{{ inventory_hostname }}"
      user: "{{ remote_username }}"
      password: "{{ remote_passwd }}"
      commands:
        - "tmsh list sys global-settings hostname"
        - "tmsh show sys failover"
        - "tmsh show cm sync-status"
        - "tmsh list ltm virtual {{ vs_name }}"
        - "tmsh list ltm profile {{ vs_profile_type }}"
        - "tmsh list ltm pool {{ vs_pool }}"
        - "tmsh list ltm rule {{ vs_rule }}"
      warn: no
      validate_certs: no
    delegate_to: localhost
    when: "'active' in Active_LTM['stdout'][0]"
    register: Active_LTM_Pre_Checks 

Я также смотрел на учет того факта, что пользователь может не захотеть профиль, поэтому, если он нажмет ввод, мне нужно пропустить проверку «list ltm profile xxx xxx». В другом посте мне помогли это сделать, но при переработке синтаксиса для этого экземпляра я не мог заставить его работать; Есть идеи, что может быть не так с приведенным ниже синтаксисом?

"tmsh list ltm profile {{ '{' + vs_profile_type + '}' if vs_profile_type else '' }} {{ '{' + vs_profile + '}' if vs_profile else '' }}"

1 Ответ

0 голосов
/ 31 августа 2018

Мы получили эту работу, делая это таким образом.

Вопрос к пользователю:

- name: "vs_profile_type"
  prompt: "enter the profile to run your pre-checks against [Enter in the following format: tcp tcp, http http]"
  private: no

Мы запустили эту проверку для профиля в отдельной задаче:

  - name: Profile_Pre-check
    bigip_command:
      server: "{{ inventory_hostname }}"
      user: "{{ remote_username }}"
      password: "{{ remote_passwd }}"
      commands:
         - "tmsh list ltm profile {{ item }}"
      validate_certs: no
    delegate_to: localhost
    with_items:
      - "{{ vs_profile_type.split(',') }}"
    when: "'active' in Active_LTM['stdout'][0]"
    register: Active_LTM_Pre_Checks

Вот игра до этой проверки / задания:

- name: "vs_profile_type"
  prompt: "enter the profile to run your pre-checks against [Enter in the following format: tcp tcp, http http]"
  private: no

        bigip_command:
          server: "{{ inventory_hostname }}"
          user: "{{ remote_username }}"
          password: "{{ remote_passwd }}"
          commands:
  tasks:
      - name : Checking which LTM is active....
        bigip_command:
          server: "{{ inventory_hostname }}"
          user: "{{ remote_username }}"
          password: "{{ remote_passwd }}"
          commands:
            - "tmsh show sys failover"
          validate_certs: no
        delegate_to: localhost
        register: Active_LTM

      - name: The active LTMs management IP is....
        block:
          - debug:
              var: Active_LTM.stdout[0]

      - name: Profile_Pre-check
        bigip_command:
          server: "{{ inventory_hostname }}"
          user: "{{ remote_username }}"
          password: "{{ remote_passwd }}"
          commands:
             - "tmsh list ltm profile {{ item }}"
          validate_certs: no
        delegate_to: localhost
        with_items:
          - "{{ vs_profile_type.split(',') }}"
        when: "'active' in Active_LTM['stdout'][0]"
        register: Active_LTM_Pre_Checks

      - name: Please verify the profile pre-checks are correct
        debug:
          var: Active_LTM_Pre_Checks.stdout_lines
...