在Ansible Playbook中添加apt-key而不使用硬编码的URL

105次阅读
没有评论

问题描述

是Ansible的新手,在创建一个配置Kubernetes集群的Playbook时遇到了问题。他被要求在不使用硬编码URL的情况下添加apt-key。他已经创建了一个名为kube-repos.yml的Playbook,其中包含了添加apt-key和添加Kubernetes APT仓库的任务。以下是他的Playbook内容:

- hosts: all
  become: yes
  tasks:
    - name: add Kubernetes apt-key
      apt_key:
        url: "https://packages.cloud.google.com/apt/doc/apt-key.gpg"
        state: present
    - name: add Kubernetes' APT repository
      apt_repository:
        repo: deb http://apt.kubernetes.io/ kubernetes-xenial main
        state: present

他想要找到一种方法,在每个主机或每个主机组中定义apt-key,而不是使用硬编码的URL。他想知道是否有其他添加apt-key的方法,以便可以深入研究替代方案。非常感谢您提供任何帮助或指导方向。

解决方案

请注意以下操作可能涉及版本差异或其他变化,确保在实际操作前做好备份。

最佳解决方案

在Ansible中,您可以通过在清单(Inventory)中为每个主机或主机组定义变量来实现在每个主机上添加不同的apt-key。以下是一种方法:

  1. 定义清单变量:在您的清单文件中,您可以为每个主机或主机组定义变量,指定所需的apt-key URL。这将允许您为每个主机设置不同的apt-key。
---
all:
  hosts:
    master1.tld.local:
    master2.tld.local:
      my_apt_key: https://some.server.com/master_key.gpg
    worker1.tld.local:
    worker2.tld.local:
      my_apt_key: https://some.server.com/worker_key.gpg
    worker3.tld.local:
  1. 修改Playbook任务:在您的Playbook中,修改添加apt-key的任务,使用定义的变量来指定apt-key URL。
- name: add Kubernetes apt-key
  apt_key:
    url: "{{ my_apt_key | default('https://some.server.com/default.gpg') }}"
    state: present

替代方案

如果您不想在清单中定义变量,您还可以通过在命令行中使用--extra-vars参数来传递变量。例如:

ansible-playbook -i inventory/example.yml playbook.yml --extra-vars "my_apt_key=https://some.server.com/custom_node_key.gpg"

这将在运行Playbook时将变量my_apt_key传递给任务。

注意事项

在使用这些方法时,请确保您的主机清单和Playbook文件路径正确,并根据需要进行适当的修改。

通过采用这些方法,您可以在每个主机上添加不同的apt-key,而不需要使用硬编码的URL。这将使您的配置更加灵活和可定制。

正文完