标签 Ansible 下的文章

在本文中,我们将逐步向你展示如何在 Kubernetes(k8s)集群上安装 Ansible AWX。

Ansible AWX 是一个强大的开源工具,用于管理和自动化 IT 基础设施。AWX 为 Ansible 提供图形用户界面,使你可以轻松创建、安排和运行 Ansible 剧本 Playbook

另一方面,Kubernetes 是一种流行的容器编排平台,广泛用于部署和管理容器化应用。

先决条件:

  • Kubernetes 集群
  • Kubectl
  • 具有 sudo 权限和集群管理员权限的普通用户
  • 互联网连接

步骤 1:安装 Helm

如果你的系统上安装了 Helm,则在命令下运行以进行安装,

$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod +x get_helm.sh
$ ./get_helm.sh
$ helm version

Install-helm-linux-command-line

步骤 2:安装 AWX chart

在 Kubernetes 上安装 AWX 的最简单方法是使用 AWX Helm “ 海图 chart ”。因此,要通过 “海图” 安装 AWX,首先使用以下 helm 命令添加仓库。(LCTT 译注:Kubernetes 生态中大量使用了和航海有关的比喻,因此本文在翻译时也采用了这些比喻)

$ helm repo add awx-operator https://ansible.github.io/awx-operator/
"awx-operator" has been added to your repositories
$

注意:如果你之前已经添加过此仓库,请在命令下运行以获取最新版本的软件包。

$ helm repo update

要通过 Helm 安装 awx-operator,请运行:

$ helm install ansible-awx-operator awx-operator/awx-operator -n awx --create-namespace

helm-install-awx-operator-kubernetes

这将下载 AWX 海图并将其安装在 awx 命名空间中的 Kubernetes 集群上。安装过程可能需要几分钟,请耐心等待。

步骤 3:验证 AWX 操作员安装

安装成功后,你可以通过运行以下命令来验证 AWX 操作员 operator 状态:

$ sudo kubectl get pods -n awx

你应该看到这样的东西:

awx-operator-pod-status-kubectl

步骤 4: 创建 PV、PVC 并部署 AWX yaml 文件

AWX 需要 postgres 容器荚 pod 的持久卷。那么,让我们首先为本地卷创建一个存储类。

注意:在本文中,我使用本地文件系统作为持久卷。

$ vi local-storage-class.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-storage
  namespace: awxprovisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

保存并关闭文件,然后运行:

$ kubectl create -f local-storage-class.yaml
$ kubectl get sc -n awx
NAME            PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   
local-storage   kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   false                 
$

接下来使用以下 pv.yaml 文件创建持久卷(PV):

$ vi pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: postgres-pv
  namespace: awx
spec:
  capacity:
    storage: 10Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  storageClassName: local-storage
  local:
    path: /mnt/storage
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - k8s-worker

保存并退出文件。

Postgres-pv-awx-kubernetes

重要说明:确保文件夹 /mnt/storage 存在于工作节点上,如果不存在,则在工作节点上使用 mkdir 命令创建它。在我们的例子中,工作节点是 k8s-worker

执行下面的命令在 awx 命名空间中创建 postgres-pv

$ kubectl create -f pv.yaml

成功创建 PV 后,使用 pvc.yaml 文件创建 PersistentVolumeClaim:

$ vi  pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-13-ansible-awx-postgres-13-0
  namespace: awx
spec:
  storageClassName: local-storage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

posgres-pvc-awx-kubernetes

要创建 PVC,请运行以下 kubectl 命令:

$ kubectl create -f pvc.yaml

使用下面的命令验证 PV 和 PVC 的状态:

$ kubectl get pv,pvc -n awx

现在,我们都准备好部署 AWX 实例了。创建一个包含以下内容的 ansible-awx.yaml 文件:

$ vi ansible-awx.yaml
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: ansible-awx
  namespace: awx
spec:
  service_type: nodeport
  postgres_storage_class: local-storage

