RH358管理打印机和打印文件--自动化配置打印机

简介: RH358管理打印机和打印文件--自动化配置打印机

RH358管理打印机和打印文件–自动化配置打印机

本章节介绍如何使用Ansible部署和管理打印机。虽然有点积累,但可理解为对Ansible的加深使用。

RH358专栏地址:https://blog.csdn.net/qq_41765918/category_11532281.html

1. 使用Ansible部署CUPS

此前还没有特定于cups的Ansible模块。使用Ansible在服务器上部署CUPS遵循一个标准流程。

# 安装
#安装yum Ansible模块的cups和avahi包。
- name: Install packages for printer support
  yum:
  name:
    - avahi
    - cups
  state: present

# 启用并启动CUPS服务
#使用Ansible服务模块启用并启动cups服务。不需要启动avahi-daemon服务,因为它是套接字激活的,并自动启动。
- name: Enable and start services for printer support
  systemd:
    name: cups
    state: started
    enabled: yes

# 配置防火墙规则
#使用firewalld模块打开mdns服务的防火墙端口。
- name: Open the mDNS firewall port
  firewalld:
    service: mdns
    state: enabled
    permanent: yes
    immediate: yes

2. 添加和删除打印机

虽然目前Ansible还不包括管理CUPS的模块,但您可以使用命令Ansible模块调用的shell命令来创建和管理CUPS。

# 创建打印队列
#下面的示例剧本创建了两个打印机。为了保持剧本的简单,它不会自动发现可用的打印机。您必须定义一个包含打印机队列名称和相关uri列表的变量。
- name: Create or update print queues
  hosts: servers
  vars:
    printers:
      - name: "bwprinter"
        uri: "ipp://192.0.2.12:631/printers/bwprinter"
      - name: "color"
        uri: "ipp://192.0.2.77:631/ipp/port1"
  tasks:
    - name: Configure all printers
      command:
        cmd: lpadmin -p {
    {
     item['name'] }} -v {
    {
     item['uri'] }} -m everywhere -E
      loop: "{
    { printers }}"
配置任务在每次运行时都会报告“更改”,即使打印机已经存在并且已正确配置。如果您希望配置任务真正是幂等的,它应该在运行配置所有打印机任务之前确定打印机队列是否存在并正确配置。

# 设置默认目标
#在下面的例子中,第一个任务集更改为false,因为它不更改托管主机;它运行一个命令来收集信息。第二个任务使用regex_replace筛选器从lpstat -d的输出中删除额外的文本,以便条件可以比较打印机名称
- name: Set the default printer
  hosts: servers
  vars:
    default_dest: "bwprinter"
  tasks:
    - name: Determine the current default destination
      command: lpstat -d
      register: curr_dest
      changed_when: false

    - name: Make sure default_dest is the default destination
      command: lpadmin -d {
    {
     default_dest }}
      when: curr_dest['stdout'] | regex_replace('^(.*):.') != default_dest
#剧本确定默认打印机是什么,并使用该信息有条件地设置默认打印机。这将阻止它在默认打印机已经正确设置时进行更改。

# 删除打印队列
#下面的播放检查一个名为bwprinter的打印队列是否存在,如果存在,则删除它。第一个任务将ignore_errors设置为true,这样即使队列不存在,play也会继续执行。如果需要剧本失败,那就删除这一行。
- name: Delete obsolete print queues
  hosts: servers
  gather_facts: no
  vars:
    queue_name: "bwprinter"
  tasks:
    - name: Check if print queue exists
      command: lpstat -p "{
    {
     queue_name }}"
      register: result
      ignore_errors: true
      changed_when: false
      
    - name: Delete the print queue
      command: lpadmin -x "{
    {
     queue_name }}"
      when: result.rc == 0

3. 使用Ansible管理打印队列

以下任务配置一个由queue_name变量(在本例中为bwprinter)指定的打印队列,以便在存在打印作业时接受它。如果队列不存在,任务和它的play将会存在失败。

- name: Make sure the print queue accepts jobs
  command: cupsaccept "{
    {
     queue_name }}"

注意:此任务每次都会报告更改后的结果,即使队列已经在接受作业。您可以添加任务来避免这种结果。例如,您可以解析lpstat -p的输出,并有条件地运行cupsaccept任务。

可以为cupsreject、cupsenable或cupsdisable编写类似的任务。

4. 课本练习

[student@workstation ~]$ lab printing-automation start

该命令确保在serverc上配置了IPP Everywhere打印机。发送到此打印机的打印作业可以通过web浏览器查看:http://serverd /ippserver/ippp-everywhere-pdf。该命令还在/home/student/print-auto/中创建一个Ansible项目。

在本练习中,将在使用IPP Everywhere网络打印机的servera上创建一个CUPS打印队列。

1. 熟悉Ansible项目及其现状。

[student@workstation ~]$ cd ~/printing-auto
[student@workstation printing-auto]$ tree
.
├── ansible.cfg
├── inventory
├── printer-accept.yml
├── printer-create.yml
├── printer-destroy.yml
└── printer-reject.yml

0 directories, 6 files
[student@workstation printing-auto]$ cat inventory
serverb.lab.example.com
[clients]
servera.lab.example.com
[student@workstation printing-auto]$ cat ansible.cfg 
[defaults]
inventory=./inventory
remote_user=devops

2. 检查并完成printer-create.yml Ansible剧本。

这个剧本在servera上创建一个名为my-printer的打印队列。它提供打印机支持所需的服务并打开防火墙端口。

[student@workstation printing-auto]$ cat printer-create.yml 
---
- name: Install CUPS and create a print queue
  hosts: clients
  gather_facts: no
  become: yes
  vars:
    print_packages:
    - cups
    - avahi
    print_services:
    - avahi-daemon
    - cups
    print_ports:
    - mdns
    queue_name: "my-printer"
    dev_uri: "ipp://serverc.lab.example.com:631/printers/rht-printer"
  tasks:
    - name: Install the CUPS and Avahi packages
      yum:
        name: "{
    { print_packages }}"
        state: present

    - name: Enable and start the CUPS and Avahi services
      service:
        name: "{
    { item }}"
        state: started
        enabled: yes
      loop: "{
    { print_services }}"

    - name: Open the mDNS firewall port
      firewalld:
        service: "{
    { item }}"
        state: enabled
        permanent: yes
        immediate: yes
      loop: "{
    { print_ports }}"

    - name: Check if print queue already exists
      command: lpstat -p "{
    {
     queue_name }}"
      register: cmdout
      ignore_errors: true
      changed_when: false

    - name: Create the print queue
      command: lpadmin -p "{
    {
     queue_name }}" -v "{
    {
     dev_uri }}" -m everywhere -E
      when: cmdout.rc != 0

    - name: Check default print queue
      command: lpstat -d
      register: curr_dest
      changed_when: false

    - name: Make the new print queue the default
      command: lpadmin -d "{
    {
     queue_name }}"
      when: curr_dest['stdout'] | regex_replace('^(.*):.') != queue_name

3. 运行剧本创建打印队列。

[student@workstation printing-auto]$ ansible-playbook --syntax-check printer-create.yml

playbook: printer-create.yml
[student@workstation printing-auto]$ ansible-playbook printer-create.yml

4. 检查并完成printer-reject.yml Ansible剧本。

这个剧本调优服务器上的my-printer打印队列,以拒绝传入的打印作业。对文件进行编辑以填充缺失的信息。

[student@workstation printing-auto]$ cat printer-reject.yml 
---
- name: Configure a print queue to reject jobs
  hosts: clients
  gather_facts: no
  become: yes
  vars:
    queue_name: "my-printer"
  tasks:
    - name: Confirm the print queue exists
      command: lpstat -p "{
    {
     queue_name }}"
      register: cmdout
      ignore_errors: true
      changed_when: false

    - name: Tune the print queue to reject jobs
      command: cupsreject "{
    {
     queue_name }}"
      when: cmdout.rc == 0

5. 运行剧本配置打印队列以拒绝传入的打印作业。

[student@workstation printing-auto]$ ansible-playbook --syntax-check printer-reject.yml 

playbook: printer-reject.yml
[student@workstation printing-auto]$ ansible-playbook printer-reject.yml

[root@servera ~]# ls -al | lp
lp: Destination "my-printer" is not accepting jobs.

6. 检查并完成printer-accept.yml Ansible剧本。

这个剧本调优服务器上的my-printer打印队列以接受传入的打印作业。

[student@workstation printing-auto]$ vim printer-accept.yml 
---
- name: Configure a print queue to accept jobs
  hosts: clients
  gather_facts: no
  become: yes
  vars:
    queue_name: "my-printer"
  tasks:
    - name: Confirm the print queue exists
      command: lpstat -p "{
    {
     queue_name }}"
      register: cmdout
      ignore_errors: true
      changed_when: false

    - name: Tune the print queue to accept jobs
      command: cupsaccept "{
    {
     queue_name }}"
      when: cmdout.rc == 0

