This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.5.4.3.3. 在 Operator 内测试 k8s Ansible 模块
						熟悉在本地使用 k8s Ansible 模块后,您可在 Operator 内触发自定义资源 (CR) 发生变化时的相同 Ansible 逻辑。本示例将 Ansible 角色映射到 Operator 所监视的特定 Kubernetes 资源。该映射在 watches.yaml 文件中完成。
					
5.4.3.3.1. 本地测试基于 Ansible 的 Operator 复制链接链接已复制到粘贴板!
熟悉在本地测试 Ansible 工作流后,您可以在本地运行的基于 Ansible 的 Operator 内测试逻辑。
							为此,请使用 Operator 项目顶层目录中的 operator-sdk run --local 命令。此命令读取 watches.yaml 文件,并使用 ~/.kube/config 文件与 Kubernetes 集群通信,就如同 k8s Ansible 模块一样。
						
流程
因为
run --local命令是从watches.yaml文件中读取的,所以有一些选项可供 Operator 作者使用。如果role独立存在(默认为/opt/ansible/roles/<name>),则必须直接从 Operator 中复制该角色至/opt/ansible/roles/目录。这很麻烦,因为更改不会反映在当前目录中。相反,可更改
role字段以指向当前目录并注释掉现有行:- version: v1alpha1 group: test1.example.com kind: Test1 # role: /opt/ansible/roles/Test1 role: /home/user/test1-operator/Test1
- version: v1alpha1 group: test1.example.com kind: Test1 # role: /opt/ansible/roles/Test1 role: /home/user/test1-operator/Test1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为自定义资源(CR)
Test1创建自定义资源定义(CRD)和适当的基于角色的访问控制(RBAC)定义。operator-sdk命令会在deploy/目录中自动生成这些文件:oc create -f deploy/crds/test1_v1alpha1_test1_crd.yaml
$ oc create -f deploy/crds/test1_v1alpha1_test1_crd.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f deploy/service_account.yaml
$ oc create -f deploy/service_account.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f deploy/role.yaml
$ oc create -f deploy/role.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f deploy/role_binding.yaml
$ oc create -f deploy/role_binding.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
run --local命令:operator-sdk run --local
$ operator-sdk run --localCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
[...] INFO[0000] Starting to serve on 127.0.0.1:8888 INFO[0000] Watching test1.example.com/v1alpha1, Test1, default
[...] INFO[0000] Starting to serve on 127.0.0.1:8888 INFO[0000] Watching test1.example.com/v1alpha1, Test1, defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,Operator 正在监视资源
Test1中的事件,创建 CR 会触发您的 Ansible 角色执行。查看deploy/cr.yaml文件:apiVersion: "test1.example.com/v1alpha1" kind: "Test1" metadata: name: "example"
apiVersion: "test1.example.com/v1alpha1" kind: "Test1" metadata: name: "example"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 因为未设置
spec字段,所以调用 Ansible 时无额外变量。下一部分将介绍额外变量如何从 CR 传递至 Ansible。这也是务必要为 Operator 设置合理的默认值的原因。创建
Test1的 CR 实例,并将默认变量state设置为present:oc create -f deploy/cr.yaml
$ oc create -f deploy/cr.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查是否已创建命名空间
test:oc get namespace
$ oc get namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS AGE default Active 28d kube-public Active 28d kube-system Active 28d test Active 3s
NAME STATUS AGE default Active 28d kube-public Active 28d kube-system Active 28d test Active 3sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 修改
deploy/cr.yaml文件,将state字段设置为absent:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用这些更改,并确认已删除命名空间:
oc apply -f deploy/cr.yaml
$ oc apply -f deploy/cr.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc get namespace
$ oc get namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS AGE default Active 28d kube-public Active 28d kube-system Active 28d
NAME STATUS AGE default Active 28d kube-public Active 28d kube-system Active 28dCopy to Clipboard Copied! Toggle word wrap Toggle overflow