Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fact docker fail when podman is installed to emulate docker #982

Open
Ah-Puch opened this issue Jul 1, 2024 · 2 comments
Open

Fact docker fail when podman is installed to emulate docker #982

Ah-Puch opened this issue Jul 1, 2024 · 2 comments
Labels

Comments

@Ah-Puch
Copy link

Ah-Puch commented Jul 1, 2024

Describe the Bug

We have a RHEL 9.4 server with podman installed as replacement for Docker. Podman installs a docker command to emulate docker using podman. Running puppet give us error for the fact docker

Error: Facter: Error while resolving custom fact fact='docker', resolution='': undefined method `[]' for nil:NilClass

Expected Behavior

Not to fail and produce expected fact parts.

Steps to Reproduce

Steps to reproduce the behavior:

  1. Install puppetlabs-docker 9.1.0 in puppet Environment
  2. Install podman
  3. run puppet agent -t or try to get fact

Environment

  • Version 9.1.0
  • Platform Red Hat Enterprise Linux 9.4 (Plow)
  • more details in additional context

Additional Context

Version enligt r10k

mod 'puppetlabs-docker', '9.1.0'

[root@demo ~]# docker info --format '{{json .}}'
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
{"host":{"arch":"amd64","buildahVersion":"1.33.7","cgroupManager":"systemd","cgroupVersion":"v2","cgroupControllers":["cpuset","cpu","io","memory","hugetlb","pids","rdma","misc"],"conmon":{"package":"conmon-2.1.10-1.el9.x86_64","path":"/usr/bin/conmon","version":"conmon version 2.1.10, commit: fb8c4bf50dbc044a338137871b096eea8041a1fa"},"cpus":4,"cpuUtilization":{"userPercent":1.88,"systemPercent":0.57,"idlePercent":97.55},"databaseBackend":"sqlite","distribution":{"distribution":"rhel","version":"9.4"},"eventLogger":"journald","freeLocks":2048,"hostname":"ida-app.it.liu.se","idMappings":{"gidmap":null,"uidmap":null},"kernel":"5.14.0-427.22.1.el9_4.x86_64","logDriver":"journald","memFree":1202237440,"memTotal":8057892864,"networkBackend":"netavark","networkBackendInfo":{"backend":"netavark","version":"netavark 1.10.3","package":"netavark-1.10.3-1.el9.x86_64","path":"/usr/libexec/podman/netavark","dns":{"version":"aardvark-dns 1.10.0","package":"aardvark-dns-1.10.0-3.el9_4.x86_64","path":"/usr/libexec/podman/aardvark-dns"}},"ociRuntime":{"name":"crun","package":"crun-1.14.3-1.el9.x86_64","path":"/usr/bin/crun","version":"crun version 1.14.3\ncommit: 1961d211ba98f532ea52d2e80f4c20359f241a98\nrundir: /run/crun\nspec: 1.0.0\n+SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +CRIU +YAJL"},"os":"linux","remoteSocket":{"path":"/run/podman/podman.sock","exists":false},"serviceIsRemote":false,"security":{"apparmorEnabled":false,"capabilities":"CAP_CHOWN,CAP_DAC_OVERRIDE,CAP_FOWNER,CAP_FSETID,CAP_KILL,CAP_NET_BIND_SERVICE,CAP_SETFCAP,CAP_SETGID,CAP_SETPCAP,CAP_SETUID,CAP_SYS_CHROOT","rootless":false,"seccompEnabled":true,"seccompProfilePath":"/usr/share/containers/seccomp.json","selinuxEnabled":false},"slirp4netns":{"executable":"/usr/bin/slirp4netns","package":"slirp4netns-1.2.3-1.el9.x86_64","version":"slirp4netns version 1.2.3\ncommit: c22fde291bb35b354e6ca44d13be181c76a0a432\nlibslirp: 4.4.0\nSLIRP_CONFIG_VERSION_MAX: 3\nlibseccomp: 2.5.2"},"pasta":{"executable":"","package":"","version":""},"swapFree":6862602240,"swapTotal":6872363008,"uptime":"143h 54m 23.00s (Approximately 5.96 days)","variant":"","linkmode":"dynamic"},"store":{"configFile":"/etc/containers/storage.conf","containerStore":{"number":0,"paused":0,"running":0,"stopped":0},"graphDriverName":"overlay","graphOptions":{"overlay.mountopt":"nodev,metacopy=on"},"graphRoot":"/var/lib/containers/storage","graphRootAllocated":60343398400,"graphRootUsed":15093481472,"graphStatus":{"Backing Filesystem":"extfs","Native Overlay Diff":"false","Supports d_type":"true","Supports shifting":"false","Supports volatile":"true","Using metacopy":"true"},"imageCopyTmpDir":"/var/tmp","imageStore":{"number":0},"runRoot":"/run/containers/storage","volumePath":"/var/lib/containers/storage/volumes","transientStore":false},"registries":{"search":["registry.access.redhat.com","registry.redhat.io","docker.io"]},"plugins":{"volume":["local"],"network":["bridge","macvlan","ipvlan"],"log":["k8s-file","none","passthrough","journald"],"authorization":null},"version":{"APIVersion":"4.9.4-rhel","Version":"4.9.4-rhel","GoVersion":"go1.21.9 (Red Hat 1.21.9-2.el9_4)","GitCommit":"","BuiltTime":"Tue Apr 30 12:46:31 2024","Built":1714473991,"OsArch":"linux/amd64","Os":"linux"}}

Installed docker/podman packages

[root@demo ~]# rpm -qa | egrep -i "docker|podman"
podman-remote-4.9.4-4.el9_4.x86_64
python3-podman-4.9.0-1.el9.noarch
podman-4.9.4-4.el9_4.x86_64
podman-docker-4.9.4-4.el9_4.noarch
cockpit-podman-84.1-1.el9.noarch

[root@demo ~]# lsb_release -a
LSB Version: n/a
Distributor ID: RedHatEnterprise
Description: Red Hat Enterprise Linux 9.4 (Plow)
Release: 9.4
Codename: n/a

[root@demo ~]# puppet agent --version
7.31.0

[root@demo ~]# puppet agent -t
Info: Using environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Error: Facter: Error while resolving custom fact fact='docker', resolution='': undefined method `[]' for nil:NilClass

