Forum Discussion

Tim_Harber's avatar
Apr 22, 2020

Add new key into data group without updating entire list using the API

Is there a way using the API to add a single key to a data group without needing to POST/PATCH the entire existing list with the single new addition?

In other words if I have a data group that looks like this:

 

 

        {
            "name": "key1",
            "data": "value1"
        },
        {
            "name": "key2",
            "data": "value2"
        }

 

 

and I want to add the following:

 

 

        {
            "name": "key3",
            "data": "value3"
        }

 

 

When using the CLI or GUI I can do this one at a time. Using the REST API it does not appear that I can just add a single new key to the list without having to GET the existing list and manually add the new one to the body before POSTing back to the LTM. Is there a way to do this that I am missing?

  • Hello,

    I workaround this with options parameter:

    e.g.

    ?options=records add { key3 { data value3 } }

     

    curl -ku "admin:admin" -X PATCH -H 'Content-type: application/json' -d '{ "name":"my_datagroup" }' https://localhost/mgmt/tm/ltm/data-group/internal/my_datagroup?options=records%20add%20%7b%20key3%20%7b%20data%20value3%20%7d%20%7d |jq .

     

    Best regards.

  • Hello,

    I workaround this with options parameter:

    e.g.

    ?options=records add { key3 { data value3 } }

     

    curl -ku "admin:admin" -X PATCH -H 'Content-type: application/json' -d '{ "name":"my_datagroup" }' https://localhost/mgmt/tm/ltm/data-group/internal/my_datagroup?options=records%20add%20%7b%20key3%20%7b%20data%20value3%20%7d%20%7d |jq .

     

    Best regards.

    • cjunior's avatar
      cjunior
      Icon for Nacreous rankNacreous

      Hi,

      You can find a generic explanation in user guide about options parameter.

      "options:

      Specifies the options to a query request. This parameter takes values that are compatible with the tmsh command-line options."

      In this case, "PATCH" runs "modify" and "options" completes the tmsh command:

      e.g.

      modify ltm data-group internal my_datagroup records add { key3 { data value3 } }

      So, to delete a record, change operation to "delete":

      ?options=records delete { key1 }

       

      curl -ku "admin:admin" -X PATCH -H 'Content-type: application/json' -d '{ "name":"my_datagroup" }' https://localhost/mgmt/tm/ltm/data-group/internal/my_datagroup?options=records%20delete%20%7B%20key1%20%7D |jq .

       

      Full docs:

      https://clouddocs.f5.com/api/icontrol-rest/#

      https://cdn.f5.com/websites/devcentral.f5.com/downloads/icontrol-rest-api-user-guide-14-1-0.pdf

      Data-group docs:

      https://clouddocs.f5.com/api/icontrol-rest/APIRef_tm_ltm_data-group.html

      Regards

    • Tim_Harber's avatar
      Tim_Harber
      Icon for Cirrus rankCirrus

      This is exactly what I am looking for, thank you! Where can I find more info about the options(i.e. add) available with data groups? I would also like to do the same thing removing a single record as well and see what else is available.

    • EvTheFuture's avatar
      EvTheFuture
      Icon for Cirrus rankCirrus

      Edit: In order to select a different partition than Common send this as the body:

      {"partition": "NAME_OF_THE_PARTITION"}

       

      Do you know if this is possible to use this solution when the Data Group is located in a partition other than Common?

      Kind Regards

      // M

  • nice! I'll test 12.1, 15.1 and 16.1 and then call it good. I appreciate you!

    • ashk's avatar
      ashk
      Icon for Cirrus rankCirrus

      Okay, seems this one is using options to add, but I read its using tmsh commands to fulfil the same. but when we migrate to NEXT there would be no TMSH, what would be the best way to achieve to add a name and data to a data-group using iControl REST API? 

      • JRahm's avatar
        JRahm
        Icon for Admin rankAdmin

        there won't be an iControl REST as is in BIG-IP Next. Data-groups are not yet supported in Next, when those are added we'll have a better idea on how it will be supported, whether those will be expected to be part of the application declaration or a shared object that is versioned like iRules in CM. If I had to guess, it will be a versioned shared object that can then be deployed/rolled-back, but given the size of some data-groups, there may be incremental diffs supported. Time will tell.

  •  were you able to confirm the versions? About to test 15.1.3.x.

     

    /jeff