将2本剧本变成1本剧本

时间:2019-10-29 08:11:10

标签: ansible

因此,我正在使用ansible剧本在超过100台服务器上固定我的logrotate,每台服务器都有5-7个logrotate.d项需要更改。我知道如何只用1个项目来解决它,但我似乎无法弄清楚如何将1个以上的东西放进剧本中进行更改,逻辑告诉我只列出对方,但随后它开始跳过除第一个之外的所有内容代替。所以请在这里包括2本单独的剧本,有人可以告诉我如何将它们变成1本剧本吗?

我尝试列出-名称部分,但确实有用。

---
- hosts: '{{ server }}'
  remote_user: ansip
  become: yes
  become_method: sudo

  vars_prompt:
    - name: "server"
      prompt: "Enter server name or all"
      private: no

  tasks:
  roles:
    - role: ansible-role-logrotate
      logrotate:
        compress: true
        create: true
        weekly: true
        dateext: true
        include: /etc/logrotate.d
        rotate: 3
        shred: true
      logrotate_d:
        - name: samba
          files:
            - /var/log/samba/*
          options:
            compress: true
            dateext: true
            rotate: 3

- hosts: '{{ server }}'
  remote_user: ansip
  become: yes
  become_method: sudo

  tasks:
  roles:
    - role: ansible-role-logrotate
      logrotate:
        compress: true
        create: true
        weekly: true
        dateext: true
        include: /etc/logrotate.d
        rotate: 3
        shred: true
      logrotate_d:
        - name: httpd
          files:
            - /var/log/httpd/*log
          options:
            compress: true
            dateext: true
            rotate: 3
...

因此,在Appu的帮助下,我已经做到了:

  logrotate_d:
    - name: "{{ item.name }}"
      files:
        - "{{ item.logpath }}" / "{{ item.name }}"/*log
      options:
        compress: true
        dateext: true
        rotate: 3
      with_items:
        - { name: 'samba', logpath: '/log/var' }
        - { name: 'httpd', logpath: '/log/var' }

但是,它似乎很喜欢对数路径和名称之间的“ /”。认为它也缺少引号,如果我添加配额,它仍然会认为相同。我只在两边都加了空格,否则引号会变得疯狂甚至停止,使整个剧本变成红色。

3 个答案:

答案 0 :(得分:1)

我尚未对其进行测试,但是您可以通过在其下面指定必填字段列表来使用“ with_items”。

  tasks:
  roles:
    - role: ansible-role-logrotate
      logrotate:
        compress: true
        create: true
        weekly: true
        dateext: true
        include: /etc/logrotate.d
        rotate: 3
        shred: true
      logrotate_d:
        - name: "{{ item.o }}"
          file: /"{{ item.l }}"/"{{ item.o }}"/*
          options:
            compress: true
            dateext: true
            rotate: 3
      with_items:
        - { o: 'samba', l: 'var/log' }
        - { o: 'httpd', l: '/tmp' }
...

答案 1 :(得分:0)

您可以尝试使用import_playbook功能。

答案 2 :(得分:0)

Okei,所以我做到了,谢谢大家的帮助。我无法使用with_items来工作,所以我回到了列出所有事物的原始想法,现在不知何故它开始起作用了,而我早些时候无法使它起作用。

- hosts: '{{ server }}'
  remote_user: ansip
  become: yes
  become_method: sudo

  vars_prompt:
- name: "server"
  prompt: "Enter server name or all"
  private: no

  tasks:
  roles:
    - role: ansible-role-logrotate
      logrotate:
        compress: true
        create: true
        weekly: true
        dateext: true
        include: /etc/logrotate.d
        rotate: 3
        shred: true
      logrotate_d:
        - name: samba
          files:
            - /var/log/samba/*
          options:
            compress: true
            dateext: true
            rotate: 3


          - name: httpd
           files:
             - /var/log/httpd/*
           options:
             compress: true
             dateext: true
             rotate: 3


         - name: syslog
           files:
             - /var/log/cron/*
             - /var/log/maillog/*
             - /var/log/messages/*
             - /var/log/secure/*
             - /var/log/spooler/'
           options:
             compress: true
             dateext: true
             rotate: 3