Ansible-awx-yaml-file

保存并关闭文件。

执行以下 kubectl 命令来部署 awx 实例:

$ kubectl create -f ansible-awx.yaml

等待几分钟,然后检查 awx 命名空间中的容器荚状态。

$ kubectl get pods -n awx

Ansible-AWX-Pods-Status-Kubernetes

步骤 5:访问 AWX Web 界面

要访问 AWX Web 界面,你需要创建一个公开 awx-web 部署的服务:

$ kubectl expose deployment ansible-awx-web --name ansible-awx-web-svc --type NodePort -n awx

此命令将创建一个 NodePort 服务,该服务将 AWX Web 容器的端口映射到 Kubernetes 节点上的端口。你可以通过运行以下命令找到端口号:

$ kubectl get svc ansible-awx-web-svc  -n awx

这将输出如下内容:

NAME                 TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
ansible-awx-web-svc   NodePort   10.99.83.248   <none>        8052:32254/TCP   82s

在此示例中,Web 服务在端口 32254 上可用。

Expose-Ansible-AWX-Web-NodePort-Kubernetes

默认情况下,admin 用户是 Web 界面的 admin,密码在 <resourcename>-admin-password 机密信息中。要检索管理员密码,请运行:

$ kubectl get secrets -n awx | grep -i admin-password
ansible-awx-admin-password        Opaque               1      109m
$
$ kubectl get secret ansible-awx-admin-password -o jsonpath="{.data.password}" -n awx | base64 --decode ; echo
l9mWcIOXQhSKnzZQyQQ9LZf3awDV0YMJ
$

你现在可以打开 Web 浏览器并进入 http://<node-ip>:<node-port>/ 来访问 AWX Web 界面。在上面的示例中,URL 是:

http://192.168.1.223:3225

AWX-Login-URL-Kubernetes

输入凭据后单击登录。

Ansible-AWX-Web-Dashboard

恭喜! 你已在 Kubernetes 上成功安装 Ansible AWX。你现在可以使用 AWX 来自动化你的 IT 基础架构,并让你作为系统管理员的生活更轻松。

(题图:MJ/bfd354aa-2ee5-4555-98b8-ac5207cbeabe)


via: https://www.linuxtechi.com/install-ansible-awx-on-kubernetes-cluster/

作者:Pradeep Kumar 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

红帽利用 Ansible 数据训练运维 AI

红帽和 IBM 创建了 Project Wisdom,这使用户能够将编码命令作为一个简单的英语句子来输入,例如,“部署网络应用栈” 或 “安装 Nodejs 依赖”。这发展成了红帽的第一个重要的人工智能产品:Ansible Lightspeed。这种生成性人工智能服务提供了更一致、更准确、更快速的自动化。它使用自然语言处理,并与代码助理集成,以访问建立在红帽的 Kubernetes 服务 OpenShift 上的 IBM 基础模型。这些 LLM 是建立在红帽已知的正确数据上的,是基于经过测试的、高质量的数据和代码,而不是某个人为了赶时间而匆忙写出来的垃圾。

消息来源:The Register
老王点评:这才叫 “AIOps”。不过我总是还有点担忧,LLM 这种模型即便是在可信的数据上进行训练的,偶尔也会有“幻觉”出现,那对于运维可能就是灾难了。

Windows 11 也将有应用的云备份功能

智能手机用户长期以来一直享有云备份和恢复的功能,你可以购买一个新设备,在第一次启动时,只需登录你的平台账户,从云备份中选择 “恢复我的应用程序”。而现在,Windows 11 也能做到这一点。微软在 Build 2023 上宣布了这一功能。如果用户选择恢复,Windows 11 将自动应用旧的墙纸和设置,甚至开始预装你在旧电脑上安装的应用程序。一旦用户进入桌面,他们会看到任务栏中已经有了他们之前钉住的所有应用程序,点击它们将从微软商店自动下载。

