Installing a puppet module from a manifest script

后端 未结 8 2171
不思量自难忘°
不思量自难忘° 2020-12-12 15:27

I\'m using puppet to provision a vagrant (ubuntu based) virtual machine. In my script I need to:

sudo apt-get build-dep python-lxml

I know

8条回答
  •  庸人自扰
    2020-12-12 15:51

    Using answers from this question I created this script:

    #!/bin/bash
    
    function install_module {
       IFS=':' read module version <<< "$1"
       if (puppet module list | grep $module ) >/dev/null; then
        echo "Module $module is already installed"
       else
            if [ -z "$version" ]; then
                puppet module install $module
            else 
            puppet module install -v $version $module
        fi
        fi  
    }
    
    if dpkg --compare-versions `puppet --version` "lt" 3.8.7; then
        sudo apt-get remove --purge -y puppet
        sudo apt-get -y autoremove
    fi
    
    if which puppet >/dev/null; then
        echo "Puppet is already installed"
    else
        echo "Installing puppet"
        wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
        sudo dpkg -i puppetlabs-release-trusty.deb
        sudo apt-get update
        sudo apt-get install -y puppet=3.8.7*
        mkdir -p /etc/puppet/modules
    fi
    
    for var in "$@" 
    do
        install_module "$var"
    done
    

    Then you can use it from your Vagrantfile like this:

    puppet_modules = [
        'puppetlabs-stdlib:4.16.0',
        'puppetlabs-apt:2.3.0',
        'puppet-nodejs:2.3.0'
        ]
    
    config.vm.provision "shell", path: "puppet/scripts/puppet.sh", args: puppet_modules.join(" ")
    

    It removes puppet from vm if version is lower than 3.8.7, then installs puppet 3.8.7, and then installs all the modules.

    It would probably work only on debian/ubuntu boxes.

提交回复
热议问题