{"id":16445229,"url":"https://github.com/dgapitts/vagrant-ansible-for-devops","last_synced_at":"2026-03-02T03:34:48.374Z","repository":{"id":145829486,"uuid":"330102428","full_name":"dgapitts/vagrant-ansible-for-devops","owner":"dgapitts","description":"Using ansible in a safe vagrant VM space as per ansible-for-devops online training by geerlingguy","archived":false,"fork":false,"pushed_at":"2021-01-19T11:04:08.000Z","size":21,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-02-26T08:33:01.854Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dgapitts.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":"2021-01-16T06:47:08.000Z","updated_at":"2022-08-26T19:08:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"cd9c4b47-7a6a-4492-812a-0f32f36a8ae7","html_url":"https://github.com/dgapitts/vagrant-ansible-for-devops","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dgapitts/vagrant-ansible-for-devops","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgapitts%2Fvagrant-ansible-for-devops","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgapitts%2Fvagrant-ansible-for-devops/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgapitts%2Fvagrant-ansible-for-devops/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgapitts%2Fvagrant-ansible-for-devops/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dgapitts","download_url":"https://codeload.github.com/dgapitts/vagrant-ansible-for-devops/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgapitts%2Fvagrant-ansible-for-devops/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29991849,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-02T01:47:34.672Z","status":"online","status_checked_at":"2026-03-02T02:00:07.342Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-10-11T09:43:43.332Z","updated_at":"2026-03-02T03:34:48.359Z","avatar_url":"https://github.com/dgapitts.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n## Summary\n\nI've been following \n* the latest Linkedin Learning ansible course from there general DevOps path https://www.linkedin.com/learning/learning-ansible-2\n* then going more in depth with \"Ansible 101 by Jeff Geerling\" (both youtube and e-book) https://www.jeffgeerling.com/blog/2020/ansible-101-jeff-geerling-youtube-streaming-series\n\nI'm pleased now to be running with vagrant and ansible provisioning. The initial example (from geerlingguy) was to install NTP via a role:\n\n```\n---\n- hosts: all\n  become: true \n  tasks:\n  - name: Ensure NTP (for time synchronization) is installed.\n    yum: name=ntp state=present\n  - name: Ensure NTP is running.\n    service: name=ntpd state=started enabled=yes\n```\n\nOnce I had this working my next step was to install postgres via a role downloaded from ansible galaxy.\n\n\n## Deploying postgres via ansible \n\nRef:\n* nice summary info https://github.com/ANXS/postgresql\n* general introduction/tutorial https://severalnines.com/database-blog/postgresql-deployment-and-maintenance-ansible\n\n### Installing Ansible role “anxs.postgresql” on my ansible control node (my ubuntu laptop called ijsselstein)\n\n```\ndpitts@ijsselstein:~/projects/vagrant-ansible-for-devops$ ansible-galaxy  install anxs.postgresql\n- downloading role 'postgresql', owned by anxs\n- downloading role from https://github.com/ANXS/postgresql/archive/v1.11.1.tar.gz\n- extracting anxs.postgresql to /home/dpitts/.ansible/roles/anxs.postgresql\n- anxs.postgresql (v1.11.1) was installed successfully\n```\nand then checking the defaults\n```\ndpitts@ijsselstein:~/projects/vagrant-ansible-for-devop-3nodes$ grep -E '^postgresql_(version|port|max_connections):' ~/.ansible/roles/anxs.postgresql/defaults/main.yml\npostgresql_version: 11\npostgresql_port: 5432\npostgresql_max_connections: 100\n```\n\n\n### Updating my playbook.yml to include new role anxs.postgresql (downloaded from ansible galaxy)\n\n```\ndpitts@ijsselstein:~/projects/vagrant-ansible-for-devops$ git diff playbook.yml\ndiff --git a/playbook.yml b/playbook.yml\nindex 465be4a..5aec7bc 100644\n--- a/playbook.yml\n+++ b/playbook.yml\n@@ -1,6 +1,8 @@\n ---\n - hosts: all\n   become: true \n+  roles: \n+  - role: anxs.postgresql\n   tasks:\n   - name: Ensure NTP (for time synchronization) is installed.\n     yum: name=ntp state=present\n```\n\n\n### Installing postgresql on my ansible managed node (a vagrant/virtualbox vm running centos7)\n\nA few things to highlight here:\n* ansible dynamically skipped apt (as the managed node is running centos7) and so chose yum\n* there are lots of futher configuration options to be explored/used e.g PostgreSQL extensions, databases and users.\n```\ndpitts@ijsselstein:~/projects/vagrant-ansible-for-devops$ vagrant provision\n==\u003e default: Running provisioner: ansible...\nVagrant has automatically selected the compatibility mode '2.0'\naccording to the Ansible version installed (2.9.16).\n\nAlternatively, the compatibility mode can be specified in your Vagrantfile:\nhttps://www.vagrantup.com/docs/provisioning/ansible_common.html#compatibility_mode\n\n    default: Running ansible-playbook...\n\nPLAY [all] *********************************************************************\n\nTASK [Gathering Facts] *********************************************************\nok: [default]\n\nTASK [anxs.postgresql : include_vars] ******************************************\nok: [default] =\u003e (item=/home/dpitts/.ansible/roles/anxs.postgresql/vars/../vars/RedHat.yml)\n\nTASK [anxs.postgresql : PostgreSQL | Make sure the CA certificates are available | apt] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Add PostgreSQL repository apt-key | apt] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Add PostgreSQL repository | apt] **********\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Add PostgreSQL repository preferences | apt] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Make sure the dependencies are installed | apt] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Install PostgreSQL | apt] *****************\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | PGTune | apt] *****************************\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Install all the required dependencies | yum] ***\nchanged: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Add PostgreSQL repository | yum] **********\nchanged: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Make sure the dependencies are installed | yum] ***\nok: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Install PostgreSQL | yum] *****************\nchanged: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Setup service users profile | yum] ********\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Create ~/pgtab.example | yum] *************\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Create ~/pgtab header | yum] **************\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Create ~/pgtab Ansible warning | yum] *****\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Add database to ~/pgtab | yum] ************\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | PGTune | yum] *****************************\nskipping: [default]\n\nTASK [anxs.postgresql : PostgrSQL | Install all the required depedencies | dnf] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Add yum Repository | dnf] *****************\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Install PostgreSQL | dnf] *****************\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | PGTune | dnf] *****************************\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Extensions | Make sure the postgres contrib extensions are installed | Debian] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Extensions | Make sure the postgres contrib extensions are installed | RedHat] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Extensions | Make sure the postgres contrib extensions are installed | Fedora] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Extensions | Make sure the development headers are installed | Debian] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Extensions | Make sure the development headers are installed | RedHat] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Extensions | Make sure the development headers are installed | Fedora] ***\nskipping: [default]\n\nTASK [anxs.postgresql : include_vars] ******************************************\nskipping: [default] =\u003e (item=/home/dpitts/.ansible/roles/anxs.postgresql/vars/../vars/empty.yml) \n\nTASK [anxs.postgresql : PostgreSQL | Extensions | Make sure the postgis extensions are installed | Debian] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Extensions | Make sure the postgis extensions are installed | RedHat] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Extensions | Make sure the postgis extensions are installed | Fedora] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | FDW | Load OS specific variables] *********\nok: [default]\n\nTASK [anxs.postgresql : PostgreSQL | FDW | MySQL] ******************************\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | FDW | OGR] ********************************\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Drop the data directory | RedHat] *********\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Make sure the postgres data directory exists] ***\nok: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Make sure the postgres WAL directory exists] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Make sure the postgres log directory exists] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Ensure the locale for lc_collate and lc_ctype is generated | Debian] ***\nskipping: [default] =\u003e (item=en_US.UTF-8) \nskipping: [default] =\u003e (item=en_US.UTF-8) \n\nTASK [anxs.postgresql : PostgreSQL | Ensure the locale is generated | RedHat] ***\nok: [default] =\u003e (item={u'parts': [u'en_US', u'UTF-8'], u'locale_name': u'en_US.UTF-8'})\nok: [default] =\u003e (item={u'parts': [u'en_US', u'UTF-8'], u'locale_name': u'en_US.UTF-8'})\n\nTASK [anxs.postgresql : PostgreSQL | Stop PostgreSQL | Debian] *****************\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Reset the cluster - drop the existing one | Debian] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Reset the cluster - create a new one (with specified encoding and locale) | Debian] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Update systemd | Debian] ******************\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Start PostgreSQL | Debian] ****************\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Check whether the postgres data directory is initialized | RedHat] ***\nok: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Initialize the database | RedHat] *********\n[WARNING]: Module remote_tmp /var/lib/pgsql/.ansible/tmp did not exist and was\ncreated with a mode of 0700, this may cause issues when running as another\nuser. To avoid this, create the remote_tmp dir with the correct permissions\nmanually\nchanged: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Verify postgresql cluster version] ********\nok: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Ensure configuration directory exists] ****\nchanged: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Update configuration - pt. 1 (pg_hba.conf)] ***\nchanged: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Update configuration - pt. 2 (postgresql.conf)] ***\nchanged: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Update configuration - pt. 3 (pgtune)] ****\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Update configuration - pt. 4 (pg_ident.conf)] ***\nchanged: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Create folder for additional configuration files] ***\nchanged: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Ensure the systemd directory for PostgreSQL exists | RedHat] ***\nchanged: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Use the conf directory when starting the Postgres service | RedHat] ***\nchanged: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Ensure the pid directory for PostgreSQL exists] ***\nchanged: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Reload all conf files] ********************\nchanged: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Ensure PostgreSQL is running] *************\nok: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Make sure the PostgreSQL users are present] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Ensure PostgreSQL is running] *************\nok: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Make sure the PostgreSQL databases are present] ***\n\nTASK [anxs.postgresql : PostgreSQL | Add extensions to the databases] **********\n\nTASK [anxs.postgresql : PostgreSQL | Add hstore to the databases with the requirement] ***\n\nTASK [anxs.postgresql : PostgreSQL | Add uuid-ossp to the database with the requirement] ***\n\nTASK [anxs.postgresql : PostgreSQL | Add postgis to the databases with the requirement] ***\n\nTASK [anxs.postgresql : PostgreSQL | add cube to the database with the requirement] ***\n\nTASK [anxs.postgresql : PostgreSQL | Add plpgsql to the database with the requirement] ***\n\nTASK [anxs.postgresql : PostgreSQL | add earthdistance to the database with the requirement] ***\n\nTASK [anxs.postgresql : PostgreSQL | Add citext to the database with the requirement] ***\n\nTASK [anxs.postgresql : PostgreSQL | Add Schema to databases] ******************\n\nTASK [anxs.postgresql : PostgreSQL | Update the user privileges] ***************\n\nTASK [anxs.postgresql : PostgreSQL | (Monit) Copy the postgresql monit service file] ***\nskipping: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Check binary version] *********************\nok: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Check database version] *******************\nok: [default]\n\nTASK [anxs.postgresql : PostgreSQL | Verify binary and database versions match] ***\nskipping: [default]\n\nTASK [Ensure NTP (for time synchronization) is installed.] *********************\nok: [default]\n\nTASK [Ensure NTP is running.] **************************************************\nchanged: [default]\n\nRUNNING HANDLER [anxs.postgresql : restart postgresql] *************************\nchanged: [default]\n\nPLAY RECAP *********************************************************************\ndefault                    : ok=28   changed=15   unreachable=0    failed=0    skipped=53   rescued=0    ignored=0   \n```\n\n### finally checking (via systemctl) the postgresql-11.service is running on our managed nodes \nnow we can see the `/usr/pgsql-11/bin/postmaster` (pid 4520) running under postgresql-11.service in systemctl\n\n```\ndpitts@ijsselstein:~/projects/vagrant-ansible-for-devops$ vagrant ssh\nLast login: Tue Jan 19 09:37:05 2021 from 10.0.2.2\n[vagrant@localhost ~]$ sudo -i\n[root@localhost ~]# systemctl status\n● localhost.localdomain\n    State: degraded\n     Jobs: 0 queued\n   Failed: 1 units\n    Since: di 2021-01-19 09:35:28 UTC; 2min 31s ago\n   CGroup: /\n           ├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 22\n           ├─user.slice\n           │ └─user-1000.slice\n           │   ├─session-3.scope\n           │   │ ├─4539 sshd: vagrant [priv]\n           │   │ ├─4542 sshd: vagrant@pts/0 \n           │   │ ├─4543 -bash\n           │   │ ├─4560 sudo -i\n           │   │ ├─4562 -bash\n           │   │ ├─4575 systemctl status\n           │   │ └─4576 systemctl status\n           │   └─session-2.scope\n           │     ├─2096 sshd: vagrant [priv]\n           │     └─2102 sshd: vagrant@notty \n           └─system.slice\n             ├─postgresql-11.service\n             │ ├─4520 /usr/pgsql-11/bin/postmaster -D /etc/postgresql/11/data\n             │ ├─4523 postgres: data: checkpointer                           \n             │ ├─4524 postgres: data: background writer                      \n             │ ├─4525 postgres: data: walwriter                              \n             │ ├─4526 postgres: data: autovacuum launcher                    \n             │ ├─4527 postgres: data: stats collector                        \n             │ └─4528 postgres: data: logical replication launcher           \n             ├─ntpd.service\n             │ └─4418 /usr/sbin/ntpd -u ntp:ntp -g\n             ├─vboxadd-service.service\n             │ └─1035 /usr/sbin/VBoxService --pidfile /var/run/vboxadd-service.sh\n             ├─tuned.service\n             │ └─981 /usr/bin/python2 -Es /usr/sbin/tuned -l -P\n             ├─postfix.service\n             │ ├─1206 /usr/libexec/postfix/master -w\n             │ ├─1215 pickup -l -t unix -u\n             │ └─1216 qmgr -l -t unix -u\n             ├─rsyslog.service\n             │ └─975 /usr/sbin/rsyslogd -n\n             ├─sshd.service\n             │ └─974 /usr/sbin/sshd -D\n             ├─crond.service\n             │ └─685 /usr/sbin/crond -n\n             ├─polkit.service\n             │ └─659 /usr/lib/polkit-1/polkitd --no-debug\n             ├─NetworkManager.service\n             │ ├─658 /usr/sbin/NetworkManager --no-daemon\n             │ └─710 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-enp0s3.pid -lf /var/lib/NetworkManager/d\n             ├─gssproxy.service\n             │ └─667 /usr/sbin/gssproxy -D\n             ├─systemd-logind.service\n             │ └─653 /usr/lib/systemd/systemd-logind\n             ├─dbus.service\n             │ └─645 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation\n             ├─rpcbind.service\n             │ └─646 /sbin/rpcbind -w\n             ├─auditd.service\n             │ └─622 /sbin/auditd\n             ├─systemd-udevd.service\n             │ └─494 /usr/lib/systemd/systemd-udevd\n             ├─lvm2-lvmetad.service\n             │ └─480 /usr/sbin/lvmetad -f\n             ├─system-getty.slice\n             │ └─getty@tty1.service\n             │   └─693 /sbin/agetty --noclear tty1 linux\n             └─systemd-journald.service\n               └─464 /usr/lib/systemd/systemd-journald\nlines 35-69/69 (END)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdgapitts%2Fvagrant-ansible-for-devops","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdgapitts%2Fvagrant-ansible-for-devops","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdgapitts%2Fvagrant-ansible-for-devops/lists"}