【问题标题】:I wanted to deploy multiple VMs from ansible, from values given by the enduser我想根据最终用户给出的值从 ansible 部署多个虚拟机
【发布时间】:2020-08-28 05:53:40
【问题描述】:

我想从我的 ansible-playbook 部署多个 VMS,所以我使用了 split 功能,我得到了 dict does not have 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,那么它将被 set_fact 分割为 os_system,并根据该输入决定域决策,我的主要问题是,虽然任务位于 set_fact 的决定,它会给我这样的错误:

错误: 致命:[x.x.x.x]:失败! => { "msg": "任务包含一个带有未定义变量的选项。错误是:'dict object' has no attribute 'user_input'\n\n错误似乎在 '/home/x.x.x.x/sites/playbook.yml' : 第 82 行,第 6 列,但可能\n位于文件中的其他位置,具体取决于确切的语法问题。\n\n违规行似乎是:\n\n\n - set_fact:\n ^ here\n" }

如果我从任务域决策中删除循环,那么 set_fact 工作得非常完美。

【问题讨论】:

    标签: python-3.x ansible vmware


    【解决方案1】:

    当你想收集用户输入时,可以有两种方式:

    • 交互式(提示),使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 2021-05-23
      相关资源
      最近更新 更多