消息来源:Windows Central
老王点评:这种功能我们在智能手机使用的怡然自得,可为什么换成 Windows 我就觉得那么不放心呢?

亚马逊关闭其中国的安卓应用商店

在亚马逊将其 Kindle 电子书阅读器撤出中国的 11 个月后,它又宣布在中国关闭其安卓应用商店。这个安卓应用商店几乎没有人使用,它为其基于安卓的 Fire 平板提供了应用市场。这个平板每年在全球销售约 1600 万台,而在中国销售更少。此外,亚马逊的安卓应用市场上的应用也提供给 Windows 的安卓子系统。

消息来源:The Register
老王点评:反正也没人使用。不过,对于 Windows 的安卓子系统用户,可能下载应用就麻烦了,但这个可能也没啥人用。

通过这些 Ansible 文章扩展你的知识和技能。

 title=

我希望能够激发刚刚接触 Ansible 的初学者的兴趣。这里有一系列总结文章,我已将其包括在内,以供你随意后续查阅。

适合初学者的 Ansible

这五篇文章对于 Ansible 新手来说是一个非常好的起点。前三篇文章由 Seth Kenlon 撰写。

  • 如果你不了解 Ansible ,现在可以做这 7 件事 来入手。这是很好的入门指导,它收集了用于管理硬件、云、容器等的链接。
  • 在 《编排与自动化有何区别?》 这篇文章中,你会学到一些术语和技术路线,将会激发你对 Ansible 感兴趣。
  • 文章 《如何用 Ansible 安装软件》 覆盖了一些脚本概念和一些 Ansible 的好惯例,给出了一些本地或远程管理软件包的案例。
  • 我编写 Ansible 剧本时学到的 3 个教训 中,使自己养成 Jeff Geerling 所传授的好习惯,他是一位真正的 Ansible 资深人士。源代码控制、文档、测试、简化和优化是自动化成功的关键。
  • 我使用 Ansible 的第一天》 介绍了记者 David Both 在解决重复性开发任务时的思考过程。这篇文章从 Ansible 的基础开始,并说明了一些简单的操作和任务。

尝试 Ansible 项目

一旦你掌握了基础和并拥有良好习惯,就可以开始一些具体主题和实例了。

提升你的 Ansible 技巧

Kubernetes 是近来的热门话题,以下文章提供了一些很好的示例来学习新技能。

我希望你的 Ansible 旅程已经开始,并能常从这些文章中充实自己。


via: https://opensource.com/article/21/1/ansible

作者:James Farrell 选题:lujun9972 译者:Donkey 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Ansible 是一个开源的自动化工具,可以以多种方式使用。以下是几个去年最受欢迎的 Ansible 教程和故事。

 title=

自动化不断改善着 IT 团队中每个人的生活。Ansible 可以帮助任何使用 IT 自动化的人,不管是为了保持文件的有序性还是配置打印机,或者是为了任何其他可以想象和构建的东西。这些是 2021 年我们分享的一些最引人注目的使用案例和经验。

