{"id":6351,"date":"2021-09-08T08:04:19","date_gmt":"2021-09-08T08:04:19","guid":{"rendered":"https:\/\/www.insentragroup.com\/us02\/?p=6351"},"modified":"2024-12-13T02:01:31","modified_gmt":"2024-12-13T02:01:31","slug":"ansible-tower-in-google-cloud-platform","status":"publish","type":"post","link":"https:\/\/www.insentragroup.com\/us\/insights\/geek-speak\/professional-services\/ansible-tower-in-google-cloud-platform\/","title":{"rendered":"Ansible Tower in Google Cloud Platform"},"content":{"rendered":"\n<p><span>This blog will guide you through how to install Ansible in Google Cloud Platform (GCP).&nbsp; If you are not familiar with Ansible yet you may want to start with my previous blog <a rel=\"noopener\" href=\"\/au\/insights\/geek-speak\/modern-workplace\/ansible-my-new-found-friend\/\" target=\"_blank\">Ansible \u2013 My New Found Friend<\/a>\u200b<a href=\"\/au\/insights\/geek-speak\/modern-workplace\/ansible-my-new-found-friend\/\"><\/a><\/span><span> for a bit of a primer.<\/span><\/p>\n<p><span>Some requirements and recommendations before jumping into the process:<\/span><\/p>\n<ol>\n<li><span>Take the backup of your on-premises Ansible Tower using the latest minor version for your tower. For example, if you are running 3.7.1 and there is 3.7.4 available \u2013 download this version, move the inventory file to this version and run the backup<\/span><\/li>\n<li><span>Before migrating and taking the backup I recommend upgrading the Ansible Tower to the latest version. This way, the target environment will not require additional upgrade post restore<\/span><\/li>\n<\/ol>\n<p>If the backup file is large, you need to ensure you have enough space on the file system from which you are running the restore. Ensure you also have enough space for \/var file system. This applies to all systems in the cluster as the restore job will copy the recovery file to all<\/p>\n<h3 style=\"padding-bottom: 15px; margin-bottom: 30px; margin-top: 40px; border-bottom: 1px solid #f16020;\">Installing Ansible in Google Cloud Platform<\/h3>\n<p><span>Once you are ready, here is the install procedure for GCP:<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span>1. Log into console.cloud.google.com<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span>2. Create a new Project if it has not been created yet: in the UI, click on Project \u2192 New Project. Specify the Name: Ansible Tower. Specify the Location and click Create<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span>3. Navigate to VM Instances and enable Compute Engine API if it is not enabled<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span>4. Click Create New Instance and create three (3) instances:<\/span><\/p>\n<p>&nbsp;<\/p>\n<table border=\"0\" width=\"643\" class=\"minimalistBlack\">\n<tbody>\n<tr>\n<td width=\"189\">\n<p><strong><span>Name<\/span><\/strong><\/p>\n<\/td>\n<td width=\"454\">\n<p><span>Specify the hostname following naming convention, eg.: ansible01<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"189\">\n<p><strong>Region<\/strong><\/p>\n<\/td>\n<td width=\"454\">\n<p><span>Australia-southeast1 (Sydney)<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"189\">\n<p><strong>Zone<\/strong><\/p>\n<\/td>\n<td width=\"454\">\n<p><span>australia-southeast1-b<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"189\">\n<p><strong>Machine Type<\/strong><\/p>\n<\/td>\n<td width=\"454\">\n<p><span>e2-standard-4 (4 vCPU, 16GB memory)<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"4\" width=\"189\">\n<p><strong>Boot Disk<\/strong><\/p>\n<\/td>\n<td width=\"454\">\n<p><span>Public Images: Red Hat Enterprise Linux<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"454\">\n<p><span>Version: Red Hat Enterprise Linux 8<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"454\">\n<p><span>Boot disk type: Balanced Persistent Disk<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"454\">\n<p><span>Size: 60GB<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"189\">\n<p><strong>Firewall<\/strong><\/p>\n<\/td>\n<td width=\"454\">\n<p><span>Allow HTTP traffic<\/span><\/p>\n<p><span>Allow HTTPS traffic<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"189\">\n<p><strong>Networking<\/strong><\/p>\n<\/td>\n<td width=\"454\">\n<p><span>Network tags: ansible-tower<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"189\">\n<p><strong>Network interfaces<\/strong><\/p>\n<\/td>\n<td width=\"454\">\n<p><span>Specify the network for this project<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"2\" width=\"189\">\n<p><strong>Disks<\/strong><\/p>\n<\/td>\n<td width=\"454\">\n<p><span>Boot disk Deletion Rule: Disable Delete boot disk when instance is deleted<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"454\">\n<p><span>Device Name: Based on instance name<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"8\" width=\"189\">\n<p><strong>Additional Disks<\/strong><\/p>\n<\/td>\n<td width=\"454\">\n<p><span>Add new disk for the Primary Instance: 128GB<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"454\">\n<p><span>Name: ansible01-backup<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"454\">\n<p><span>Type: Balanced persistent disk<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"454\">\n<p><span>Snapshot schedule: No schedule<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"454\">\n<p><span>Source Type: Blank disk<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"454\">\n<p><span>Mode: Read\/Write<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"454\">\n<p><span>Deletion Rule: Keep Disk<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"454\">\n<p><span>Size: 128GB<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"padding-left: 40px;\"><span data-contrast=\"auto\">5. Log into the first machine<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span data-contrast=\"auto\">6. Elevate to root using&nbsp;sudo&nbsp;-i<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span data-contrast=\"auto\">7. Configure password-less&nbsp;ssh&nbsp;authentication<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span data-contrast=\"auto\">8. Run the following command on all nodes<\/span><span data-ccp-props=\"{}\">&nbsp;<\/span><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding: 7px 10px; background-color: #f0f0f0;\">ssh-keygen -t rsa -b 2048<\/p>\n<p style=\"padding-left: 40px;\"><span>9. Copy \/root\/.ssh\/id_rsa.pub from the first node to \/root\/.ssh\/authorized_keys on all other servers<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span>10. Ensure the option <strong>PermitRootLogin<\/strong> is set to <strong>yes<\/strong> on all servers in \/etc\/ssh\/sshd_config (this should be set to <strong>no<\/strong> once the installation is finished)<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span>11. Restart the sshd service:<\/span><\/p>\n<p>&nbsp;<\/p>\n<p style=\"padding: 7px 10px; background-color: #f0f0f0;\"># systemctl restart sshd<\/p>\n<p style=\"padding-left: 40px;\"><span>12. Validate the passwordless ssh communication is working from the first node to all other nodes (this should be disabled once the installation is finished)<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span>13. On the first node install wget:<\/span><\/p>\n<p style=\"padding: 7px 10px; background-color: #f0f0f0;\"># dnf install wget -y<\/p>\n<p style=\"padding-left: 40px;\"><span>1. On the first node, change directory to \/root\/ and run the following command to download the ansible-bundle:<\/span><\/p>\n<p style=\"padding: 7px 10px; background-color: #f0f0f0;\"># wget releases.ansible.com\/ansible-tower\/setup-bundle\/ansible-tower-setup-bundle-latest.el8.tar.gz<\/p>\n<p style=\"padding-left: 40px;\"><span>2. <\/span><span>Untar the package:<\/span><\/p>\n<p style=\"padding: 7px 10px; background-color: #f0f0f0;\"># tar xzvpf ansible-tower-setup-bundle-latest.el8.tar.gz<\/p>\n<h3 style=\"padding-bottom: 15px; margin-bottom: 30px; margin-top: 40px; border-bottom: 1px solid #f16020;\">Create GCP SQL PostgreSQL<\/h3>\n<p style=\"padding-left: 40px;\"><span>1. In GCP Console, navigate to SQL and select Create Instance<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span>2. Select PostgreSQL<\/span><\/p>\n<table border=\"0\" width=\"643\" class=\"minimalistBlack\">\n<tbody>\n<tr>\n<td width=\"174\">\n<p><strong><span>Instance ID<\/span><\/strong><\/p>\n<\/td>\n<td width=\"469\">\n<p><span>ansibletowerdb<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"174\">\n<p><strong>Password<\/strong><\/p>\n<\/td>\n<td width=\"469\">\n<p><span>Generate or enter the password for the Administrative user<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"174\">\n<p><strong>Database version<\/strong><\/p>\n<\/td>\n<td width=\"469\">\n<p><span>PostgreSQL 10<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"174\">\n<p><strong>Region<\/strong><\/p>\n<\/td>\n<td width=\"469\">\n<p><span>Australia-southeast1 (Sydney)<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"174\">\n<p><strong>Single Zone<\/strong><\/p>\n<\/td>\n<td width=\"469\">\n<p><span>Given this is a backup Ansible Tower, Single Zone should be sufficient<\/span><\/p>\n<p><span>&nbsp;<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"174\">\n<p><strong>Machine type<\/strong><\/p>\n<\/td>\n<td width=\"469\">\n<p><span>Custom: 4vCPU, 8GB Memory<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"174\">\n<p><strong>Storage<\/strong><\/p>\n<\/td>\n<td width=\"469\">\n<p><span>100GB<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"174\">\n<p><strong>Enable Automatic Storage Increases<\/strong><\/p>\n<\/td>\n<td width=\"469\">\n<p><span>Enabled<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"174\">\n<p><strong>Public IP<\/strong><\/p>\n<\/td>\n<td width=\"469\">\n<p><span>Disabled<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"174\">\n<p><strong>Private IP<\/strong><\/p>\n<\/td>\n<td width=\"469\">\n<p><span>Enabled<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"174\">\n<p><strong>Network<\/strong><\/p>\n<\/td>\n<td width=\"469\">\n<p><span>Specify the Network and setup connection<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"174\">\n<p><strong>Backups<\/strong><\/p>\n<\/td>\n<td width=\"469\">\n<p><span>Leave default<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><span>3. Click Create and wait for the PostgreSQL to be created<\/span><\/p>\n<p><span>4. In SQL Section, click on Overview and note down the <strong>Private IP address<\/strong>. This IP will be later used in configuration of the inventory file.<\/span><\/p>\n<p><span>5. Navigate to Databases section in SQL and click \u2018Create Database\u2019<\/span><\/p>\n<p><span>6. Specify Database name: awx and click Create<\/span><\/p>\n<p><span>7. Navigate to Users section in SQL and click \u2018Add User\u2019<\/span><\/p>\n<p><span>8. Specify Basic Authentication; Username \u2018awx\u2019 and password. Click Add<\/span><\/p>\n<h3 style=\"padding-bottom: 15px; margin-bottom: 30px; margin-top: 40px; border-bottom: 1px solid #f16020;\">Configure Inventory and Install Ansible Tower<\/h3>\n<ol>\n<li><span>Log to the primary node and elevate to root<\/span><\/li>\n<li><span>Change directory to ansible-tower-setup-bundle-<strong>version<\/strong><\/span><\/li>\n<li><span>Using vim or any other editor, edit the inventory file to read, where ansible01, ansible02, ansible03 should be replaced with the hostnames of the servers created for Ansible Tower.<\/span><span><\/span><\/li>\n<\/ol>\n<table border=\"0\" width=\"642\" class=\"minimalistBlack\">\n<tbody>\n<tr>\n<td width=\"133\">\n<p><strong><span>[tower]<\/span><\/strong><\/p>\n<\/td>\n<td width=\"510\">\n<p><span>Specify the server names of Ansible Tower nodes<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"133\">\n<p><strong>[automationhub]<\/strong><\/p>\n<\/td>\n<td width=\"510\">\n<p><span>Leave blank<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"133\">\n<p><strong>[database]<\/strong><\/p>\n<\/td>\n<td width=\"510\">\n<p><span>Leave blank (used only if DB is co-located on the VM)<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"6\" width=\"133\">\n<p><strong>[all:vars]<\/strong><\/p>\n<\/td>\n<td width=\"510\">\n<p><span>admin_password \u2013 this is the password used by the admin<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"510\">\n<p><span>pg_host = \u2018Private IP Address<\/span>\u2019<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"510\">\n<p><span>pg_port = \u20185432\u2019<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"510\">\n<p><span>pg_database = \u2018awx\u2019<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"510\">\n<p><span>pg_username = &#8216;awx\u2019<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"510\">\n<p><span>pg_password = \u2018Your_Postgres_AWX_Password\u2019<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"padding: 11px 10px; background-color: #f0f0f0;\">[tower] ansible01 ansible_connection=local<br>ansible02<br>ansible03<br><br><br>[automationhub] <br><br>[database] <br><br>[all:vars]<br>admin_password=&#8217;Your_Tower_Password&#8217;<br><br><br>pg_host=&#8217;Private IP Address&#8217;<br>pg_port=&#8217;5432&#8242;<br><br><br>pg_database=&#8217;awx&#8217;<br>pg_username=&#8217;awx&#8217;<br>pg_password=&#8217;Your_Postgresql_awx_password&#8217;<br>pg_sslmode=&#8217;prefer&#8217; # set to &#8216;verify-full&#8217; for client-side enforced SSL<\/p>\n<p style=\"padding-left: 40px;\"><span>4. Save the changes and exit<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span>5. On the primary node, create file system to host backup\/restore files. Use additional disk allocated for this node. The following steps outline the process for disk \/dev\/sdc. Ensure this is the disk allocated for the backup\/restore purposes.<\/span><\/p>\n<p style=\"padding: 10px; background-color: #f0f0f0;\"># # mkfs.xfs \/dev\/sdb<br># cd \/<br># mkdir ansiblebkp<br><br><br>Add the following entry to \/etc\/fstab (UUID should be found using blkid command)<br>UUID=&#8221;9252f3ed-8283-4ce0-9f0d-00d308ceeaa3&#8243; \/ansiblebkp xfs defaults 0 0<br><br><br># mount -a<br><br><br># df -h | grep ansible<br>\/dev\/sdb 128G 946M 128G 1% \/ansiblebkp<\/p>\n<p style=\"padding-left: 40px;\"><span>6. Run setup.sh located in the bundle\u2019s directory<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span>7. Once the process finishes, confirm all the nodes are visible:<\/span><\/p>\n<p style=\"padding: 7px 10px; background-color: #f0f0f0;\">awx-manage list_instances<\/p>\n<p style=\"padding-left: 40px;\"><span>8. Open the browser and navigate to <a href=\"https:\/\/ansible_server_name\/\" rel=\"nofollow\">https:\/\/ansible_server_name<\/a><\/span><\/p>\n<p style=\"padding-left: 40px;\"><span>9. Enter the License Key<\/span><\/p>\n<h3 style=\"padding-bottom: 15px; margin-bottom: 30px; margin-top: 40px; border-bottom: 1px solid #f16020;\">Ansible Tower Migration to GCP<\/h3>\n<p><span>This section describes the process required to migrate (restore) the on-premises Ansible Tower to the GCP Tower Cluster we built as the rehearsal to this section.<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span>1. Estimate the source Ansible Tower backup disk requirements, using the following commands:<\/span><\/p>\n<p style=\"padding-left: 80px;\"><span>a.) Log into existing Ansible Tower node.<\/span><\/p>\n<p style=\"padding-left: 80px;\"><span>b.) <\/span>Connect to the existing production PostgreSQL node using the following command:<\/p>\n<p style=\"padding: 7px 10px; background-color: #f0f0f0;\">psql &#8220;host=postgres_hostname port=5432 dbname=postgres user=awx password=yourpass&#8221;<\/p>\n<p style=\"padding-left: 80px;\"><span>c.) Verify the size of the database using the SQL statement below (the size below is for demonstration purposes only):<\/span><\/p>\n<p style=\"padding: 10px; background-color: #f0f0f0;\">postgres=&gt; SELECT pg_size_pretty( pg_database_size(&#8216;awx&#8217;) );<br>pg_size_pretty<br>&#8212;&#8212;&#8212;&#8212;&#8212;-<br>20 MB<br>(1 row)<\/p>\n<p style=\"padding-left: 40px;\"><span>2. Select the file system with space available and using the <strong>LATEST<\/strong> ansible-tower-bundle, execute the backup:<\/span><span><\/span><\/p>\n<p style=\"padding: 7px 10px; background-color: #f0f0f0;\"># .\/setup.sh -e &#8216;backup_dest=\/path\/to\/backup_dir\/&#8217; -b<\/p>\n<p style=\"padding-left: 40px;\"><span>3. <\/span><span>Copy the backup file to the primary node in GCP Ansible Tower Cluster:<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span>4. Change the directory where Ansible Tower binaries are located and execute the restore:<\/span><\/p>\n<p style=\"padding: 7px 10px; background-color: #f0f0f0;\">#.\/setup.sh -e &#8216;restore_backup_file=\/ansiblebkp\/tower-restore\/ansible-tower-backup.tar.gz&#8217; -r<\/p>\n<p style=\"padding-left: 40px;\"><span>5. Observe the progress. The restore should finish with no errors reported.<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span>6. Execute the following command to verify if the restoration worked:<\/span><\/p>\n<p style=\"padding: 7px 10px; background-color: #f0f0f0;\"># awx-manage list_instances<\/p>\n<p style=\"padding-left: 40px;\"><span>7. The output should list only GCP nodes<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span>8. Login to Ansible Tower UI to confirm if the configuration is correct. Remember to use the admin password from the SOURCE Ansible Tower<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span>9. Validate LDAP login<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span>10. Once the restoration process has been confirmed, run a test Ansible job to confirm the functionality<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span>11. Execute the backup of the new configuration on the primary node:<\/span><span><\/span><\/p>\n<p style=\"padding: 7px 10px; background-color: #f0f0f0;\">.\/setup.sh -e &#8216;backup_dest=\/ansiblebkp\/&#8217; -b<\/p>\n<p style=\"padding-left: 40px;\"><span>12. Execute the restore of the new configuration on the primary node. This step is required to ensure all of the credentials and the entire configuration works as expected.<\/span><\/p>\n<p style=\"padding: 7px 10px; background-color: #f0f0f0;\">.\/setup.sh -r<\/p>\n<p style=\"padding-left: 40px;\"><span>13. This concludes the migration process<\/span><\/p>\n<p style=\"padding-left: 40px;\">&nbsp;<\/p>\n<p class=\"Textbody\"><span>For information on running Ansible AWX with Isolated Nodes, <a href=\"\/au\/insights\/geek-speak\/cloud-and-modern-data-center\/ansible-awx-with-isolated-nodes\/\">check out this blog<\/a>. <\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This blog will guide you through how to install Ansible in Google Cloud Platform (GCP).&nbsp; If you are not familiar with Ansible yet you may want to start with my previous blog Ansible \u2013 My New Found Friend\u200b for a bit of a primer. Some requirements and recommendations before jumping into the process: Take the&hellip; <a class=\"more-link\" href=\"https:\/\/www.insentragroup.com\/us\/insights\/geek-speak\/professional-services\/ansible-tower-in-google-cloud-platform\/\">Continue reading <span class=\"screen-reader-text\">Ansible Tower in Google Cloud Platform<\/span><\/a><\/p>\n","protected":false},"author":67,"featured_media":6353,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"content-type":"","footnotes":""},"categories":[25],"tags":[],"class_list":["post-6351","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-professional-services","entry"],"_links":{"self":[{"href":"https:\/\/www.insentragroup.com\/us\/wp-json\/wp\/v2\/posts\/6351","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.insentragroup.com\/us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.insentragroup.com\/us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.insentragroup.com\/us\/wp-json\/wp\/v2\/users\/67"}],"replies":[{"embeddable":true,"href":"https:\/\/www.insentragroup.com\/us\/wp-json\/wp\/v2\/comments?post=6351"}],"version-history":[{"count":4,"href":"https:\/\/www.insentragroup.com\/us\/wp-json\/wp\/v2\/posts\/6351\/revisions"}],"predecessor-version":[{"id":7158,"href":"https:\/\/www.insentragroup.com\/us\/wp-json\/wp\/v2\/posts\/6351\/revisions\/7158"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.insentragroup.com\/us\/wp-json\/wp\/v2\/media\/6353"}],"wp:attachment":[{"href":"https:\/\/www.insentragroup.com\/us\/wp-json\/wp\/v2\/media?parent=6351"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.insentragroup.com\/us\/wp-json\/wp\/v2\/categories?post=6351"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.insentragroup.com\/us\/wp-json\/wp\/v2\/tags?post=6351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}