7. 运行剧本配置托管主机上的打印队列以接受传入的打印作业。

[student@workstation printing-auto]$ ansible-playbook printer-accept.yml --syntax-check

playbook: printer-accept.yml
[student@workstation printing-auto]$ ansible-playbook printer-accept.yml

[root@servera ~]# ls -al | lp
request id is my-printer-1 (0 file(s))

8. 检查并完成printer-destroy.yml Ansible剧本。

这个剧本删除了服务器上的my-printer打印队列。

[student@workstation printing-auto]$ vim printer-destroy.yml 
---
- name: Remove a print queue
  hosts: clients
  gather_facts: no
  become: yes
  vars:
    queue_name: "my-printer"
  tasks:
    - name: Check if print queue exists
      command: lpstat -p "{
    {
     queue_name }}"
      register: cmdout
      ignore_errors: true
      changed_when: false

    - name: Delete the print queue
      command: lpadmin -x "{
    {
     queue_name }}"
      when: cmdout.rc == 0

9. 运行剧本删除托管主机上的打印队列。

[student@workstation printing-auto]$ ansible-playbook printer-destroy.yml --syntax-check

playbook: printer-destroy.yml
[student@workstation printing-auto]$ ansible-playbook printer-destroy.yml

完成实验

[student@workstation ~]$ lab printing-automation finish

总结

  • 介绍如何使用Ansible部署CUPS。
  • 介绍如何添加和删除打印机。
  • 使用Ansible管理打印队列。
  • 若喜欢金鱼哥的文章,顺手点个赞。也可点个关注,因为后续会不断上干货。

目录
相关文章
|
3月前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
93 3
|
3月前
|
Linux 应用服务中间件 Shell
利用 ACME 实现SSL证书自动化配置更新
【10月更文挑战第11天】多项式承诺原理是密码学中的重要工具,允许证明者向验证者承诺一个多项式并证明其某些性质。Kate多项式承诺是一种知名方案,基于有限域上的多项式表示,通过生成和验证简洁的证明来确保多项式的正确性和隐私。其安全性基于离散对数假设。应用场景包括区块链中的零知识证明和可验证计算,以及多方计算和身份认证协议。在区块链中,Kate多项式承诺可用于保护隐私币和智能合约中的敏感信息。
216 2
|
5月前
|
JSON JavaScript 开发者
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
【8月更文挑战第7天】Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
|
4月前
|
Python
Python办公自动化:提取pdf文件中的图片
Python办公自动化:提取pdf文件中的图片
59 0
|
5月前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
116 1
|
4月前
|
存储 数据挖掘 测试技术
Python接口自动化中操作Excel文件的技术方法
通过上述方法和库,Python接口自动化中的Excel操作变得既简单又高效,有助于提升自动化测试的整体质量和效率。
46 0
|
5月前
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
112 0
|
5月前
|
Java Spring 开发者
解锁 Spring Boot 自动化配置的黑科技:带你走进一键配置的高效开发新时代,再也不怕繁琐设置!
【8月更文挑战第31天】Spring Boot 的自动化配置机制极大简化了开发流程,使开发者能专注业务逻辑。通过 `@SpringBootApplication` 注解组合,特别是 `@EnableAutoConfiguration`,Spring Boot 可自动激活所需配置。例如,添加 JPA 依赖后,只需在 `application.properties` 配置数据库信息,即可自动完成 JPA 和数据源设置。这一机制基于多种条件注解(如 `@ConditionalOnClass`)实现智能配置。深入理解该机制有助于提升开发效率并更好地解决问题。
98 0
|
5月前
|
运维 应用服务中间件 nginx
自动化运维的利剑:Ansible Role 打造标准化配置
【8月更文挑战第31天】在追求效率和稳定性的今天,自动化运维不再是奢侈品,而是必需品。Ansible Role,作为自动化配置管理的利器,它如何帮助我们实现标准化部署和维护?本文将通过一个简单示例,带你了解 Ansible Role 的魅力所在,并探讨其在现代 IT 架构中的应用价值。
|
5月前
|
Shell 网络安全 Python
网络工程师如何在ensp模拟器上玩python自动化配置交换机。
网络工程师如何在ensp模拟器上玩python自动化配置交换机。
313 0

热门文章

最新文章