无论你是第一次听说 Ansible,还是一个经验丰富的用户,这些文章都会有你的收获。

  • Ansible 的创始人 Michael DeHaan 分享了他对自己如何被引向 IT 自动化的想法。这篇访谈对 Ansible 是如何诞生的 以及随着时间的推移而发展的信息和见解都非常好。
  • 当你作为一个系统管理员可以将许多日常任务自动化时,自动化可以节省一天的时间。了解如何使用 Ansible 为 五个日常的系统管理员任务 实现自动化流程。
  • 你的下载文件夹中充满了垃圾吗?介绍一个简单的方法,用一个简单的剧本来清理你系统上的文件。它很容易扩展,计划好后,就会按照你的要求频繁运行。了解更多关于 用 Ansible 删除文件
  • 如果你正在 写 Ansible 剧本,可以用四行代码改善它们。想想下一个用户,特别是当你在一个项目上合作的时候。一个小的努力可以防止大的问题。
  • Ansible 社区已经采取了措施,通过审查其代码库和更新语言,使该项目更具包容性。请看 Ansible 术语变化 的总结。
  • 从你的 Ansible 剧本中调用 API,就像一个专业人员一样!找出每个人都应该知道的关于 利用剧本中的 REST API
  • 有一些应该每天、每周或每月运行的计划任务?使用 Ansible 和 anacron 来设置任务,利用时间戳而不是计划时间,所以即使你的机器在计划时间关闭,它也会在重新开启时运行。
  • 如果你刚刚开始使用 Ansible,也许你需要一些方向来开始。这里有 每个人都可以使用 Ansible 的 10 种方法
  • 当社区一起工作时,奇迹就会发生。这不仅仅是代码:了解 Ansible 如何构建设计系统,创建可重用的品牌资产以供社区使用。如果你是设计师或社区经理,你会特别欣赏这个故事。

via: https://opensource.com/article/22/1/learn-ansible

作者:Sumantro Mukherjee 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用本文中的这些 Ansible 剧本可以帮你获得更优的 Mycroft AI 体验。

 title=

Mycroft AI 是一款虚拟助手应用程序,可以响应语音请求并完成相应的任务,比如在互联网上搜索你需要的某些信息,或者下载你喜欢的博客等等。这是一款优秀的开源软件,不同于那些收集个人数据业务的公司的同款软件,Mycroft AI 注重于保护隐私以及提供平台灵活性。

Mycroft AI 使用 python 开发,可以安装于不同的硬件平台上。家喻户晓的树莓派便是一个非常热门的运行语音助手的硬件方案(不过不是唯一的方案)。方便的是,Mycroft 为树莓派提供了 Picroft 镜像,虽然目前 Picroft 还有一些限制,比如不支持 64 位系统,不过不能阻止它成为一种优秀的解决方案。

树莓派 4,我选择的目标平台

树莓派在 Mycroft 社区中非常受欢迎,因为其性价比高,在教育行业中有着巨大的优势,并且由于 Mycroft 提供的便捷功能以及树莓派本身易于访问的输入/输出(GPIO)引脚等,为树莓派提供了有趣的扩展可能(比如,提供 唤醒词 LED GPIO 能力)。

树莓派 4B 具有足够的 CPU 算力以及内存来平稳运行 Mycroft。我使用的是 8G 内存的树莓派4B,运行 Raspberry Pi OS Bullseye 64-bit 系统,你可以从 RaspberryPi.org 网站下载该系统镜像文件。

自动化这件事

构建你自己的 Mycroft AI 系统,必须要注意一些细节问题。根据我(一年以来)的初步经验,以下罗列了一些重要的技术细节点:

  • 音频输出(扬声器配置)
  • 音频输入(麦克风配置)
  • 麦克风质量(以购买的实际硬件为准)
  • 唤醒词响应(比如打招呼 “嘿,Mycroft”)
  • 响应延迟(比如提问 “天气怎么样”)

这些并不是 Mycroft AI 的问题(LCTT 译注:难道软件平台就没有处理延时问题?),它们只能是你在选择硬件和配置操作时必须牢记关心的事情。树莓派本身能够运行 Mycroft AI,但有一些配置需要额外的注意下:

  • CPU 调度器
  • SD 卡性能
  • PulseAudio 配置
  • 网络延迟

我做了大量的研究和实践来解决上面列出这些令人头疼的注意点,最终我实现了我的“终极”目标 —— 最流畅的体验!

Ansible 雪中送炭

我已经摸索出了最流畅的体验配置,但是如何确保在任何树莓派 4 板子上都能不遗漏每一个设置细节,然后达到重新部署这种流畅性体验的目标呢?

Ansible 能帮助你实现。Ansible 在设计上是幂等设计,这意味着它仅在需要时响应更改的请求。如果一切配置正确,Ansible 不会改变任何事情。这便是幂等设计的优美之处。

