问题描述
是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。以下是一种方法:
- 定义清单变量:在您的清单文件中,您可以为每个主机或主机组定义变量,指定所需的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:
- 修改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。这将使您的配置更加灵活和可定制。
正文完