Ansible新手求助:如何传递可扩容的动态LUN列表
动态生成可扩容的LUN列表解决方法
嘿,作为Ansible新手,你这个想把固定LUN列表换成动态生成、支持扩容的需求太实用了!手动写几十上百个lun条目不仅麻烦还容易出错,咱们用Ansible的过滤器就能轻松搞定,下面给你两种简单好用的方案:
方案一:用range+regex_replace生成动态列表
这是最直接的方式,通过定义一个代表LUN数量的变量,就能一键生成从lun1到lunN的列表。
修改后的Playbook代码
- name: Create object na state: present name: "{{ hostvars[item[1]]['iscsi_hostname']['stdout'] }}{{item[0]}}" flexvol_name: "{{ vol_name }}{{ hostvars[item[1]]['iscsi_hostname']['stdout'] }}" hostname: "{{ hostname }}" username: "{{ username }}" password: "{{ password }}" with_nested: # 动态生成LUN列表,替换原来的固定列表 - "{{ range(1, lun_count + 1) | map('regex_replace', '^', 'lun') | list }}" - "{{ groups['redhat'] }}" vars: lun_count: 8 # 这里可以直接改成50/100,或者通过外部传入
代码解释
range(1, lun_count + 1):生成从1到lun_count的数字序列(注意range是左闭右开,所以要+1才能包含最后一个数字)map('regex_replace', '^', 'lun'):给每个数字前面拼接上lun前缀list:把处理后的序列转换成Ansible能识别的列表格式
方案二:用format过滤器实现更灵活的命名
如果之后需要调整LUN的命名格式(比如加前导零lun001、换前缀disk1),用format过滤器会更直观:
- name: Create object na # ... 其他参数不变 with_nested: # 生成带前导零的LUN列表,比如lun001到lun100 - "{{ range(1, lun_count +1) | map('format', 'lun%03d') | list }}" - "{{ groups['redhat'] }}"
灵活调整LUN数量的方式
你完全不用每次改playbook,直接通过命令行传入lun_count变量就行:
# 生成50个LUN ansible-playbook your_playbook.yml -e "lun_count=50" # 生成100个LUN ansible-playbook your_playbook.yml -e "lun_count=100"
这样不管是测试8个LUN,还是生产环境扩容到50、100个,都能一键切换,特别方便!
内容的提问来源于stack exchange,提问作者supersrin
相关产品推荐
相关产品推荐

