# Class: profiles::puppet::cobbler_enc # # This will deploy the cobbler-enc tool for puppetmasters # # wrapper class for python, pip and venv class profiles::puppet::cobbler_enc ( Stdlib::Host $cobbler_hostname, Enum['http','https'] $cobbler_scheme = 'https', String $script_name = 'cobbler-enc', Stdlib::AbsolutePath $base_path = "/opt/${script_name}", Stdlib::AbsolutePath $venv_path = "${base_path}/venv", String $owner = 'root', String $group = 'root', Boolean $systempkgs = false, String $version = 'system', Array[String[1]] $packages = ['sys','requests','pyyaml'], Stdlib::AbsolutePath $trusted_ca_cert = '/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem' ){ # set the cobbler url, required for the erb template $cobbler_base_url = "${cobbler_scheme}://${cobbler_hostname}" if $::facts['python3_version'] { $python_version = $version ? { 'system' => $::facts['python3_version'], default => $version, } # ensure the base_path exists file { $base_path: ensure => directory, mode => '0755', owner => $owner, group => $group, } # create a venv python::pyvenv { $venv_path : ensure => present, version => $python_version, systempkgs => $systempkgs, venv_dir => $venv_path, owner => $owner, group => $group, require => File[$base_path], } # install the required pip packages $packages.each |String $package| { python::pip { "${venv_path}_${package}": ensure => present, pkgname => $package, virtualenv => $venv_path, } } # create the script from a template file { "${base_path}/${script_name}": ensure => file, mode => '0755', content => template("profiles/puppet/server/${script_name}.erb"), require => [ Python::Pyvenv[$venv_path], Package['python3.11'] ], } # create symbolic link in $PATH file { "/usr/local/bin/${script_name}": ensure => 'link', target => "${base_path}/${script_name}", require => File["${base_path}/${script_name}"], } } }