2017-04-07 70 views
-3
--- 
- name: Oracle DB Prereqs 
    hosts: sandbox 
    become: true 
    gather_facts: yes 
    vars: 
     shmall_ent: 16384 
     shmall_mid: 32768 
     shmall_lar: 65536 
     shmall_exlar: 262144 

    tasks: 
    - name: SHMALL value to set for memory size less than 16G 
     when: ansible_memtotal_mb <= {{ shmall_ent }} 
     notify: 
     - SHMALL ent 

    - name: SHMALL value to set for memory size between 16G and 32G 
     when: (ansible_memtotal_mb > {{ shmall_ent }} and ansible_memtotal_mb <= {{ shmall_mid }})|int 
     notify: 
     - SHMALL mid 

    - name: SHMALL value to set for memory size between 32G and 64G 
     when: (ansible_memtotal_mb > {{ shmall_mid }} and ansible_memtotal_mb <= {{ shmall_lar }})|int 
     notify: 
     - SHMALL lar 

    - name: SHMALL value to set for memory size between 64G and 256G 
     when: (ansible_memtotal_mb > {{ shmall_lar }} and ansible_memtotal_mb <= {{ shmall_exlar }})|int 
     notify: 
     - SHMALL exlar 
     handlers: 
    - name: SHMALL ent 
     sysctl: 
     name: kernel.shmall 
     value: 3670016 
     sysctl_file: /etc/sysctl.d/99-sysctl.conf 
    - name: SHMALL mid 
     sysctl: 
     name: kernel.shmall 
     value: 7340032 
     sysctl_file: /etc/sysctl.d/99-sysctl.conf 
    - name: SHMALL lar 
     sysctl: 
     name: kernel.shmall 
     value: 14680064 
     sysctl_file: /etc/sysctl.d/99-sysctl.conf 
    - name: SHMALL exlar 
     sysctl: 
     name: kernel.shmall 
     value: 57671680 
     sysctl_file: /etc/sysctl.d/99-sysctl.conf 

错误使用处理器,同时运行的打法是:错误而Ansible

为YAML
ERROR! Syntax Error while loading YAML. 


The error appears to have been in '/home/rjoy/ansible/roles/oracle/playbook/oraunix.yml': line 12, column 4, but may 
be elsewhere in the file depending on the exact syntax problem. 

The offending line appears to be: 


    tasks: 
^here 

回答

0

大部分的语法错误是因为不正确的缩进,因为YAML依赖于空白。

请参阅从playbook documentation这个例子:

--- 
- hosts: webservers 
    vars: 
    http_port: 80 
    max_clients: 200 
    remote_user: root 
    tasks: 
    - name: ensure apache is at the latest version 
    yum: name=httpd state=latest 
    - name: write the apache config file 
    template: src=/srv/httpd.j2 dest=/etc/httpd.conf 
    notify: 
    - restart apache 
    - name: ensure apache is running (and enable it at boot) 
    service: name=httpd state=started enabled=yes 
    handlers: 
    - name: restart apache 
     service: name=httpd state=restarted 

注意如何tasks缩进到同一级别hostsvarsremote_user

另请参阅tasks数组中的项目如何将短划线(-)缩进与单词“tasks”相同的级别。

此缩进非常重要,因为这就是Yaml如何确定哪些元素属于其他元素。如果你没有正确缩进,它就不知道如何解析它。

所以这应该为你工作

--- 
- name: Oracle DB Prereqs 
    hosts: sandbox 
    become: true 
    gather_facts: yes 
    vars: 
    shmall_ent: 16384 
    shmall_mid: 32768 
    shmall_lar: 65536 
    shmall_exlar: 262144 

    tasks: 
    - name: SHMALL value to set for memory size less than 16G 
    when: ansible_memtotal_mb <= {{ shmall_ent }} 
    notify: 
     - SHMALL ent 

    - name: SHMALL value to set for memory size between 16G and 32G 
    when: (ansible_memtotal_mb > {{ shmall_ent }} and ansible_memtotal_mb <= {{ shmall_mid }})|int 
    notify: 
     - SHMALL mid 

    - name: SHMALL value to set for memory size between 32G and 64G 
    when: (ansible_memtotal_mb > {{ shmall_mid }} and ansible_memtotal_mb <= {{ shmall_lar }})|int 
    notify: 
     - SHMALL lar 

    - name: SHMALL value to set for memory size between 64G and 256G 
    when: (ansible_memtotal_mb > {{ shmall_lar }} and ansible_memtotal_mb <= {{ shmall_exlar }})|int 
    notify: 
     - SHMALL exlar 

    handlers: 
    - name: SHMALL ent 
     sysctl: 
     name: kernel.shmall 
     value: 3670016 
     sysctl_file: /etc/sysctl.d/99-sysctl.conf 

    - name: SHMALL mid 
     sysctl: 
     name: kernel.shmall 
     value: 7340032 
     sysctl_file: /etc/sysctl.d/99-sysctl.conf 

    - name: SHMALL lar 
     sysctl: 
     name: kernel.shmall 
     value: 14680064 
     sysctl_file: /etc/sysctl.d/99-sysctl.conf 

    - name: SHMALL exlar 
     sysctl: 
     name: kernel.shmall 
     value: 57671680 
     sysctl_file: /etc/sysctl.d/99-sysctl.conf 
+0

谢谢。你能帮我优化我上面提到的脚本吗? – Gladiator

+0

看我的编辑。你所要做的就是在几行开始时删除几个额外的空格。 –

+0

剧本效果很好。现在我需要用相同的条件语句添加kernel.shmmax值,它会在这些条件下对多个条目使用sysctl文件吗? @ Yep_It's_Me – Gladiator