Я использую определение доступного logrotate для logrotate в ubuntu 14.04, которое имеет определение, как показано ниже
---
- name: dependencies
apt: pkg={{item}} state=latest
with_items:
- unzip
- jq
- name: check if already downloaded
stat: path={{nomad_download_folder}}/{{nomad_archive}}
register: nomad_archive_stat
- name: download
get_url: >
url={{nomad_download}}
dest={{nomad_download_folder}}
sha256sum={{nomad_checksum}}
register: nomad_downloaded
when: nomad_archive_stat.stat.exists == false
- name: group
group: >
name={{nomad_group}}
state=present
register: nomad_group_created
# On Nomad schedulers
- name: user
user: >
home={{nomad_home}}
name={{nomad_user}}
system=yes
groups={{nomad_group}}
append=yes
when: (nomad_group_created | changed) and (nomad_is_server == true)
# On Nomad runners
- name: user
user: >
home={{nomad_home}}
name={{nomad_user}}
system=yes
groups={{nomad_group}},docker
append=yes
when: (nomad_group_created | changed) and (nomad_is_server == false)
- name: directories
file: >
state=directory
path={{item}}
owner={{nomad_user}}
group={{nomad_group}}
with_items:
- "{{nomad_home}}"
- "{{nomad_home}}/bin"
- "{{nomad_config_dir}}"
- name: check for log directory
stat: path={{nomad_log_file | dirname}}
register: nomad_log_directory_stat
- name: create log directory
file: >
state=directory
path={{nomad_log_file | dirname}}
owner={{nomad_user}}
group={{nomad_group}}
when: not nomad_log_directory_stat.stat.exists
- name: touch log file
file: >
state=touch
path={{nomad_log_file}}
owner={{nomad_user}}
group={{nomad_group}}
changed_when: false
- name: install
unarchive: >
src={{nomad_download_folder}}/{{nomad_archive}}
dest={{nomad_home}}/bin
copy=no
when: nomad_downloaded | changed
- name: link executable in PATH
file: >
state=link
src={{nomad_home}}/bin/nomad
dest=/usr/local/bin/nomad
- name: set ownership
file: >
state=directory
path={{nomad_home}}
owner={{nomad_user}}
group={{nomad_group}}
recurse=yes
when: nomad_downloaded | changed
- name: nomad config file
template: >
src=nomad.conf.j2
dest={{nomad_config_file}}
owner={{nomad_user}}
group={{nomad_group}}
mode=0755
notify:
- restart nomad
- name: copy nomad upstart script
template: >
src=nomad.upstart.conf.j2
dest=/etc/init/nomad.conf
owner={{nomad_user}}
group={{nomad_group}}
mode=0755
notify:
- restart nomad
- name: rotate log file
logrotate: name=nomad path={{nomad_log_file}}
args:
options:
- daily
- missingok
- rotate 3
- compress
- delaycompress
- copytruncate
- notifempty
Это приводит к созданию файла со странным синтаксисом, который показан ниже.
sudo cat /etc/logrotate.d/nomad
# Generated by Ansible.
# Local modifications will be overwritten.
/var/log/nomad.log {
[
'
d
a
i
l
y
'
,
'
m
i
s
s
i
n
g
o
k
'
,
'
r
o
t
a
t
e
3
'
,
'
c
o
m
p
r
e
s
s
'
,
'
d
e
l
a
y
c
o
m
p
r
e
s
s
'
,
'
c
o
p
y
t
r
u
n
c
a
t
e
'
,
'
n
o
t
i
f
e
m
p
t
y
'
]
}
Из-за этой синтаксической ошибки я получаю так много писем каждое утро. Ниже приведены более подробные сведения о сервере.
$sudo ansible --version
ansible 2.2.1.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
$lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.4 LTS
Release: 14.04
Codename: trusty
Если я клонирую этот модуль из github и создаю такую книгу:
- hosts: localhost
roles:
- logrotate
tasks:
- logrotate: name=myapp path=/tmp/myapp.log
args:
options:
- daily
- rotate 8
- postrotate
- exec script
- endscript
Он работает нормально, и в результате получается файл конфигурации logrotate, который выглядит так:
# Generated by Ansible.
# Local modifications will be overwritten.
/tmp/myapp.log {
daily
rotate 8
postrotate
exec script
endscript
}
Если вы наблюдаете разное поведение при использовании идентичного сценария, не могли бы вы обновить свой вопрос, чтобы указать, какую версию ansible вы используете (и на какой платформе вы его используете)?
Между прочим, синтаксис, который вы используете, немного странный; вы смешиваете устаревший синтаксис key = value с предпочтительным синтаксисом словаря YAML. Это не влияет на работу (сценарий в любом случае работает одинаково), но в целом вы бы написали его так:
- hosts: localhost
roles:
- logrotate
tasks:
- logrotate:
name: myapp
path: /tmp/myapp.log
options:
- daily
- rotate 8
- postrotate
- exec script
- endscript