5.4.6.2. Ansible 기반 Operator를 로컬에서 테스트
Operator 프로젝트의 최상위 디렉터리에서 make run
명령을 사용하여 로컬에서 실행되는 Ansible 기반 Operator 내부의 논리를 테스트할 수 있습니다. make run
Makefile 대상은 watches.yaml
파일에서 읽고 ~/.kube/config
파일을 사용하여 k8s
모듈과 같은 방식으로 Kubernetes 클러스터와 통신하는 ansible-operator
바이너리를 로컬로 실행합니다.
환경 변수 ANSIBLE_ROLES_PATH
를 설정하거나 ansible-roles-path
플래그를 사용하여 역할 경로를 사용자 정의할 수 있습니다. ANSIBLE_ROLES_PATH
값에 역할이 없는 경우 Operator는 {{current directory}}/roles
에서 역할을 찾습니다.
사전 요구 사항
- Ansible Runner 버전 v1.1.0 이상
- Ansible Runner HTTP Event Emitter 플러그인 버전 v1.0.0 이상
- Kubernetes 컬렉션을 로컬에서 테스트하는 데 필요한 이전 단계 수행
프로세스
CR(사용자 정의 리소스)에 대한 CRD(사용자 정의 리소스 정의) 및 적절한 RBAC(역할 기반 액세스 제어) 정의를 설치합니다.
$ make install
출력 예
/usr/bin/kustomize build config/crd | kubectl apply -f - customresourcedefinition.apiextensions.k8s.io/memcacheds.cache.example.com created
make run
명령을 실행합니다.$ make run
출력 예
/home/user/memcached-operator/bin/ansible-operator run {"level":"info","ts":1612739145.2871568,"logger":"cmd","msg":"Version","Go Version":"go1.15.5","GOOS":"linux","GOARCH":"amd64","ansible-operator":"v1.3.0","commit":"1abf57985b43bf6a59dcd18147b3c574fa57d3f6"} ... {"level":"info","ts":1612739148.347306,"logger":"controller-runtime.metrics","msg":"metrics server is starting to listen","addr":":8080"} {"level":"info","ts":1612739148.3488882,"logger":"watches","msg":"Environment variable not set; using default value","envVar":"ANSIBLE_VERBOSITY_MEMCACHED_CACHE_EXAMPLE_COM","default":2} {"level":"info","ts":1612739148.3490262,"logger":"cmd","msg":"Environment variable not set; using default value","Namespace":"","envVar":"ANSIBLE_DEBUG_LOGS","ANSIBLE_DEBUG_LOGS":false} {"level":"info","ts":1612739148.3490646,"logger":"ansible-controller","msg":"Watching resource","Options.Group":"cache.example.com","Options.Version":"v1","Options.Kind":"Memcached"} {"level":"info","ts":1612739148.350217,"logger":"proxy","msg":"Starting to serve","Address":"127.0.0.1:8888"} {"level":"info","ts":1612739148.3506632,"logger":"controller-runtime.manager","msg":"starting metrics server","path":"/metrics"} {"level":"info","ts":1612739148.350784,"logger":"controller-runtime.manager.controller.memcached-controller","msg":"Starting EventSource","source":"kind source: cache.example.com/v1, Kind=Memcached"} {"level":"info","ts":1612739148.5511978,"logger":"controller-runtime.manager.controller.memcached-controller","msg":"Starting Controller"} {"level":"info","ts":1612739148.5512562,"logger":"controller-runtime.manager.controller.memcached-controller","msg":"Starting workers","worker count":8}
이제 Operator에서 이벤트의 CR을 조사하므로 CR을 생성하면 Ansible 역할이 실행됩니다.
참고config/samples/<gvk>.yaml
CR 매니페스트 예제를 살펴보십시오.apiVersion: <group>.example.com/v1alpha1 kind: <kind> metadata: name: "<kind>-sample"
spec
필드가 설정되지 않았기 때문에 추가 변수 없이 Ansible이 호출됩니다. CR에서 Ansible로 추가 변수를 전달하는 방법은 다른 섹션에서 설명합니다. Operator에 적절한 기본값을 설정하는 것이 중요합니다.기본 변수
state
를present
로 설정하여 CR 인스턴스를 생성합니다.$ oc apply -f config/samples/<gvk>.yaml
example-config
구성 맵이 생성되었는지 확인합니다.$ oc get configmaps
출력 예
NAME STATUS AGE example-config Active 3s
config/samples/<gvk>.yaml
파일을 수정하여state
필드를absent
로 설정합니다. 예를 들면 다음과 같습니다.apiVersion: cache.example.com/v1 kind: Memcached metadata: name: memcached-sample spec: state: absent
변경 사항을 적용합니다.
$ oc apply -f config/samples/<gvk>.yaml
구성 맵이 삭제되었는지 확인합니다.
$ oc get configmap