{"id":16445213,"url":"https://github.com/dgapitts/vagrant-centos7-ansible","last_synced_at":"2025-02-26T08:25:38.680Z","repository":{"id":145829512,"uuid":"306138985","full_name":"dgapitts/vagrant-centos7-ansible","owner":"dgapitts","description":null,"archived":false,"fork":false,"pushed_at":"2021-01-24T18:55:11.000Z","size":27,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-01-08T22:38:51.378Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","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":"2020-10-21T20:23:31.000Z","updated_at":"2021-01-24T18:55:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"c8da74ab-4916-463b-91b7-52bdb38129db","html_url":"https://github.com/dgapitts/vagrant-centos7-ansible","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgapitts%2Fvagrant-centos7-ansible","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgapitts%2Fvagrant-centos7-ansible/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgapitts%2Fvagrant-centos7-ansible/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgapitts%2Fvagrant-centos7-ansible/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dgapitts","download_url":"https://codeload.github.com/dgapitts/vagrant-centos7-ansible/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240816697,"owners_count":19862342,"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":[],"created_at":"2024-10-11T09:43:40.728Z","updated_at":"2025-02-26T08:25:38.648Z","avatar_url":"https://github.com/dgapitts.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Quick Intro\n\nThis project is simple safe playground style to learn ainsible and docker.\n\nI've been following\n\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\nThese examples are the most simple scenarios regarding one centos7 VM which ansible is using as both a control and a managed node i.e. a typical training environment.\n\nI've also setup some more interesting configurations using vagrant to have distinct control and a managed nodes:\n* https://github.com/dgapitts/vagrant-ansible-for-devops (including deploying postgres on managed node via ansible galaxy role)\n* https://github.com/dgapitts/vagrant-ansible-for-devops-3nodes (setup 2apps and a db in a managed cluster)\n\n\n### Simple Ainsible test\n\n```\n  [vagrant@cent7ansi ~]$ ansible localhost -m find -a \"paths=/vagrant file_type=file\"\n  localhost | SUCCESS =\u003e {\n      \"changed\": false,\n      \"examined\": 6,\n      \"files\": [\n          {\n              \"atime\": 1610575837.3620062,\n              \"ctime\": 1610575837.6780062,\n              \"dev\": 64768,\n              \"gid\": 1000,\n              \"gr_name\": \"vagrant\",\n              \"inode\": 67147322,\n              \"isblk\": false,\n              \"ischr\": false,\n              \"isdir\": false,\n              \"isfifo\": false,\n              \"isgid\": false,\n              \"islnk\": false,\n              \"isreg\": true,\n              \"issock\": false,\n              \"isuid\": false,\n              \"mode\": \"0644\",\n              \"mtime\": 1610571400.0,\n              \"nlink\": 1,\n              \"path\": \"/vagrant/LICENSE\",\n              \"pw_name\": \"vagrant\",\n              \"rgrp\": true,\n              \"roth\": true,\n              \"rusr\": true,\n              \"size\": 35149,\n              \"uid\": 1000,\n              \"wgrp\": false,\n              \"woth\": false,\n              \"wusr\": true,\n              \"xgrp\": false,\n              \"xoth\": false,\n              \"xusr\": false\n          },\n          ...\n          {\n              \"atime\": 1610575876.0480063,\n              \"ctime\": 1610575837.6780062,\n              \"dev\": 64768,\n              \"gid\": 1000,\n              \"gr_name\": \"vagrant\",\n              \"inode\": 67147325,\n              \"isblk\": false,\n              \"ischr\": false,\n              \"isdir\": false,\n              \"isfifo\": false,\n              \"isgid\": false,\n              \"islnk\": false,\n              \"isreg\": true,\n              \"issock\": false,\n              \"isuid\": false,\n              \"mode\": \"0644\",\n              \"mtime\": 1610571664.0,\n              \"nlink\": 1,\n              \"path\": \"/vagrant/root_cronjob_monitoring_sysstat.txt\",\n              \"pw_name\": \"vagrant\",\n              \"rgrp\": true,\n              \"roth\": true,\n              \"rusr\": true,\n              \"size\": 179,\n              \"uid\": 1000,\n              \"wgrp\": false,\n              \"woth\": false,\n              \"wusr\": true,\n              \"xgrp\": false,\n              \"xoth\": false,\n              \"xusr\": false\n          }\n      ],\n      \"matched\": 4,\n      \"msg\": \"\"\n  }\n```\n\n### Simple docker test\n\n```\n  [vagrant@cent7ansi ~]$ docker run hello-world\n  Unable to find image 'hello-world:latest' locally\n  Trying to pull repository docker.io/library/hello-world ...\n  latest: Pulling from docker.io/library/hello-world\n  0e03bdcc26d7: Pull complete\n  Digest: sha256:31b9c7d48790f0d8c50ab433d9c3b7e17666d6993084c002c2ff1ca09b96391d\n  Status: Downloaded newer image for docker.io/hello-world:latest\n\n  Hello from Docker!\n  This message shows that your installation appears to be working correctly.\n\n  To generate this message, Docker took the following steps:\n  1. The Docker client contacted the Docker daemon.\n  2. The Docker daemon pulled the \"hello-world\" image from the Docker Hub.\n      (amd64)\n  3. The Docker daemon created a new container from that image which runs the\n      executable that produces the output you are currently reading.\n  4. The Docker daemon streamed that output to the Docker client, which sent it\n      to your terminal.\n\n  To try something more ambitious, you can run an Ubuntu container with:\n  $ docker run -it ubuntu bash\n\n  Share images, automate workflows, and more with a free Docker ID:\n  https://hub.docker.com/\n\n  For more examples and ideas, visit:\n  https://docs.docker.com/get-started/\n```\n\n### First ansible-playbook a few simple checks and operations\n\n```\nMy first ansible-playbook\n\n  [vagrant@cent7ansi vagrant]$ cat first_ansible-playbook_display_file_test.yml\n  ---\n    - name: \"Display content of file root_cronjob_monitoring_sysstat.txt\"\n      hosts: localhost\n      tasks:\n      - name: ping test\n        ping:\n\n      - name: Get root_cronjob_monitoring_sysstat.txt contents\n        command: cat root_cronjob_monitoring_sysstat.txt chdir=/vagrant\n        register: command_output\n\n      - name: Print to console\n        debug:\n          msg: \"{{command_output.stdout}}\"\n\n      - name: \"find files in /vagrant\"\n        find:\n          paths: '/vagrant'\n```\n\nNB the above took me some time to get write, the identation has to be perfect ;)\n\nHere is the output:\n\n```\n  [vagrant@cent7ansi vagrant]$ ansible-playbook first_ansible-playbook_display_file_test.yml -v\n  Using /etc/ansible/ansible.cfg as config file\n  [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'\n\n  PLAY [Display content of file root_cronjob_monitoring_sysstat.txt] ********************************************************************************\n\n  TASK [Gathering Facts] ****************************************************************************************************************************\n  ok: [localhost]\n\n  TASK [ping test] **********************************************************************************************************************************\n  ok: [localhost] =\u003e {\"changed\": false, \"ping\": \"pong\"}\n\n  TASK [Get root_cronjob_monitoring_sysstat.txt contents] *******************************************************************************************\n  changed: [localhost] =\u003e {\"changed\": true, \"cmd\": [\"cat\", \"root_cronjob_monitoring_sysstat.txt\"], \"delta\": \"0:00:00.007846\", \"end\": \"2021-01-14 00:17:24.397899\", \"rc\": 0, \"start\": \"2021-01-14 00:17:24.390053\", \"stderr\": \"\", \"stderr_lines\": [], \"stdout\": \"# run system activity accounting tool every 1 minutes\\n*/1 * * * * /usr/lib64/sa/sa1 1 1\\n# generate a daily summary of process accounting at 23:53\\n53 23 * * * /usr/lib64/sa/sa2 -A\", \"stdout_lines\": [\"# run system activity accounting tool every 1 minutes\", \"*/1 * * * * /usr/lib64/sa/sa1 1 1\", \"# generate a daily summary of process accounting at 23:53\", \"53 23 * * * /usr/lib64/sa/sa2 -A\"]}\n\n  TASK [Print to console] ***************************************************************************************************************************\n  ok: [localhost] =\u003e {\n      \"msg\": \"# run system activity accounting tool every 1 minutes\\n*/1 * * * * /usr/lib64/sa/sa1 1 1\\n# generate a daily summary of process accounting at 23:53\\n53 23 * * * /usr/lib64/sa/sa2 -A\"\n  }\n\n  TASK [find files in /vagrant] *********************************************************************************************************************\n  ok: [localhost] =\u003e {\"changed\": false, \"examined\": 7, \"files\": [{\"atime\": 1610575837.3620062, \"ctime\": 1610575837.6780062, \"dev\": 64768, \"gid\": 1000, \"gr_name\": \"vagrant\", \"inode\": 67147322, \"isblk\": false, \"ischr\": false, \"isdir\": false, \"isfifo\": false, \"isgid\": false, \"islnk\": false, \"isreg\": true, \"issock\": false, \"isuid\": false, \"mode\": \"0644\", \"mtime\": 1610571400.0, \"nlink\": 1, \"path\": \"/vagrant/LICENSE\", \"pw_name\": \"vagrant\", \"rgrp\": true, \"roth\": true, \"rusr\": true, \"size\": 35149, \"uid\": 1000, \"wgrp\": false, \"woth\": false, \"wusr\": true, \"xgrp\": false, \"xoth\": false, \"xusr\": false}, {\"atime\": 1610575837.363006, \"ctime\": 1610575837.6780062, \"dev\": 64768, \"gid\": 1000, \"gr_name\": \"vagrant\", \"inode\": 67147323, \"isblk\": false, \"ischr\": false, \"isdir\": false, \"isfifo\": false, \"isgid\": false, \"islnk\": false, \"isreg\": true, \"issock\": false, \"isuid\": false, \"mode\": \"0644\", \"mtime\": 1610571400.0, \"nlink\": 1, \"path\": \"/vagrant/Vagrantfile\", \"pw_name\": \"vagrant\", \"rgrp\": true, \"roth\": true, \"rusr\": true, \"size\": 534, \"uid\": 1000, \"wgrp\": false, \"woth\": false, \"wusr\": true, \"xgrp\": false, \"xoth\": false, \"xusr\": false}, {\"atime\": 1610575837.363006, \"ctime\": 1610575837.6780062, \"dev\": 64768, \"gid\": 1000, \"gr_name\": \"vagrant\", \"inode\": 67147324, \"isblk\": false, \"ischr\": false, \"isdir\": false, \"isfifo\": false, \"isgid\": false, \"islnk\": false, \"isreg\": true, \"issock\": false, \"isuid\": false, \"mode\": \"0644\", \"mtime\": 1610575779.0, \"nlink\": 1, \"path\": \"/vagrant/provision.sh\", \"pw_name\": \"vagrant\", \"rgrp\": true, \"roth\": true, \"rusr\": true, \"size\": 1165, \"uid\": 1000, \"wgrp\": false, \"woth\": false, \"wusr\": true, \"xgrp\": false, \"xoth\": false, \"xusr\": false}, {\"atime\": 1610575876.0480063, \"ctime\": 1610575837.6780062, \"dev\": 64768, \"gid\": 1000, \"gr_name\": \"vagrant\", \"inode\": 67147325, \"isblk\": false, \"ischr\": false, \"isdir\": false, \"isfifo\": false, \"isgid\": false, \"islnk\": false, \"isreg\": true, \"issock\": false, \"isuid\": false, \"mode\": \"0644\", \"mtime\": 1610571664.0, \"nlink\": 1, \"path\": \"/vagrant/root_cronjob_monitoring_sysstat.txt\", \"pw_name\": \"vagrant\", \"rgrp\": true, \"roth\": true, \"rusr\": true, \"size\": 179, \"uid\": 1000, \"wgrp\": false, \"woth\": false, \"wusr\": true, \"xgrp\": false, \"xoth\": false, \"xusr\": false}, {\"atime\": 1610583380.515912, \"ctime\": 1610583378.5669067, \"dev\": 64768, \"gid\": 1000, \"gr_name\": \"vagrant\", \"inode\": 67579643, \"isblk\": false, \"ischr\": false, \"isdir\": false, \"isfifo\": false, \"isgid\": false, \"islnk\": false, \"isreg\": true, \"issock\": false, \"isuid\": false, \"mode\": \"0664\", \"mtime\": 1610583378.5549893, \"nlink\": 1, \"path\": \"/vagrant/first_ansible-playbook_display_file_test.yml\", \"pw_name\": \"vagrant\", \"rgrp\": true, \"roth\": true, \"rusr\": true, \"size\": 467, \"uid\": 1000, \"wgrp\": true, \"woth\": false, \"wusr\": true, \"xgrp\": false, \"xoth\": false, \"xusr\": false}], \"matched\": 5, \"msg\": \"\"}\n\n  PLAY RECAP ****************************************************************************************************************************************\n  localhost                  : ok=5    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\n```\nNote you need the -v (verbose) option to see the results of the find TASK\n\n\n\n\n## Second set of playbooks - demo parallel vs serial executions\n\n#### default behaviour is to run concurrrently over multiple control nodes\n\nBy default ansible will parallelise out and run concurrently over multiple managed nodes \n\n```\n[vagrant@cent7ansi vagrant]$ cat second-playbook-demo-parallel.yml\n---\n  - name: \"Display content of file root_cronjob_monitoring_sysstat.txt\"\n    hosts: loopbacktest\n    tasks:\n    - name: sleep test (parallel and serial)\n      pause: seconds=3\n\n[vagrant@cent7ansi vagrant]$ time ansible-playbook second-playbook-demo-parallel.yml -i inventory.ini\n\nPLAY [Display content of file root_cronjob_monitoring_sysstat.txt] ************************************************************************************************************\n\nTASK [Gathering Facts] ********************************************************************************************************************************************************\nok: [loopback1]\nok: [loopback4]\nok: [loopback2]\nok: [loopback3]\n\nTASK [sleep test (parallel and serial)] ***************************************************************************************************************************************\nPausing for 3 seconds\n(ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort)\nok: [loopback1]\n\nPLAY RECAP ********************************************************************************************************************************************************************\nloopback1                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\nloopback2                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\nloopback3                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\nloopback4                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\n\n\nreal\t0m6.451s\nuser\t0m2.301s\nsys\t0m0.793s\n```\n\n#### fork parameter to control the degree of concurrency \nthe degree of concurrency can be controlled by the fork -f flag, although in my demo this didn't working as I expected\n```\n[vagrant@cent7ansi vagrant]$ time ansible-playbook second-playbook-demo-parallel.yml -i inventory.ini -f 2\n\nPLAY [Display content of file root_cronjob_monitoring_sysstat.txt] ************************************************************************************************************\n\nTASK [Gathering Facts] ********************************************************************************************************************************************************\nok: [loopback2]\nok: [loopback1]\nok: [loopback4]\nok: [loopback3]\n\nTASK [sleep test (parallel and serial)] ***************************************************************************************************************************************\nPausing for 3 seconds\n(ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort)\nok: [loopback1]\n\nPLAY RECAP ********************************************************************************************************************************************************************\nloopback1                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\nloopback2                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\nloopback3                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\nloopback4                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\n\n\nreal\t0m7.173s\nuser\t0m2.299s\nsys\t0m0.755s\n[vagrant@cent7ansi vagrant]$ time ansible-playbook second-playbook-demo-parallel.yml -i inventory.ini -f 1\n\nPLAY [Display content of file root_cronjob_monitoring_sysstat.txt] ************************************************************************************************************\n\nTASK [Gathering Facts] ********************************************************************************************************************************************************\nok: [loopback1]\nok: [loopback2]\nok: [loopback3]\nok: [loopback4]\n\nTASK [sleep test (parallel and serial)] ***************************************************************************************************************************************\nPausing for 3 seconds\n(ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort)\nok: [loopback1]\n\nPLAY RECAP ********************************************************************************************************************************************************************\nloopback1                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\nloopback2                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\nloopback3                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\nloopback4                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\n\n\nreal\t0m8.886s\nuser\t0m2.419s\nsys\t0m0.831s\n```\n\n#### adding serial keyword\n```\n[vagrant@cent7ansi vagrant]$ cat second-playbook-demo-serial.yml\n---\n  - name: \"Display content of file root_cronjob_monitoring_sysstat.txt\"\n    hosts: loopbacktest\n    serial: 1\n    tasks:\n    - name: sleep test (parallel and serial)\n      pause: seconds=3\n```\nnow we can see this runs one-by-one \n```      \n[vagrant@cent7ansi vagrant]$ time ansible-playbook second-playbook-demo-serial.yml -i inventory.ini\n\nPLAY [Display content of file root_cronjob_monitoring_sysstat.txt] ************************************************************************************************************\n\nTASK [Gathering Facts] ********************************************************************************************************************************************************\nok: [loopback1]\n\nTASK [sleep test (parallel and serial)] ***************************************************************************************************************************************\nPausing for 3 seconds\n(ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort)\nok: [loopback1]\n\nPLAY [Display content of file root_cronjob_monitoring_sysstat.txt] ************************************************************************************************************\n\nTASK [Gathering Facts] ********************************************************************************************************************************************************\nok: [loopback2]\n\nTASK [sleep test (parallel and serial)] ***************************************************************************************************************************************\nPausing for 3 seconds\n(ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort)\nok: [loopback2]\n\nPLAY [Display content of file root_cronjob_monitoring_sysstat.txt] ************************************************************************************************************\n\nTASK [Gathering Facts] ********************************************************************************************************************************************************\nok: [loopback3]\n\nTASK [sleep test (parallel and serial)] ***************************************************************************************************************************************\nPausing for 3 seconds\n(ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort)\nok: [loopback3]\n\nPLAY [Display content of file root_cronjob_monitoring_sysstat.txt] ************************************************************************************************************\n\nTASK [Gathering Facts] ********************************************************************************************************************************************************\nok: [loopback4]\n\nTASK [sleep test (parallel and serial)] ***************************************************************************************************************************************\nPausing for 3 seconds\n(ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort)\nok: [loopback4]\n\nPLAY RECAP ********************************************************************************************************************************************************************\nloopback1                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\nloopback2                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\nloopback3                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\nloopback4                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\n\n\nreal\t0m17.505s\nuser\t0m4.054s\nsys\t0m1.077s\n```\n\n## Background - setting up ssh access for vagrant user over loopback \n\nRef: https://github.com/ansible/ansible/issues/19584 \"Failed to connect to the host via ssh: Permission denied (publickey,password)\"\n\nInitially I was hitting \n\n```\nloopback1 | UNREACHABLE! =\u003e {\n    \"changed\": false,\n    \"msg\": \"Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).\",\n    \"unreachable\": true\n}\n```\n\nand checking regular ssh\n\n```\n[vagrant@cent7ansi vagrant]$ ssh vagrant@127.0.0.1\nPermission denied (publickey,gssapi-keyex,gssapi-with-mic).\n```\n\nso generate ssh keys and add the new public key (.ssh/id_rsa.pub) to the approved host/keys file (.ssh/authorized_keys)\n\n\n```\n[vagrant@cent7ansi vagrant]$ ssh-keygen -t rsa\nGenerating public/private rsa key pair.\nEnter file in which to save the key (/home/vagrant/.ssh/id_rsa):\nEnter passphrase (empty for no passphrase):\nEnter same passphrase again:\nYour identification has been saved in /home/vagrant/.ssh/id_rsa.\nYour public key has been saved in /home/vagrant/.ssh/id_rsa.pub.\nThe key fingerprint is:\nSHA256:B3bX1Vfvw7vBHCdUk0WYzoII4OBQKoD2Tg8m2Kghw1I vagrant@cent7ansi\nThe key's randomart image is:\n+---[RSA 2048]----+\n|+.o ..         =@|\n|o=Eo  .      .o+=|\n|*+o .  .o....oo o|\n|Oo.=   ..o....+. |\n|+o= o   S .  ..+o|\n|.  . .   .    o.=|\n|               = |\n|                o|\n|               . |\n+----[SHA256]-----+\n[vagrant@cent7ansi ~]$ cat .ssh/id_rsa.pub \u003e\u003e .ssh/authorized_keys\n```\n\nand now ssh works\n\n```\n[vagrant@cent7ansi ~]$ ssh vagrant@127.0.0.1\nLast login: Wed Jan 20 17:08:05 2021 from 10.0.2.2\n```\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdgapitts%2Fvagrant-centos7-ansible","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdgapitts%2Fvagrant-centos7-ansible","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdgapitts%2Fvagrant-centos7-ansible/lists"}