金鱼哥RHCA回忆录:RH358管理打印机和打印文件--自动化配置打印机
本章节介绍如何使用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 回忆录
如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。
如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!
- 点赞
- 收藏
- 关注作者
评论(0)