( dap | 2020. 03. 04., sze – 21:22 )

Van egy (szerver oldalon futó) puppet function ami kb a kövekező módon hívja a certbot-ot:

cmd = "certbot certonly --non-interactive --agree-tos --email #{config['email']} \
--config-dir #{config['letsencryptconfigdir']} \
--logs-dir #{config['letsencryptconfigdir']}/logs \
--work-dir #{config['letsencryptconfigdir']}/tmp \
--standalone --http-01-port 8281 --preferred-challenges http-01 \
--cert-name #{cn} " << config['domains'].map{|domain| "-d " << domain }.join(' ')

Így a `$letsencryptconfigdir` alá kerül minden, amiból aztán tud olvasni a puppet. A node-okra nincs kiküldve semmi; amint a certbot ebből a functionből elindul, a HTTP challenge bejön a domainre, valamelyk edge load balancerre beesik, az átproxyzza ide a puppetmaster :8281 portjára (ahol még mindig fut a certbot) és a certbot már írja is ki a certet. Ez így kb 5 másodperc. Ha a cert már létezik, akkor ez a function nem futtatja a certbotot, a megújítás már simán napi cronjob-ból megy. Igazából ezt a function-t ki is lehet hagyni ha neked elég hogy az új certet egyszer kézzel kikéred, aztán a puppet csak teríti, a cronjob pedig megújítgatja.

Leegyszerűsítve ennyi. Igazából Puppet sem kell, akár ssh-val is lehetne automatikusan teríteni. Az egészben annyi a trükk, hogy a certbot mindig ugyanazon az 1db gépen fusson le és a challenge legyen oda becsatornázva. DNS-nél ez adottság, HTTP-nél pedig proxy-val megoldható.