为了达到这一目的,我使用了两种 Ansible 场景角色工具:

  • 一个用于配置和调整树莓派
  • 一个用于安装和配置 Mycroft AI

Ansible prepi 角色

Ansible prepi role 应用了一些配置,以便让树莓派 4B 发挥更佳的性能以及为安装 Mycroft 做前提准备。

  • 更新 Raspberry Pi OS 至最新版本
  • 添加 Debian backports 仓库
  • 使用 next 分支更新固件,该分支支持 5.15 版本内核以及边缘固件
  • 使用测试版本更新 EEPROM,该版本支持边缘功能
  • 设置 initial_turbo 用来加速启动过程
  • 将树莓派超频至 2GHz
  • 在 RAMDisck 上挂载 /tmp
  • 优化 / 分区挂载选项,提升 SD 卡读/写性能
  • 管理 I2C、SPI、UART 接口
  • 设置 CPU 控制器至避免在空间内核函数之间发生上下文切换的模式,以便提升性能
  • 安装和配置 PulseAduio(非系统范围)
  • 新固件或者 EEPROM 安装后重启树莓派

Ansible mycroft 角色

Ansible mycroft role 基于脚本 dev_setup.sh 从 Github 仓库获取并安装和配置 Mycroft AI,该脚本是 Mycroft 核心团队提供。

  • 需要准备 Python3 环境
  • 系统集成环境
  • 额外的安装技能
  • 安装 Boto3、py\_mplayer、pyopenssl 库
  • 支持 IPC 的 RAMDisck
  • 支持文件配置
  • PulseAudio 优化
  • 安全的 Mycroft 消息总线 websocket

我利用 Ansible 剧本 来协调上面两个角色的使用。

个人配置需求

下面列举了一些个人配置的需求:

  • 能上网的树莓派 4B 板子(或者更新的板子)
  • Raspberry Pi OS 64-bit
  • Ansible 2.9(或者更新版本)
  • 可正常工作的 SSH

推荐使用 Etcher 来烧录 Raspberry Pi OS 镜像至 SD 卡,你也可以使用你选择的镜像烧录工具。

我将树莓派超频来提升性能,不过这可能对你的硬件是一种潜在危险。在使用我的 Ansible 剧本配置之前,请先仔细阅读。你需要为你的每个配置选择负责。你将决定使用哪个固件、哪个 EEPROM。超频的话需要记得提供相应的冷却系统。

执行 Ansible 剧本

第一步,使用命令从 Github 获取 Ansible 剧本:

$ git clone https://github.com/smartgic/ansible-playbooks-mycroft.git

源码中,requirements.yml 文件中提供了该剧本的依赖角色列表,必须从 Ansible Galaxy 中检索这些依赖。

$ cd ansible-playbooks-mycroft
$ ansible-galaxy install -r requirements.yml
Starting galaxy role install process
- downloading role 'mycroft', owned by smartgic
- downloading role from https://github.com/smartgic/ansible-role-mycroft/archive/main.tar.gz
- extracting smartgic.mycroft to /home/goldyfruit/.ansible/roles/smartgic.mycroft
- smartgic.mycroft (main) was installed successfully
- downloading role 'prepi', owned by smartgic
- downloading role from https://github.com/smartgic/ansible-role-prepi/archive/main.tar.gz
- extracting smartgic.prepi to /home/goldyfruit/.ansible/roles/smartgic.prepi
- smartgic.prepi (main) was installed successfully

第二步,编辑仓库中的 Ansible 清单,设置需要管理的主机。

[rpi]
rpi4b01 ansible_host=192.168.1.97 ansible_user=pi

[rpi] 代表组,无需更改。该组有一个主机 rpi4b01,其 IP 地址为 192.168.1.97, 并创建 pi 作为 Linux(Raspberry Pi OS)上的默认用户。

