operator-framework / operator-sdk

SDK for building Kubernetes applications. Provides high level APIs, useful abstractions, and project scaffolding.
https://sdk.operatorframework.io
Apache License 2.0
7.1k stars 1.73k forks source link

Unable to run Ansible with new layout #3563

Closed camilamacedo86 closed 3 years ago

camilamacedo86 commented 3 years ago

Bug Report

What did you do?

$ operator-sdk init --plugins=ansible
$ operator-sdk create api --group cache --version v1 --kind Memcached --generate-role

Update the docker image to use the master version:

 $ cat Dockerfile 
FROM quay.io/operator-framework/ansible-operator:master

COPY requirements.yml ${HOME}/requirements.yml
RUN ansible-galaxy collection install -r ${HOME}/requirements.yml \
 && chmod -R ug+rwx ${HOME}/.ansible

COPY watches.yaml ${HOME}/watches.yaml
COPY roles/ ${HOME}/roles/
COPY playbooks/ ${HOME}/playbooks/
$ kubectl logs deployment.apps/memcached-operator-controller-manager  -n memcached-operator-system -c manager
unknown flag: --enable-leader-election
Usage of /usr/local/bin/ansible-operator:
      --ansible-collections-path string   Path to installed Ansible Collections. If set, collections should be
                                                    located in {{value}}/ansible_collections/. If unset, collections are
                                                    assumed to be in ~/.ansible/collections or
                                                    /usr/share/ansible/collections.
      --ansible-roles-path string         Ansible Roles Path. If unset, roles are assumed to be in {{CWD}}/roles.
      --ansible-verbosity int             Ansible verbosity. Overridden by environment variable. (default 2)
      --inject-owner-ref                  The ansible operator will inject owner references unless this flag is false (default true)
unknown flag: --enable-leader-election
      --max-workers int                   Maximum number of workers to use. Overridden by environment variable. (default 1)
      --reconcile-period duration         Default reconcile period for controllers (default 1m0s)
      --watches-file string               Path to the watches file to use (default "./watches.yaml")
      --zap-devel                         Enable zap development mode (changes defaults to console encoder, debug log level, disables sampling and stacktrace from 'warning' level)
      --zap-encoder encoder               Zap log encoding ('json' or 'console')
      --zap-level level                   Zap log level (one of 'debug', 'info', 'error' or any integer value > 0) (default info)
      --zap-sample sample                 Enable zap log sampling. Sampling will be disabled for integer log levels > 1
      --zap-stacktrace-level level        Set the minimum log level that triggers stacktrace generation (default error)
      --zap-time-encoding timeEncoding    Sets the zap time format ('epoch', 'millis', 'nano', or 'iso8601') (default )

What did you expect to see? The operator working successfully

What did you see instead? Under which circumstances? It's unable to work with the leader election flag.

Environment

joelanford commented 3 years ago

I'm not able to reproduce this issue:

I ran:

#!/usr/bin/env bash

NAME="quickstart-ansible-operator"
export IMG=quay.io/joelanford/$NAME

rm -rf $NAME
mkdir $NAME
cd $NAME
operator-sdk init --plugins=ansible

sed -i 's/v0.19.0/master/' Dockerfile

operator-sdk create api --group cache --version v1 --kind Memcached --generate-role
make docker-build docker-push
make deploy

Then:

$ k logs -n quickstart-ansible-operator-system quickstart-ansible-operator-controller-manager-bc59c9bc9-ww88n manager
{"level":"info","ts":1595873809.341081,"logger":"cmd","msg":"Go Version: go1.13.14"}
{"level":"info","ts":1595873809.3411021,"logger":"cmd","msg":"Go OS/Arch: linux/amd64"}
{"level":"info","ts":1595873809.3411086,"logger":"cmd","msg":"Version of operator-sdk: v0.19.0+git"}
{"level":"info","ts":1595873809.3416684,"logger":"cmd","msg":"Watching all namespaces.","Namespace":""}
{"level":"info","ts":1595873810.2979023,"logger":"controller-runtime.metrics","msg":"metrics server is starting to listen","addr":"127.0.0.1:8080"}
{"level":"info","ts":1595873810.2988255,"logger":"watches","msg":"Environment variable not set; using default value","envVar":"ANSIBLE_VERBOSITY_MEMCACHED_CACHE_MY_DOMAIN","default":2}
{"level":"info","ts":1595873810.2989738,"logger":"cmd","msg":"Environment variable not set; using default value","Namespace":"","envVar":"ANSIBLE_DEBUG_LOGS","ANSIBLE_DEBUG_LOGS":false}
{"level":"info","ts":1595873810.2989926,"logger":"ansible-controller","msg":"Watching resource","Options.Group":"cache.my.domain","Options.Version":"v1","Options.Kind":"Memcached"}
{"level":"info","ts":1595873810.300812,"logger":"proxy","msg":"Starting to serve","Address":"127.0.0.1:8888"}
{"level":"info","ts":1595873810.3008678,"logger":"controller-runtime.manager","msg":"starting metrics server","path":"/metrics"}
I0727 18:16:50.300840       7 leaderelection.go:242] attempting to acquire leader lease  quickstart-ansible-operator-system/quickstart-ansible-operator...
I0727 18:16:50.307829       7 leaderelection.go:252] successfully acquired lease quickstart-ansible-operator-system/quickstart-ansible-operator
{"level":"info","ts":1595873810.3082283,"logger":"controller-runtime.controller","msg":"Starting EventSource","controller":"memcached-controller","source":"kind source: cache.my.domain/v1, Kind=Memcached"}
{"level":"info","ts":1595873810.4085793,"logger":"controller-runtime.controller","msg":"Starting Controller","controller":"memcached-controller"}
{"level":"info","ts":1595873810.4086237,"logger":"controller-runtime.controller","msg":"Starting workers","controller":"memcached-controller","worker count":16}
camilamacedo86 commented 3 years ago

Hi @joelanford,

after removing my kind cluster and re-created it and re-testing again it works. Probably it had an old sdk image loaded which had not it fixed. Closing,

joelanford commented 3 years ago

@camilamacedo86 Great!

For future reference: if you use :latest as your image tag, the default imagePullPolicy will be Always and the cluster will always try to pull the latest image with that tag.

Other tags will default the imagePullPolicy to IfNotPresent, in which case the cluster will use a locally cached (and possibly stale) copy if it is already present locally.