{"id":716,"date":"2021-03-13T19:08:45","date_gmt":"2021-03-13T18:08:45","guid":{"rendered":"https:\/\/nine30.info\/?p=716"},"modified":"2021-03-13T19:08:45","modified_gmt":"2021-03-13T18:08:45","slug":"vra-saltstack-config-targeting-minions-and-jobs","status":"publish","type":"post","link":"https:\/\/nine30.nxt70.com\/index.php\/2021\/03\/13\/vra-saltstack-config-targeting-minions-and-jobs\/","title":{"rendered":"vRA SaltStack Config \u2013 Targeting Minions and Jobs"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Targeting<\/h1>\n\n\n\n<p>Targeting is how you select Salt Minions when running commands, applying configurations, and when doing almost anything else in Salts that involves a Salt Minion. You define a Minions Target by matching against hostnames or system information or defined groups, or even combinations of the previous.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Globbing<\/h2>\n\n\n\n<p>As we have seen in <a rel=\"noreferrer noopener\" href=\"https:\/\/nine30.info\/vra-saltstack-config-add-minions-and-commands\/\" target=\"_blank\">my previous post<\/a> the simplest way to target is using the Salt minion ID and globbing on the Salt Minion ID by simply including a wildcard in the target. The following example targets all the minions whose hostname starts with &#8220;minion&#8221;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>salt 'minion*' disk.usage<\/code><\/pre>\n\n\n\n<p>Unfortunately not always naming convention is there to help or if it is in place and enforced not always is enough for our purposes.  For this reason Salt provides other options for targeting, in these post we&#8217;ll go through some options that are a good starting point for our purposes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Targeting with Grains<\/h2>\n\n\n\n<p>Grains? What are Grains?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Grains<\/h3>\n\n\n\n<p>Grains are static information Salt collects about the underlying managed system. Salt collects Grains for the operating system, domain name, IP address, kernel, OS type, memory and many other system properties. In the vRA SaltStack Config you can see all the Grains that are available on a Minion by clicking on the Minion ID wherever it appears in the user interface, once in the Minion details section make sure to scroll down as Grains list is very long.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"730\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/01.grains-ui.png\" alt=\"\" class=\"wp-image-730\"\/><\/figure>\n<\/figure>\n\n\n\n<p>Of course you can also list Grains on a target using the CLI (in the snippet below replace the Minion ID with a valid Minion ID in your environment):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#lists all grains available on the targeted minion(s)\nsalt minion-web.corp.local grains.ls\n\n#list grains data on the targeted minion(s)\nsalt minion-web.corp.local grains.items\n\n#show data for grain named \"os\" for the targeted minion(s)\nsalt minion-web.corp.local grains.item os<\/code><\/pre>\n\n\n\n<p>Here is how outputs looks like, click on each image to enlarge it.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"722\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/03.grains.cli_-1.png\" alt=\"\" class=\"wp-image-722\"\/><\/figure>\n<\/figure>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"723\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/04.grains.cli_-1.png\" alt=\"\" class=\"wp-image-723\"\/><\/figure>\n<\/figure>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"724\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/04.grains.cli_-2.png\" alt=\"\" class=\"wp-image-724\"\/><\/figure>\n<\/figure>\n\n\n\n<p>By default Salt provides a good list of Grains, but of course you can add your own Grains to Minions. As usual there are different options to do that: 1) you can <span style=\"text-decoration: underline;\">statically<\/span> assign custom Grain(s) with configuration files or through CLI and 2) you can <span style=\"text-decoration: underline;\">dynamically<\/span> assign custom Grain(s) by creating custom grains modules. There is a lot more about Grains capabilities that I cannot cover here, but you can go deeper in this interesting topic and discover more about the power of Grains by starting from <a rel=\"noreferrer noopener\" href=\"https:\/\/docs.saltproject.io\/en\/latest\/topics\/grains\/index.html\" target=\"_blank\">here<\/a>.<\/p>\n\n\n\n<p>For the purpose of this post we will just add a custom Grain to a Minion using the CLI, the command syntax is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>salt '*' grains.append key val <\/code><\/pre>\n\n\n\n<p>Where <code>key<\/code> is the Grain key to to be appended to and <code>val<\/code> is the value to append to the Grain key. If the Grain key doesn&#8217;t exist, the Grain key is added and the value is appended to the new Grain as a list item. With the following command we add a Grain key <code>role<\/code> with value <code>webserver<\/code> to the Minion ID <code>minion-web.corp.local<\/code>. As the Grain <code>role<\/code> doesn&#8217;t exist on my Minion it will be created. Please, note that using Globbing Targeting you can apply the same custom Grain to many Minions at the same time.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>salt minion-web.corp.local grains.append role webserver<\/code><\/pre>\n\n\n\n<p>Here is the outcome:<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"726\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/05.grains.add_.cli_-scaled.jpg\" alt=\"\" class=\"wp-image-726\"\/><\/figure>\n<\/figure>\n\n\n\n<p>You can check the Grain was actually appended only to the targeted Minion either in the user interface or through the CLI as described earlier in this post.<\/p>\n\n\n\n<p>Now that we are little familiar with Grains we can start targeting with Grains, targeting via a Grain is done by passing the <code>-G<\/code> option to salt, specifying a Grain and a glob expression to match the value of the grain. The syntax for the target is the Grain key followed by a glob expression i.e. <code>\"os:Arch*\"<\/code>. The following example pings only the Minions with Ubuntu operating system:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>salt -G 'os:Ubuntu' test.ping<\/code><\/pre>\n\n\n\n<p>In the example below we check the Minions version of managed machines having assigned webserver role, we do this by leveraging the recently created custom Grain named <code>role<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-6 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"727\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/06.target.grains.cli_-scaled.jpg\" alt=\"\" class=\"wp-image-727\"\/><\/figure>\n<\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Other ways of Targeting<\/h2>\n\n\n\n<p>There are different ways of targeting that can also be combined together, here is some examples.<\/p>\n\n\n\n<p>Instead of simply globbing, Targets can be filtered by leveraging regular expression by means of the option <code>-E<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>salt -E 'minion-&#91;0-9]' test.version<\/code><\/pre>\n\n\n\n<p>Targets can be explicitly specified in a list by using the <code>-L<\/code> option:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>salt -L 'minion-web.corp.local,minion-ubuntu.corp.local' test.version<\/code><\/pre>\n\n\n\n<p>Multiple Target types can be combined in one command compound with the <code>-C<\/code> option:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>salt -C 'G@os:Centos and minion-*' test.version<\/code><\/pre>\n\n\n\n<p>Please, note that other targeting methods are available and we are just scratching the surface here, to see more <a rel=\"noreferrer noopener\" href=\"https:\/\/docs.saltproject.io\/en\/latest\/topics\/targeting\/index.html\" target=\"_blank\">the documentation<\/a> is the place to go.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Targets in the vRA SaltStack Config User Interface<\/h2>\n\n\n\n<p>Of course Targeting is also available through the User Interface with the same expressive power of the CLI. In addition to this the User Interface allows user to save Targets to be reused. By default Salt provides some out of the box Targets (e.g. CentOS, Linux, MacOS, RedHat, SUSE, Ubuntu, Windows and Windows Servers), but you can easily create your own Targets. You can access Targets by selecting Minions tab and here you can review an existing Targets, for instance Ubuntu by simply clicking on it in the left side list.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-7 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"739\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/07.targeting.ui_.all_.png\" alt=\"\" class=\"wp-image-739\"\/><\/figure>\n<\/figure>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-8 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"740\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/08.targeting.ui_.ubuntu.png\" alt=\"\" class=\"wp-image-740\"\/><\/figure>\n<\/figure>\n\n\n\n<p>If you click on the Edit button you can access the criteria behind this Ubuntu Target, as you can see it is super easy.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-9 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"741\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/09.targeting.ui_.ubuntu.edit_.png\" alt=\"\" class=\"wp-image-741\"\/><\/figure>\n<\/figure>\n\n\n\n<p>Now, if you want to create a new Target you just need to click on All Targets and then click the Create Target button.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-10 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"742\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/10.targeting.ui_.webserver.create.png\" alt=\"\" class=\"wp-image-742\"\/><\/figure>\n<\/figure>\n\n\n\n<p>In this post we are going to create a new Target named Webserver using the custom Grain named Role we created before. As you can see there are some matching options: Grain, List, Glob and Compound and they are pretty self explanatory. <\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-11 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"743\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/11.targeting.ui_.webserver.edit_.jpg\" alt=\"\" class=\"wp-image-743\"\/><\/figure>\n<\/figure>\n\n\n\n<p>Configure the match criteria as in the picture below.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-12 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"744\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/12.targeting.ui_.webserver.fill_.jpg\" alt=\"\" class=\"wp-image-744\"\/><\/figure>\n<\/figure>\n\n\n\n<p>We can also create more complex Targeting by adding one or more match criteria and combine them using basic boolean logic AD, OR and NOT. Click on the button Add Match Criteria.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-13 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"746\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/14.targeting.ui_.webserver.twocriteria.jpg\" alt=\"\" class=\"wp-image-746\"\/><\/figure>\n<\/figure>\n\n\n\n<p>For our purpose the single match on the Grain role is enough, to remove the additional match criteria just click on the <code>X<\/code> button on the right of the boolean operator. Now, to save your criteria just click on the Save button.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-14 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"750\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/15.targeting.ui_.webserver.removecreteria.jpg\" alt=\"\" class=\"wp-image-750\"\/><\/figure>\n<\/figure>\n\n\n\n<p>To test our new Target we can simply click on the Target named Webserver, this should display only Minions having Grain role with value webserver.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-15 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"751\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/16.targeting.ui_.webserver.test_.png\" alt=\"\" class=\"wp-image-751\"\/><\/figure>\n<\/figure>\n\n\n\n<p>We can now use our new Target, to do that we need to introduce a new friend: Job. Don&#8217;t worry, there is anything complex here. <\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Jobs<\/h1>\n\n\n\n<p>A Job is how you execute module in vRA SaltStack Config web console. Jobs are the UI counterpart of Salt CLI: remote execution Jobs are created by specifying the module, a function, and any necessary arguments. Having them in web console allows easy reuse of the commands. In vRA SaltStack Config job management consists of several areas:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Jobs, where jobs are created and manually executed;<\/li><li>Activities, which shows jobs in progress, upcoming and completed;<\/li><li>Schedules, where you configure and manage scheduled job executions;<\/li><li>Job History report, which shows the result of a job.<\/li><\/ul>\n\n\n\n<p>Click on the Elements tab and this will take you to the Job section. Here you can create a new Job by clicking on the Create Job button.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-16 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"754\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/17.targeting.ui_.job_.png\" alt=\"\" class=\"wp-image-754\"\/><\/figure>\n<\/figure>\n\n\n\n<p>When creating a new Job, the following fields are presented:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Name: the name of the job. Please, be descriptive;<\/li><li>Command: salt or salt-run. salt-run is used to run a job on the master using a runner module, maybe I&#8217;ll cover runner modules in a future post;<\/li><li>Target: you can assign the job to a Target here or leave it blank to let user specify Target at execution time;<\/li><li>Function: the module\/function you want to execute;<\/li><li>Add Argument: this let you add optional arguments depending on the module\/function you are using.<\/li><\/ul>\n\n\n\n<p>For our purposes here we create a Job to ping Minions using the newly created Webserver Target. Fill the form as in the picture below and hit button Save.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-17 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"756\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/17.targeting.ui_.newjob.png\" alt=\"\" class=\"wp-image-756\"\/><\/figure>\n<\/figure>\n\n\n\n<p>Once saved the UI takes you back to the list of available Jobs, locate your new Job and click on the 3 vertical dots icon and click Run Now.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-18 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"757\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/19.targeting.ui_.runjob.png\" alt=\"\" class=\"wp-image-757\"\/><\/figure>\n<\/figure>\n\n\n\n<p>You are presented with some options as in the picture below, the most interesting to me is the ability to dry-run your job. Click the Run Now button to actually start the Job.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-19 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"758\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/20.targeting.ui_.editrunjob.jpg\" alt=\"\" class=\"wp-image-758\"\/><\/figure>\n<\/figure>\n\n\n\n<p>In vRA SaltStack Config the results of Jobs executions can be viewed in the job history. The job history can be accessed in several locations:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>From the Minions tab, selecting a single minion, Activities -&gt; job id;<\/li><li>From the Activities tab under Completed section selecting the job id.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-20 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"760\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/21.targeting.ui_.completedjob-1.png\" alt=\"\" class=\"wp-image-760\"\/><\/figure>\n<\/figure>\n\n\n\n<p>When you click on the Job ID it opens the Job results for the selected Job ID. In this view you will see a summary and different outputters of the results, depending on the module\/function which was executed the results will be displayed with a different outputter. Your output should looks like the picture below. You can explore this section to familiarize with it, I would suggest you to click on the <code>&gt;<\/code> icon to expand and explore the Job output.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-21 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"761\" src=\"https:\/\/nine30.info\/wp-content\/uploads\/2021\/03\/21.targeting.ui_.joboutput.png\" alt=\"\" class=\"wp-image-761\"\/><\/figure>\n<\/figure>\n\n\n\n<p>With the concepts covered so far we have the foundation to approach the most interesting part of Salt: <strong>Declarative Configuration Management<\/strong>, <strong>Event-Driven automation<\/strong>, <strong>Infrastructure as Code<\/strong> and <strong>SecOps<\/strong>. We will start cover these topics in the next post. Stay tuned!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Targeting Targeting is how you select Salt Minions when running commands, applying configurations, and when doing almost anything else in Salts that involves a Salt Minion. You define a Minions Target by matching against hostnames or system information or defined groups, or even combinations of the previous. Globbing As we have seen in my previous&hellip; <a class=\"more-link\" href=\"https:\/\/nine30.nxt70.com\/index.php\/2021\/03\/13\/vra-saltstack-config-targeting-minions-and-jobs\/\">Continue reading <span class=\"screen-reader-text\">vRA SaltStack Config \u2013 Targeting Minions and Jobs<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":764,"comment_status":"open","ping_status":"open","sticky":false,"template":"templates\/template-cover.php","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4],"tags":[23,40,41,74,78,88,92,96,99,109,122,126,143,145,157,165,178,185,186],"class_list":["post-716","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech","tag-automation","tag-configuration","tag-configurationmanagement","tag-globbings","tag-grains","tag-iac","tag-install","tag-job","tag-linux","tag-minion","tag-opensource","tag-oss","tag-salt","tag-saltstack","tag-software","tag-target","tag-vmware","tag-vrealize","tag-vrealizeautomation","entry"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/nine30.nxt70.com\/index.php\/wp-json\/wp\/v2\/posts\/716","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nine30.nxt70.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nine30.nxt70.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nine30.nxt70.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nine30.nxt70.com\/index.php\/wp-json\/wp\/v2\/comments?post=716"}],"version-history":[{"count":0,"href":"https:\/\/nine30.nxt70.com\/index.php\/wp-json\/wp\/v2\/posts\/716\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nine30.nxt70.com\/index.php\/wp-json\/"}],"wp:attachment":[{"href":"https:\/\/nine30.nxt70.com\/index.php\/wp-json\/wp\/v2\/media?parent=716"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nine30.nxt70.com\/index.php\/wp-json\/wp\/v2\/categories?post=716"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nine30.nxt70.com\/index.php\/wp-json\/wp\/v2\/tags?post=716"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}