现在比较棘手的部分到了:你希望每个选项怎么配置?这取决于你自己,下面是我的首选配置,供你参考:

# file: install-custom.yml
- hosts: rpi
  gather_facts: yes
  become: yes

  pre_tasks:
    - name: Install Python 3.x Ansible requirement
      raw: apt-get install -y python3
      changed_when: no
      tags:
        - always

  vars:
    # PREPI
    prepi_pi_user: pi
    prepi_hostname: mylovelypi
    prepi_firmware_update: yes
    prepi_overclock: yes
    prepi_force_turbo: yes
    prepi_cpu_freq: 2000
    prepi_pulseaudio_daemon: yes

    # MYCROFT
    mycroft_branch: dev
    mycroft_user: "{{ prepi_pi_user }}"
    mycroft_skills_update_interval: 2.0
    mycroft_recording_timeout_with_silence: 3.0
    mycroft_enclosure_name: picroft
    mycroft_extra_skills:
      - https://github.com/smartgic/mycroft-finished-booting-skill.git

  tasks:
    - import_role:
        name: smartgic.prepi

    - import_role:
        name: smartgic.mycroft

上面的配置内容需要保存在文件里(比如,install-custom.yml)。

现在关键步骤:运行你新创建的剧本。

$ ansible-playbook -i inventory install-custom.yml -k

-k 选项只有在不需要 SSH 密钥的时候才使用。在命令执行期间,树莓派可能会重启若干次。Ansible 剧本会自动处理这个问题,不必担心。

Ansible 配置完成后,你可以看到一条祝贺消息,提示你下一步需要做什么。

 title=

Ansible 让定制 Mycroft 变得更容易

这些 Ansible 剧本是我开始使用 Mycroft AI 后学到的经验教训。它们帮助我在任何一个地方都能构建、重构、定制、拷贝我的安装,并保持一致,这让我很省心!

读完此文,你有何意见、问题或疑虑?欢迎在 Twitter上 @goldyfruit上和我交流,或者访问 Mycroft 频道 搜寻答案。


via: https://opensource.com/article/21/12/mycroft-raspberry-pi-ansible

作者:Gaëtan Trellu 选题:lujun9972 译者:jrglinux 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

有了 anacron,我可以把脚本和 Ansible 剧本放到合适的地方,以完成各种琐碎的任务。

 title=

自动化是伟大的 IT 和 DevOps 理想,但根据我的经验,可能根本不存在什么不方便的东西。有很多次,我为某些任务想出了一个很好的解决方案,我甚至会编写脚本,但我没有让它真正实现自动化,因为在我工作的机器上不存在易于自动化的基础设施。

我最喜欢的简易自动化工具曾经是 cron 系统,它古老、可靠、面向用户,而且简单(除了一个我永远无法记住的调度语法之外)。然而,cron 的问题是,它假定一台电脑每天 24 小时都在工作。在错过了太多预定的备份之后,我发现了 anacron,一个基于时间戳而非预定时间的 cron 系统。如果你的电脑在通常情况下运行时处于关闭状态,anacron 会确保它在电脑重新开启时运行。创建一个作业只需要简单地把一个 shell 脚本放到三个目录中:cron.daycron.weekly 或者 cron.monthly (如果你想的话,你可以定义更多)。有了 anacron,我发现自己把脚本和 Ansible 剧本用在了各种琐碎的任务中,包括弹出到期和事件提醒。

这是一个现代问题的简单而明显的解决方案,但如果 anacron 没有安装在电脑上,那它对我就没有用。

用 Ansible 进行软件设置

任何时候我设置一台新的计算机,无论是笔记本电脑、工作站还是服务器,我都会安装 anacron。这很简单,但是 anacron 的安装只提供了 anacron 命令。它并没有设置 anacron 的用户环境。所以我创建了一个 Ansible 剧本来设置用户需要什么来使用 anacron 并安装 anacron 命令。

