Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

use xmlstarlet in shell script to read script variable value and insert in outpu xml file under specific section if the string is not present there #12

Open
vivuu1989 opened this issue Feb 19, 2024 · 1 comment

Comments

@vivuu1989
Copy link

The parse yaml utility which I used in my shell script produces variables as below by eval command

policy1_name='ipfilter'
policy1_scope='api'
policy1_apiname='apiname'
policy1_inboundsession='rate-limit-by-key calls="25" renewal-period="60"
counter-key="@\(Regex.Match\(context.xxx.xxxx.GetValueOrDefault\("X-xxxxxxx-For",""\), @"^[.0-9]*"\)?.Value\)'
policy1_outboundsession_ipAddressesFrom='1xxxxxxxx'
policy1_outboundsession_ipAddressesTo='1yyyyyyy'
policy1_=' policy1_name policy1_scope policy1_apiname policy1_inboundsession policy1_outboundsession'
policy1_outboundsession_=' policy1_outboundsession_ipAddressesFrom policy1_outboundsession_ipAddressesTo'
policy_=' policy1'

I know, I can use xmlstarlet to create element inside my outputpolicy.xml file as given below.

for g in $(eval echo \$${f}_apiname); do
     echo " this policy will be applied to apis,$(eval echo \$${f}_apiname)"
    done
      if [ -z "$(eval echo \$${f}_inboundsession_)" ]; then
        echo 'the inbound session is not present'
      else
        echo 'the inbound session is present and append the policy settings to inbound'
        xmlstarlet ed -O  -s '//inbound' -t elem -n rate-limit-by-key  -i '//inbound/rate-limit-by-key' -t attr -n calls -v xx -i '//inbound/rate-limit-by-key' -t attr -n renewal-period -v yy -i '//inbound/rate-limit-by-key' -t attr -n counter-key -v '@(Regex.Match(context.x.y.GetValueOrDefault("xxxxxxx",""), @"^[.x-y]*")?.Value)' policy.xml > io_ou_ipfilter.xml

but what I am looking is use xmlstarlet in my script to read the output of the above script variable "$(eval echo $${f}inboundsession) and insert the given string under inbound session of the below policy.xml file if the string is not preset.

Expected Output

<policies>
    <inbound>
	  <base />
      <rate-limit-by-key calls="xxx" renewal-period="xx" counter-key="@(Regex.Match(context.x.y.GetValueOrDefault("xxxxxxx",""), @"^[.x-y]*")?.Value)" />
    </inbound>
    <backend>
	  <base />
    </backend>
    <outbound>
	  <base />
    </outbound>
    <on-error>
	  <base />
    </on-error>
</policies>
@vadi2
Copy link
Member

vadi2 commented Feb 19, 2024

I don't think that is possible within an action.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants