kubernetes - 如何重定向 Ansible 以使用角色目录中的文件?
问题描述
致敬,我正在通过 Ansible 将 pod/应用程序部署到 EKS。我的剧本运行一些kubectl apply -f
命令来部署 EKS 资源,所有 .yaml 文件都在该目录中。
我想将这些创建每个应用程序的 .yaml 文件放在它自己的ansible 角色/文件目录中,以便稍微清理主 ansible 目录(.yaml 文件变得不堪重负,到目前为止我只部署了两个应用程序)。
问题是这样的:当我将 .yaml 文件移动到其各自的/roles/files目录时,ansible 似乎仍然在主 ansible 目录中查找文件,而不是扫描内部角色目录。
如何重定向 Ansible 以在角色文件目录中的 .yamls 上运行 shell 命令?剧本如下:
#
# Deploying Jenkins to AWS EKS
#
# Create Jenkins Namespace
- name: Create Jenkins Namespace & set it to default
shell: |
kubectl create namespace jenkins
kubectl config set-context --current --namespace=jenkins
# Create Jenkins Service Account
- name: Create Jenkins Service Account
shell: |
kubectl create serviceaccount jenkins-master -n jenkins
kubectl get secret $(kubectl get sa jenkins-master -n jenkins -o jsonpath={.secrets[0].name}) -n jenkins -o jsonpath={.data.'ca\.crt'} | base64 --decode
# Deploy Jenkins
- name: Deploy Jenkins Application
shell: |
kubectl apply -f jenkins-service.yaml
kubectl apply -f jenkins-vol.yaml
kubectl apply -f jenkins-role.yaml
kubectl apply -f jenkins-configmap.yaml
kubectl apply -f jenkins-deployment.yaml
解决方案
您可以使用role_path
包含当前执行角色的路径的变量。你可以这样写你的任务:
- name: Deploy Jenkins Application
shell: |
kubectl apply -f {{ role_path }}/files/jenkins-service.yaml
kubectl apply -f {{ role_path }}/files/jenkins-vol.yaml
...
或者,fileglob
查找可能更容易:
- name: Deploy Jenkins Application
command: kubectl apply -f {{ item }}
loop: "{{ query('fileglob', '*.yaml') }}"
这将遍历*.yaml
您角色files
目录中的所有文件。
您可以考虑将您的使用替换kubectl
为k8s 模块。
最后,您可以考虑使用kustomize ,而不是使用 Ansible 管理这些资源,我发现它更容易使用,除非您严重依赖 Ansible 模板。
推荐阅读
- javascript - 如何按顺序打印数组中的项目
- twilio - 如何最好地手动回复来自 Twilio 电话号码的文本?
- python - Pandas:如何将接受数组的函数应用于列?
- swift - 在 Swift 中从 SearchBar 中选择单元格
- jq - linux jq的退出码1是什么意思
- gem5 - 有什么办法可以改变Gem5中的频率或电压
- c - 如何不在c中打印重复的组合
- javascript - 如何使用文本框表单 Javascript 添加开放式问题
- c# - 如何避免使用 Windows 窗体 C# 增加 onLoad 内容的内存?
- java - 使用 Apache Beam 的 Fixed Windowing 仅触发一次元素