{"id":15349923,"url":"https://github.com/azbarcea/puppet-learning-vm","last_synced_at":"2026-01-07T03:47:01.441Z","repository":{"id":142080024,"uuid":"201257508","full_name":"azbarcea/puppet-learning-vm","owner":"azbarcea","description":"Learn / Spike (research) / Dev Puppet environment based on the official Puppet learning VM","archived":false,"fork":false,"pushed_at":"2020-05-05T23:28:14.000Z","size":35,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-01T22:13:28.757Z","etag":null,"topics":["bolt","configuration-management","dev-environment","puppet","test-environment","vagrant"],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/azbarcea.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-08-08T12:51:24.000Z","updated_at":"2020-05-05T23:28:16.000Z","dependencies_parsed_at":null,"dependency_job_id":"c0970d66-cf48-4e13-8f8a-b4604138744c","html_url":"https://github.com/azbarcea/puppet-learning-vm","commit_stats":{"total_commits":23,"total_committers":2,"mean_commits":11.5,"dds":0.04347826086956519,"last_synced_commit":"21152080af3bd99dfc259823b7a9ca64adb852e7"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azbarcea%2Fpuppet-learning-vm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azbarcea%2Fpuppet-learning-vm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azbarcea%2Fpuppet-learning-vm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azbarcea%2Fpuppet-learning-vm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/azbarcea","download_url":"https://codeload.github.com/azbarcea/puppet-learning-vm/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245907556,"owners_count":20691956,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bolt","configuration-management","dev-environment","puppet","test-environment","vagrant"],"created_at":"2024-10-01T11:56:26.731Z","updated_at":"2026-01-07T03:46:56.406Z","avatar_url":"https://github.com/azbarcea.png","language":null,"readme":"# [Puppet learning VM][website-url]\n\nLearn / Spike (research) / Dev Puppet environment based on the official Puppet learning VM. \n\n\u003cimg src='https://upload.wikimedia.org/wikipedia/en/0/09/Puppet%27s_company_logo.png' width='200px'\u003e\n\n\u003e Puppet is an open-core software configuration management tool. It runs on many Unix-like systems as well as on Microsoft Windows, and includes its own declarative language to describe system configuration. It is written in C++, Clojure and Ruby, with its free-software version released under the Apache License 2.0 - [wikipedia](https://en.wikipedia.org/wiki/Puppet_(company)#Puppet)\n\n\u003c!-- @import \"[TOC]\" {cmd=\"toc\" depthFrom=1 depthTo=6 orderedList=false} --\u003e\n\n## Using the VM\n\nSetup your environment (how many VMs you want)\n```bash\ncp vagrant.yaml.example vagrant.yaml\n```\n\nTo spin up a puppet master:\n```bash\nvagrant up\n```\n\nTo `ssh` into the box:\n```\nvagrant ssh learning\n```\n\nOnce `ssh` into the `learning` VM you can get root by:\n```\n[vagrant@learning ~]$ sudo su -\n```\nYou can retrieve the NAT (private IP) by:\n```\nfacter networking.interfaces.eth1.ip\n```\nOr classic way:\n```\nroot@learning: # ip addr show\n1: lo: \u003cLOOPBACK,UP,LOWER_UP\u003e mtu 65536 qdisc noqueue state UNKNOWN group (...)\n2: eth0: \u003cBROADCAST,MULTICAST,UP,LOWER_UP\u003e mtu 1500 qdisc pfifo_fast state UP group default qlen 1000\n    link/ether 08:00:27:b9:88:bd brd ff:ff:ff:ff:ff:ff\n    inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0\n       valid_lft 85677sec preferred_lft 85677sec\n    inet6 fe80::752c:860f:3985:c1a2/64 scope link noprefixroute \n       valid_lft forever preferred_lft forever\n3: eth1: \u003cBROADCAST,MULTICAST,UP,LOWER_UP\u003e mtu 1500 qdisc pfifo_fast state UP group default qlen 1000\n    link/ether 08:00:27:68:fe:a9 brd ff:ff:ff:ff:ff:ff\n    inet 172.28.128.8/24 brd 172.28.128.255 scope global noprefixroute dynamic eth1\n       valid_lft 1048sec preferred_lft 1048sec\n    inet6 fe80::a00:27ff:fe68:fea9/64 scope link \n       valid_lft forever preferred_lft forever\n(...)\n```\n\n`172.28.128.8` from `eth1` is the IP that you care. Everytime you reboot the VM, you may get a different IP.\n\nTo list the available network interfaces:\n```\nnmcli d | grep connected | awk '{print $1}'\n``\n\n\nTo use the [Quest Guide UI](https://github.com/puppetlabs/puppet-quest-guide), go to: http://172.28.128.8/ (replace with your own IP). You should be able to see:\n```\nQuest Guide for the Puppet Learning VM\n```\nTo use the Puppet Console UI, go to https://172.28.128.8/ (replace with your own IP) and accept the self-signed certificate. You should be able to see:\n```\nOverview\n```\n\nLogin using the default credentials:\n* username: `admin`\n* password: `puppetlabs`\n\n### Alternative - using `hostmanager`\n\nFor this, you need to enable `hostmanager: true` in `vagrant.yaml`\n\nTo use the Quest Guide UI, go to: http://puppetmaster/. You should be able to see:\n```\nQuest Guide for the Puppet Learning VM\n```\nTo use the Puppet Console UI, go to https://puppetmaster/ and accept the self-signed certificate. You should be able to see:\n```\nOverview\n```\n\nThis is possible because on `linux` (if your machine is `linux`) or `macos`, for your convenience, `vagrant` will use the `hostmanager` plugin to add the node to your `/etc/hosts` file.\n\nBy default, the VM will be created in a NAT network, so `hostmanager` will use the internal routing to get to your node. The node is setup to use `dhcp` (by default). You can change this by modifying in `vagrant.yaml` the `private_ip` field.\n\nThe image is based on `CentOS Linux 7 (Core)` and the default clients are abstracted as `docker` containers.\n\n## Official Learning VMs\n\n\u003cdetails\u003e\n\u003cp\u003e\n\nInformation was extracted using:\n```\nfor i in $(ls -1 learning_puppet_vm*.zip); do unzip -ql $i; done | grep ova | awk '{print $4 \" | \" $2 \" \" $3 \" | \" $1}' | sort\n```\n\u003c/p\u003e\n\u003c/details\u003e\n\nVM | time | size (KB) \n-|-|-\npuppet-2017.2.2-learning-6.1.ova | 2017-08-08 16:43 | 3455068160\npuppet-2017.3.2-learning-6.3.ova | 2017-12-04 12:16 | 4316023808\npuppet-2017.3.2-learning-6.4.ova | 2017-12-06 18:04 | 3906296320\npuppet-2017.3.5-learning-6.5.ova | 2018-03-15 02:31 | 3291561472\npuppet-2019.0.1-learning-6.6.ova | 2019-01-17 20:10 | 3035691008\npuppet-2019.0.1-learning-6.6.ova | 2019-01-17 20:10 | 3035691008\npuppet-2019.0.1-learning-6.7.ova | 2019-01-23 01:29 | 3055212544\npuppet-2019.0.2-learning-6.8.ova | 2019-03-15 14:24 | 3179167232\npuppet-2019.0.2-learning-6.9.ova | 2019-03-27 20:59 | 3183727104\npuppet-2019.0.2-learning-6.10.ova | 2019-04-30 17:41 | 3375168000\n\n## Generating the Learning VM vagrant box\n\n\u003cdetails\u003e\n  \u003csummary\u003eTODO\u003c/summary\u003e\n  Generate this image dynamically and create a Travis.CI Job to generate it.\n\u003c/details\u003e\n\nDownload latest `learning_puppet_vm.zip` and unzip it.\n\n```\nwget https://pe-education-vms.s3.amazonaws.com/learning/learning_puppet_vm.zip\nunzip learning_puppet_vm.zip\n```\nor for a specific version (e.g. `6.10`):\n```bash\nwget https://pe-education-vms.s3.amazonaws.com/learning/learning_puppet_vm-6.10.zip\nunzip learning_puppet_vm-6.10.zip\n```\n\nAfter unziping it, there is an `.ova` image. Import it into VirtualBox:\n```bash\nVBoxManage import puppet-2019.0.2-learning-6.10.ova --vsys 0 --eula accept --vsys 0 --vmname \"puppet-learning-vm-2019.0\" --settingsfile \"puppet-learning-vm\"\n```\n\nList all your VMs and retrieve the `puppet-learning-vm`:\n```bash\n$ # list all your VMs\n$ VBoxManage list --sorted vms\n\"puppet-learning-vm-2019.0\" {28f73b71-7b70-4838-800b-d67400593594}\n$ # list only the puppet-learning-vm-2019.0 VM\n$ VBoxManage list --sorted vms | grep 'puppet-learning-vm-2019.0'\n\"puppet-learning-vm-2019.0\" {28f73b71-7b70-4838-800b-d67400593594}\n$ # list only the VM ID\n$ VBoxManage list --sorted vms | grep 'puppet-learning-vm-2019.0' | awk '{print $2}' | cut -d '{' -f2 | cut -d '}' -f1\n28f73b71-7b70-4838-800b-d67400593594\n```\n\nPackage the VM:\n```bash\nvagrant package --base '28f73b71-7b70-4838-800b-d67400593594' --output puppet-learning-vm.box\n```\n\n_Optimization_: If you want to do it in oneshot, to get the VM UUID and package it as a `.box` (vagrant image) file:\n```bash\nvagrant package --base $(VBoxManage list --sorted vms | grep 'puppet-learning-vm-2019.0' | awk '{print $2}' | cut -d '{' -f2 | cut -d '}' -f1) --output puppet-learning-vm.box\n```\n\nPublishing the `.box`:\n```bash\nvagrant cloud publish --box-version 6.10-0 azbarcea/puppet-learning-vm-2019.0 --release --description \"Puppet learning VM containing the Quest to learn (https://puppet.com/blog/quest-to-learn-puppet-new-learning-vm)\" --short-description \"Puppet learning VM for PE 2019.0\" --version-description \"Based on the official puppet-2019.0.2-learning-6.10.ova from learning_puppet_vm-6.10.zip\" 6.10-0 virtualbox puppet-learning-vm-2019.0.box\n```\n\nThe version `6.10-0` was used because `6.10` comes from the official `puppet-2019.0.2-learning-6.10.ova` (within `learning_puppet_vm-6.10.zip`) and `0` is the current `.box` packaging. \n\n# Known Issues\n\n* You need to enable virtualization in your BIOS for Virtualbox to work\n* On Windows, you need to disable Hyper-V from Windows Features for Virtualbox to work\n* Encountered issues when `Guest GuestAdditions` was upgraded. This depends on your host Virtualbox and how much is up-to-date.\n```\nGuestAdditions versions on your host (6.0.10) and guest (6.0.6) do not match\n```\n\n##  No IP for `eth1`\n\nYou'll see something like:\n```\n3: eth1: \u003cBROADCAST,MULTICAST,UP,LOWER_UP\u003e mtu 1500 qdisc pfifo_fast state UP group default qlen 1000\n    link/ether 08:00:27:68:fe:a9 brd ff:ff:ff:ff:ff:ff\n    inet6 fe80::a00:27ff:fe68:fea9/64 scope link \n       valid_lft forever preferred_lft forever\n```\nIn this case just restart the VM:\n```\nvagrant reload\n```\n\n## Cannot access Puppet Console UI\n\nThat's because some services are broken. Get into VM and restart the services:\n```\n$ vagrant ssh learning\n$ sudo su -\n# systemctl restart pe-*\n```\n\n# References\n\n* [Puppet In Docker][puppet-in-docker]\n\n----\n\n[website-url]: https://puppet.com/download-learning-vm\n[website-badge]: https://upload.wikimedia.org/wikipedia/en/0/09/Puppet%27s_company_logo.png\n[puppet-forge-server]: https://github.com/kjhenner/puppet-forge-server.git\n[pltraining-dockeragent]: https://github.com/puppetlabs/pltraining-dockeragent\n[puppet-quest-guide]: https://github.com/puppetlabs/puppet-quest-guide\n[puppet-in-docker]: https://github.com/puppetlabs/puppet-in-docker\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazbarcea%2Fpuppet-learning-vm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fazbarcea%2Fpuppet-learning-vm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazbarcea%2Fpuppet-learning-vm/lists"}