gpt4 book ai didi

ansible - 如何使用 Ansible 干净地管理 printers.conf?

转载 作者:行者123 更新时间:2023-12-05 05:26:27 24 4
gpt4 key购买 nike

我有以下 Ansible 剧本文件,它试图在一组 CentOS 6 机器上管理 printers.conf。

---
# file: roles/common/tasks/config-cups.yml
# Configure printing

- name: ensure cups is installed
yum: pkg=cups state=installed

# We want to compare the local and remote printers.conf files so that
# we can predetermine if the copy needs to happen. According to a
# comment in the default printers.conf file, we can't write
# printers.conf while cups is running. But to be idempotent, we want
# to avoid stopping the cups service if we don't need to.

- stat: path=printers.conf
register: locst

- stat: path=/etc/cups/printers.conf
register: remst

# can't write printers.conf while running, so says the default file
- name: ensure cups is stopped
service: name=cups state=stopped
when: locst.stat.md5 ne remst.stat.md5

- name: Configure printers
tags: configuration
copy: >
src=printers.conf
dest=/etc/cups/printers.conf
mode=600 owner=root group=lp
notify:
- restart cups

- name: Enable the cups service
service: name=cups enabled=yes

- name: Ensure cups is running
service: name=cups state=started

不幸的是,我收到错误“致命:[hostxxx] => 错误评估条件:locst.stat.md5 ne remst.stat.md5”来自 when 条件控制停止杯子服务。

有没有办法查看正在评估的条件中的值?添加 -vvv 对我没有帮助。

或者还有其他调试条件的方法吗?

编辑 1:

显然 stat 模块总是远程的——它无法与 roles/common/files/printers.conf 中的本地 printers.conf 匹配

TASK: [common | stat path=printers.conf] **************************************
<hostxxx> ESTABLISH CONNECTION FOR USER[...]
<hostxxx> REMOTE_MODULE stat path=printers.conf
[...]
ok: [hostxxx] => {"changed": false, "stat": {"exists": false}}

这将是我“评估条件时出错”的来源。

所以我仍然不知道如何干净地管理文件。我不想手动将 md5 值编码到任务中。

stackoverflow question正在寻找几乎相同的东西。

编辑 2:

尽管我现在可以使用 local_action 获取针对本地文件执行的 stat 模块和解决 lack of role-path searching in local actions 的更长途径,尽管具有有效的 .stat.md5 值,但在评估条件时我仍然遇到相同的错误。

- local_action: stat path=roles/common/files/printers.conf
register: locst

但是,我确实注意到 md5 值出乎意料地不同。似乎在运行时,cups 重写了 printers.conf 文件,其中包括一个名为“StateTime”的时间戳。通过编写配置文件来管理杯子的直接方法就到此为止。

AFAICT,唯一干净管理 cups 的方法,这样它每次只会取消服务,要么在比较之前过滤现有的 printers.conf,要么不太合理,编写一个 webscraper 来针对界面杯希望您使用它来配置打印机。

最佳答案

我尝试使用 AlexKing 的答案,但无法使“扩展”正常工作。所以,以下是我最终得到的结果(经过测试和工作)

- name: Install Printer Driver | Create Kyocera directory as required
file: dest=/usr/share/cups/model/Kyocera mode=0755 state=directory owner=root

- name: Install Printer Driver | Copy PPD file
copy: src=Kyocera_TASKalfa_4551ci.PPD dest=/usr/share/cups/model/Kyocera/Kyocera_TASKalfa_4551ci.PPD owner=root group=lp mode=0444

- name: Install Printer Driver | Ensure cups is stopped before updating the printers.conf file
service: name=cups state=stopped

- name: Install Printer Driver | Configure Printer
tags: configuration
copy: src=printers.conf dest=/etc/cups/printers.conf mode=600 owner=root group=lp backup=yes

- name: Install Printer Driver | Ensure cups is running
service: name=cups state=started

根据我对 Ansible 工作原理的理解,您不需要检查文件是否不同 - 这已经在复制模块中发生了。

HTH,

罗素。

关于ansible - 如何使用 Ansible 干净地管理 printers.conf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26168051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com