Saltstack 传递字符转义 cronjobs 变量的反斜杠和双引号

问题描述 投票:0回答:1

我正在 saltstack 中编写一个 sls 模板,并尝试正确编写一个 cronjob 条目,但我无法这样做,因为编译器总是抱怨语法问题,因为转义似乎没有像我想象的那样工作。 我也需要 cron 命令中的转义反斜杠,否则 cronjob 无法正确使用格式字符。

这是我模板中的代码

{{instance}} cron-entry-for-backup-daily:
 cron.present:
   - user: root
   - name: "{{ online_basedir }}/online_tools/db-tools.py -b {{ settings.port }} -s {{ settings.online_master }} -x {{ instance + '.domain.name' }} backup -d {{ instance }} -f {{ '/opt/onlinebackupdir/' + instance + '/' + instance + '-odoo_db-' + '`date' + '\"' + '+\%Y_\%m_\%d-\%H_\%M' + '\"' + '`' + '_daily.zip'}}"
   - minute: '*'
   - hour: '22'
   - daymonth: '*'
   - month: '*'
   - dayweek: '1-6'
   - identifier: {{ instance + '_dailybackup' }}
   - comment: 'Installed via Salt'

cronjob 条目应该如下所示

 * 22 * * 1-6 /opt/online/online_tools/db-tools.py -b 63000 -s xyz123 -x sub.domain.name backup -d dbname -f /opt/onlinebackupdir/dbname/dbname-odoo_db-`date "+\%Y_\%m_\%d-\%H_\%M"`_daily.zip

如果我在命令行上执行它,它会工作;如果我通过 cron 执行它,它会工作......

错误信息:

我无法从预期的 sls 文件编译我的代码,但是 在“”第 124 行第 154 列中找到“”: ... ckupdir/dbname/dbname-odoo_db-

date"+\%Y_\%m_\%d-\%H_\%M"
_daily.zip"

我已经尝试了一些方法,但我想我现在无法解决这个问题,已经脑死亡了:-(也许有人知道一个解决方案,我也检查了 jinja 文档以逃避 aso ...但我现在很无助

尝试:

'`date +\%Y_\%m_\%d-\%H_\%M`' --> error
'`date "+\%Y_\%m_\%d-\%H_\%M"`' --> error
'`date \"+\%Y_\%m_\%d-\%H_\%M\"`' --> error
'`date '+'\%Y_\%m_\%d-\%H_\%M`' --> error 
'`date '+\%Y_\%m_\%d-\%H_\%M'`' --> error
'`date \"+"\%Y_\%m_\%d-\%H_\%M"\"'`' --> error 
'`date' + '"' + '+\%Y_\%m_\%d-\%H_\%M' + '"' + '`' --> error 
'`date' + '"' + '+\%Y_\%m_\%d-\%H_\%M' + '"' + '`' --> error 
'`date +%Y_%m_%d-%H%M`' --> compiled and worked in command line but not inside crontab % needs to be escaped 

同时我也尝试过这个

"{{ online_basedir }}/online_tools/db-tools.py -b {{ settings.port }} -s {{ settings.online_master_pw }} -x {{ instance + '.domainname.net' }} backup -d {{ instance }} -f {{ '/opt/onlinebackupdir/' + instance + '/' + instance + '-odoo_db-' }} + {% raw %} `date "+\%Y_\%m_\%d-\%H_\%M"` {% endraw %} + {{'_daily.zip'}}"
"{{ online_basedir }}/online_tools/db-tools.py -b {{ settings.port }} -s {{ settings.online_master_pw }} -x {{ instance + '.domainname.net' }} backup -d {{ instance }} -f {{ '/opt/onlinebackupdir/' + instance + '/' + instance + '-odoo_db-' + {% raw %} `date "+\%Y_\%m_\%d-\%H_\%M"` {% endraw %} + '_daily.zip'}}"

这也不起作用

cron jinja2 salt-stack
1个回答
0
投票

好吧,我用这个解决方案解决了问题,也许这不是最好的方法,但它解决了我的问题...... 如果有人读到这篇文章,我会感兴趣为什么

{% raw %} .... {% endraw % }
不起作用

解决方案:

"{{ online_basedir }}/online_tools/db-tools.py -b {{ settings.port }} -s {{ settings.online_master_pw }} -x {{ instance + '.domainname.net' }} backup -d {{ instance }} -f {{ '/opt/onlinebackupdir/' + instance + '/'  + instance + '-odoo_db-' + '`date \\\"+\\\\%Y_\\\\%m_\\\\%d-\\\\%H_\\\\%M\\\"`' + '_weekly.zip'}}"

现在 crontab 中的行看起来和我需要的一模一样:

.......`date "+\%Y_\%m_\%d-\%H_\%M"`..... .zip

我的备份文件夹中的结果:

instance-odoo_db-2016_10_19-22_00_daily.zip

© www.soinside.com 2019 - 2024. All rights reserved.