首先,标准的 Ansible 模板:

---
- hosts: localhost
  tasks:

用 Ansible 创建目录

接下来,我创建了用于 Anacron 的目录树。你可以把它看成是一种透明的 crontab。

    - name: create directory tree
      ansible.builtin.file:
        path: "{{ item }}"
        state: directory
      with_items:
        - '~/.local/etc/cron.daily'
        - '~/.local/etc/cron.weekly'
        - '~/.local/etc/cron.monthly'
        - '~/.var/spool/anacron'

这个语法可能看起来有点奇怪,但它实际上是一个循环。with_items: 指令定义了四个要创建的目录,Ansible 在 ansible.buildin.file: 指令中为每个目录迭代一次(目录名填充了 {{ item }} 变量)。与 Ansible 中的一切一样,如果目录已经存在,不会有错误或冲突。

用 Ansible 复制文件

ansible.buildin.copy 模块将文件从一个地方复制到另一个地方。为了让它工作,我需要创建一个叫做 anacrontab 的文件。它不是 Ansible 剧本,所以我把它放在我的 ~/Ansible/data 目录下,那里是我的剧本的支持文件。

  - name: copy anacrontab into place
   ansible.builtin.copy:
    src: ~/Ansible/data/anacrontab
    dest: ~/.local/etc/anacrontab
    mode: '0755'

我的 anacrontab 文件很简单,模仿了一些发行版默认安装在 /etc/anacron 中的文件:

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
1  0  cron.day    run-parts $HOME/.local/etc/cron.daily/
7  0  cron.wek    run-parts $HOME/.local/etc/cron.weekly/
30 0  cron.mon    run-parts $HOME/.local/etc/cron.monthly/

登录时运行 anacron

大多数 Linux 发行版将 anacron 配置为从 /etc/anacron 读取作业。我主要是作为一个普通用户使用 anacron,所以我从我的登录账号 ~/.profile 启动 anacron。我不想让自己记住这些配置,所以我让 Ansible 来做。我使用 ansible.buildin.lineinfile 模块,它会在 ~/.profile 不存在时创建它,并插入 anacron 的启动行。

    - name: add local anacrontab to .profile
      ansible.builtin.lineinfile:
        path: ~/.profile
        regexp: '^/usr/sbin/anacron'
        line: '/usr/sbin/anacron -t ~/.local/etc/anacrontab'
        create: true

用 Ansible 安装 anacron

对于我的大多数系统来说,dnf 模块可以用来安装软件包,但我的工作站运行的是 Slackware(使用 slackpkg),有时不同的 Linux 发行版也会进入我的收藏。ansible.buildin.package 模块提供了一个安装软件包的通用接口,所以我把它用在这个剧本上。幸运的是,我还没有遇到一个名为 anacron 的仓库不是 anacron,所以现在,我不必考虑软件包名称的潜在差异。

这实际上是一个单独的剧本,因为软件包的安装需要权限升级,它由 becomes: true 指令提供。

- hosts: localhost
  become: true
  tasks:
    - name: install anacron
      ansible.builtin.package:
        name: anacron
        state: present

使用 anacron 和 Ansible 实现轻松自动化

为了用 Ansible 安装 anacron,我运行该剧本:

$ ansible-playbook ~/Ansible/setup-anacron.yaml

从此,我就可以编写 shell 脚本来执行一些琐碎但重复的任务,然后把它复制到 ~/.local/etc/cron.daily,让它每天自动运行一次(或者大约如此)。我还为诸如 清理下载文件夹 之类的任务编写了 Ansible 剧本。我把我的剧本放在 ~/Ansible 里,这是我保存 Ansible 剧本的地方,然后在 ~/.local/etc/cron.daily 里创建一个 shell 脚本来执行这个剧本。这很简单,不费吹灰之力,而且很快成为习惯。


via: https://opensource.com/article/21/9/ansible-anacron-automation

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出