>

다음과 같은 구술이 있습니다 :

endpoint:
    esxi_hostname: servername.domain.com

vmware_guest에 대해 jinja2를 통해 옵션으로 사용하려고했지만 실패했습니다. 이 방법으로 시도하는 이유는 dict가 동적이기 때문입니다. clustername 또는 esxi_hostname : hostname이며 vmware_guest 모듈에서 상호 배타적 일 수 있습니다.

다음은이를 모듈에 제시하는 방법입니다 :

- name: Create VM pysphere
  vmware_guest:
   hostname: "{{ vcenter_hostname }}"
   username: "{{ username }}"
   password: "{{ password }}"
   validate_certs: no
   datacenter: "{{ ansible_host_datacenter }}"
   folder: "/DCC/{{ ansible_host_datacenter }}/vm"
   "{{ endpoint }}"
   name: "{{ guest }}"
   state: present
   guest_id: "{{ osid }}"
   disk: "{{ disks }}"
   networks: "{{ niclist }}"
   hardware:
    memory_mb: "{{ memory_gb|int * 1024 }}"
    num_cpus: "{{ num_cpus|int }}"
    scsi: "{{ scsi }}"
   customvalues: "{{ customvalues }}"
   cdrom:
    type: client
  delegate_to: localhost

과제 파일을 포함시킬 때 발생하는 오류는 다음과 같습니다.

TASK [Preparation : Include VM tasks] *********************************************************************************************************************************************************************************   
fatal: [10.10.10.10]: FAILED! => {"reason": "Syntax Error while loading YAML.

The error appears to have been in '/data01/home/hit/tools/ansible/playbooks/roles/Preparation/tasks/prepareVM.yml': line 36, column 4, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
    "{{ endpoint }}"
   hostname: "{{ vcenter_hostname }}"
   ^ here
We could be wrong, but this one looks like it might be an issue with
missing quotes.  Always quote template expression brackets when they
start a value. For instance:
    with_items:
      - {{ foo }}
Should be written as:
    with_items:
      - "{{ foo }}"
exception type: <class 'yaml.parser.ParserError'>
exception: while parsing a block mapping
  in "<unicode string>", line 33, column 3
did not find expected key
  in "<unicode string>", line 36, column 4"}

요약하면, 어떻게 포맷해야하는지 또는 가능한지 잘 모르겠습니다.


  • 답변 # 1

    techraf의 게시물이 문제를 요약하지만 가능한 해결책, 특히 Jinja 필터와 관련된 문서의 경우 다음과 같은 비트가 있습니다.

    와이즈 비즈 와이즈 비즈      

    목록의 처음 두 파일의 경우 기본 모드는   mode = 매개 변수는 시스템의 umask에 의해 결정되지 않습니다.   최종 파일이 파일 모듈을받는 동안 파일 모듈로 전송됩니다.   mode = 0444 옵션.

    시도해야 할 것 같습니다 :

    Omitting Parameters

    As of Ansible 1.8, it is possible to use the default filter to omit module parameters using the special omit variable:

    
    

    이것은 분명히 - name: touch files with an optional mode file: dest={{item.path}} state=touch mode={{item.mode|default(omit)}} > with_items: - path: /tmp/foo - path: /tmp/bar - path: /tmp/baz mode: "0444" 에 의존합니다  첫 번째로 무엇보다도 Ansible에 유효한 YAML 파일이 필요하기 때문에 질문에서 시도한 구문을 사용할 수있는 방법이 없습니다.

    가장 가까운 해결책은 리터럴에서만 작동하지만 YAML 앵커/별명을 사용하는 것입니다.

    esxi_hostname: "{{ endpoint.esxi_hostname | default(omit) }}"
    # however you want the alternative cluster settings done.
    # I dont know this module.
    cluster: "{{ cluster | default(omit) }}"
    
    
    vars

  • 이전 c++ - unique_ptr에 파생 클래스에 대한 사용자 정의 생성자가 표시되지 않습니다
  • 다음 javascript - 모달 창을 버튼에 연결하고 버튼 동작을 계속하기 전에 모달 창이 닫힐 때까지 기다리십시오