Ansible循环/条件
我一直在做一个游戏来创建一个虚拟服务器,并通过向用户询问一些问题来收集配置需求 我想运行一些预检查以显示某些虚拟服务器属性存在,我已经能够计算出除概要文件之外的所有属性 运行“list ltm profile”时,需要指定协议,然后指定配置文件名称,例如“list ltm profile tcp”。检查一个LTM配置文件是可以的,但我遇到的困难是当您需要检查多个配置文件时 是否有一种方法可以循环我的问题并将用户输入传递到检查中?假设用户希望检查以下配置文件:Ansible循环/条件,ansible,f5,tmsh,Ansible,F5,Tmsh,我一直在做一个游戏来创建一个虚拟服务器,并通过向用户询问一些问题来收集配置需求 我想运行一些预检查以显示某些虚拟服务器属性存在,我已经能够计算出除概要文件之外的所有属性 运行“list ltm profile”时,需要指定协议,然后指定配置文件名称,例如“list ltm profile tcp”。检查一个LTM配置文件是可以的,但我遇到的困难是当您需要检查多个配置文件时 是否有一种方法可以循环我的问题并将用户输入传递到检查中?假设用户希望检查以下配置文件: list ltm profile h
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
我还考虑了用户可能不需要配置文件这一事实,因此如果他们按enter键,我需要跳过“list ltm profile xxx xxx”复选框。在另一篇文章中,我得到了一些帮助,但是在重新处理这个实例的语法时,我似乎无法使它工作;你知道下面的语法有什么问题吗
"tmsh list ltm profile {{ '{' + vs_profile_type + '}' if vs_profile_type else '' }} {{ '{' + vs_profile + '}' if vs_profile else '' }}"
我们是这样做的 向用户提出的问题:
- 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
我不完全确定你说“规则是什么?”时的意思,但是,我需要获取用户输入,在本例中为“tcp”,通过获取tcp输入将其拆分,并将其附加到“tmsh列表ltm配置文件{vs_profile_type}}”检查,然后获取剩余的输入,即“http”输入并将其附加到“tmsh list ltm profile{{vs_profile_type}}”检查。希望这是有意义的。