[root@demo ~]# which docker
/usr/bin/docker
[root@demo ~]# ls -la /usr/bin/docker
-rwxr-xr-x 1 root root 167 30 apr 12.48 /usr/bin/docker
[root@demo ~]# more /usr/bin/docker
#!/usr/bin/sh
[ -e /etc/containers/nodocker ] ||
echo "Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg." >&2
exec /usr/bin/podman "$@"

@Ah-Puch Ah-Puch added the bug label Jul 1, 2024
@adamboutcher
Copy link

adamboutcher commented Aug 9, 2024

I am experiencing this issue.

If I install podman-docker to essentially use docker commands a d syntax on the podman binary this error shows, if I remove it then it's goes away.

Technically this may be considered a bug with the podman docker support and not this project but I'm not sure if it's aiming to be 1:1 compatible and I'm sure it's easier to catch the nil variable here.

So after some fiddling, it boils down to the docker networking list using camel case but podman is lower case; this line

network_id = docker['network'][network]['Id'][0..11]

If it is lower case like so:

network_id = docker['network'][network]['id'][0..11]

Works on podman but fails on docker..

@adamboutcher
Copy link

I am experiencing this issue.

If I install podman-docker to essentially use docker commands a d syntax on the podman binary this error shows, if I remove it then it's goes away.

Technically this may be considered a bug with the podman docker support and not this project but I'm not sure if it's aiming to be 1:1 compatible and I'm sure it's easier to catch the nil variable here.

So after some fiddling, it boils down to the docker networking list using camel case but podman is lower case; this line

network_id = docker['network'][network]['Id'][0..11]

If it is lower case like so:

network_id = docker['network'][network]['id'][0..11]

Works on podman but fails on docker..

As per the above comment; this code works on both...

          if docker['network'][network]['Id'].nil?
            network_id = docker['network'][network]['id'][0..11]
       	  else
            network_id = docker['network'][network]['Id'][0..11]
       	  end

adamboutcher added a commit to adamboutcher/puppetlabs-docker that referenced this issue Sep 4, 2024
This if statement will enable the fact to work if you are using podman with docker symlink/support as the json syntax is lowercase on podman but camel/title case on docker.

As per - puppetlabs#982
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants