Variables Ansible仅从第二次执行中获取变量

Variables Ansible仅从第二次执行中获取变量,variables,copy,ansible,ansible-playbook,Variables,Copy,Ansible,Ansible Playbook,我发现Ansible“copy”模块在处理变量时有一种奇怪的行为。 因此,我: 1.Config.yml: - hosts: temp vars_prompt: - name: server_name prompt: "Enter server number: 1, 2, 3..." private: no default: 5 - name: server_role prompt: "Enter server role: ap

我发现Ansible“copy”模块在处理变量时有一种奇怪的行为。 因此,我: 1.Config.yml:

    - hosts: temp
   vars_prompt:
   - name: server_name
     prompt: "Enter server number: 1, 2, 3..."
     private: no
     default: 5

   - name: server_role
     prompt: "Enter server role: app, admin"
     private: no
     default: admin

   - name: server_type
     prompt: "Enter server type: stage, prod"
     private: no
     default: stage

  pre_tasks:
    - name: Types and roles
      set_fact:
        servername: "{{ server_name }}"
        serverrole: "{{ server_role }}"
        servertype: "{{ server_type }}"

  vars_files:
   - "vars/variables"

  roles:
   - configs
  • 带有main.yml的“Configs”角色:

    ---
    - set_fact: folder=server
      when: serverrole == "app"
    
    - set_fact: folder=admin-server
      when: serverrole == "admin"
    
    - set_fact: stageorprod=stage01
      when: servertype == "stage"
    
    - set_fact: stageorprod=prod
      when: servertype == "prod"
    
    - set_fact: fast={{ stageorprod }}/{{ folder }}/{{ servername }}
    
    - name: Base copying admin-server
      copy: src=admin-server/config dest=/home/tomcat/config/{{ fast }}/
      when: serverrole == "admin"
    
  • ansible/roles/configs/files/admin server/Config中的配置文件。 当我使用变量的默认值(5,admin,stage)运行playbook时,我得到:

    TASK: [configs | set_fact fast={{stageorprod}}/{{folder}}/{{servername}}] ***** 
    ok: [testcen04] => {"ansible_facts": {"fast": "stage01/admin-server/5"}, "item": ""}
    
    
    TASK: [configs | Base copying admin-server]         *********************************** 
    failed: [testcen04] => {"failed": true, "item": "", "md5sum": "cb2547d6235c078cfda365a5fb3c27c3", 
    "path": "/home/tomcat/config/stage01/admin-server/config", "state": "absent"}
    msg: path /home/tomcat/config/stage01/admin-server/config does not exist
    
  • 当我使用相同的值再次运行此任务时,一切正常。但是如果我改变一些变量,它会再次出现。 我注意到,其他模块,如“模板”,在使用此变量的同一剧本中工作良好。也许“复制”有问题?
    正如您所看到的,变量“fast”得到了正确的值,但不知何故,“servername”的值消失了。

    您的问题对于如何执行playbook以及如何使用提示的变量来完成任务是非常模糊的。如果您试图启动服务器,最好在没有提示的情况下在清单中声明它们。如果您试图访问特定的组,则可能需要使用组来限制其范围

    如果您正在使用ansible为您生成一组主机。在启动主机并引导它们之前,您可能希望将这些信息一致地存储在某个位置,可能是在实例标记、键值存储(如redis、数据库)或文件中。然后运行第二个剧本以包含该角色

    如果您不在公共云中,并且由于某些原因无法标记实例或将其分组到资源清册中,那么您还可以尝试使用设置服务器上的事实,并使它们在运行中保持不变,而不仅仅是在播放中。请注意,一旦您写入facts.d文件,您应该重新运行
    setup
    模块以再次收集事实。即使我使用公共云,我也经常利用事实