金鱼哥RHCA回忆录:RH358管理打印机和打印文件--自动化配置打印机

举报
金鱼哥 发表于 2022/04/29 09:32:02 2022/04/29
【摘要】 第五章 管理打印机和打印文件--自动化配置打印机

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

🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家
📚个人资质:CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥


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管理打印队列。

RHCA认证需要经历5门的学习与考试,还是需要花不少时间去学习与备考的,好好加油,可以噶🤪。

以上就是【金鱼哥】对 第五章 管理打印机和打印文件–自动化配置打印机 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。

💾红帽认证专栏系列:
RHCSA专栏:戏说 RHCSA 认证
RHCE专栏:戏说 RHCE 认证
此文章收录在RHCA专栏:RHCA 回忆录

如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。

如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。