如何解决我想根据最终用户提供的值从ansible部署多个VM
我想从我的ansible-playbook部署多个VMS,所以我使用了split函数,但我得到dict的错误没有user_inout错误。请看一下我的代码。
代码:
- name: os system
pause:
prompt: |
Which os do you want to use?
1- Windows Server
2- CentOS_7
3- CentOs_8
4- Ubuntu
5- Others
register: os_system
- set_fact:
o_name: "{{ os_system.user_input.split(',') }}"
- name: Domain Decision
pause:
prompt: Do you want your PC in Domain
register: decision
when: 'item|string == "1"'
with_items:
- "{{ o_name }}"
- set_fact:
dec: "{{ decision.user_input.split(',') }}"
现在我真正的问题是,如果用户选择选项1,2,则它将被os_system的set_fact分割,并根据该输入来决定域决策。我的主要问题是,当任务处于set_fact时,决定,它将给我这样的错误:
错误: 致命的:[x.x.x.x]:失败! => { “ msg”:“任务包括带有未定义变量的选项。错误是:'dict对象'没有属性'user_input'\ n \ n错误似乎出在'/home/xxxx/sites/playbook.yml' :第82行第6列,但根据确切的语法问题,可能\ n在文件的其他位置。\ n \ n有问题的行似乎是:\ n \ n \ n-set_fact:\ n ^ here \ n“ }
如果我从任务域决策中删除了循环,那么set_fact可以非常完美地工作。
解决方法
要收集用户输入时,可以采用两种方式:
- 使用
vars_prompt
进行交互(提示)。 - 通过变量(无提示)。例如,您可以让用户使用变量创建文件并使用
vars_file
加载。
如果可能的话,我希望使用第二种方法。
但是,要通过提示以交互方式获取用户输入:
- hosts: my_hosts
vars_prompt:
- name: os_system
prompt: |
Which os do you want to use?
1- Windows Server
2- CentOS_7
3- CentOs_8
4- Ubuntu
5- Others
private: no
tasks:
- set_fact:
o_name: "{{ os_system.split(',') }}"
您应该注意,将输入分割为1,2,您将不会获得操作系统名称。您将再次需要根据数字设置一个事实(1 = Windows Server)。恕我直言,这是不必要的并发症。
更好的选择是让用户创建如下所示的变量文件:
my_vars.yml :
os_choices:
- { name: Windows Server,domain: yes }
- { name: CentOS_7,domain: no }
并使用以下命令将其加载到游戏中:
- hosts: my_hosts
vars_file:
- my_vars.yml
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。