I need to export a cli script from one F5 to another F5. They are separate appliances, not synched to each other.
I thought I could run ‘tmsh’ then ‘list cli script <scriptname>’. It shows the output, I copy it all to notepad.
I went to the target box, ran tmsh, then ‘cli script create <scriptname>’. I pasted between the { and the }. I get a syntax error upon saving.
Has anyone else tried this? Would it be easier to winscp from one box to the other? What’s the file directory for scripts on F5, that I could locate in WinSCP? Thanks
Hi ,
Do you mean a “.sh” file contains script ?
if so do that using winSCP , or if there is a connectivity between the two devices you can use “scp” protocol, as below:
scp -p <local_filename> <username>@<server>:<remote_path>
For Example :
scp -p myfile.bin root@10.90.101.50:/var/tmp/
Have a look here
Try using the create and edit command approach shown in the following article:
JRahm
January 31, 2024, 8:42pm
4
chatGPT and I worked on a bash script that should help…you can modify as needed. Tested to same system with a static second name to make sure the script worked, but the script will carry forward the same name as the script you’re moving. The error checking is bash-helpful but not REST-helpful. Even a 4xx error will move forward, so that part is a task for you to work toward completion. The gist is here on Github where I might update it, but also pasted below for review. You can probably remove the echo of the downloaded script, I had that there while tweaking chatGPT recommendations and making sure I only got the script instead of the entire JSON payload…
<span class="token shebang important">#!/bin/bash</span>
<span class="token comment"># Check for the correct number of arguments</span>
<span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token string">"<span class="token variable">$#</span>"</span> -ne <span class="token number">3</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span>
<span class="token builtin class-name">echo</span> <span class="token string">"Usage: <span class="token variable">$0</span> <script_name> <source_IP> <destination_IP>"</span>
<span class="token builtin class-name">exit</span> <span class="token number">1</span>
<span class="token keyword">fi</span>
<span class="token assign-left variable">script_name</span><span class="token operator">=</span><span class="token string">"<span class="token variable">$1</span>"</span>
<span class="token assign-left variable">source_ip</span><span class="token operator">=</span><span class="token string">"<span class="token variable">$2</span>"</span>
<span class="token assign-left variable">destination_ip</span><span class="token operator">=</span><span class="token string">"<span class="token variable">$3</span>"</span>
<span class="token comment"># Prompt for source BIG-IP credentials</span>
<span class="token builtin class-name">read</span> -p <span class="token string">"Enter source BIG-IP username: "</span> source_username
<span class="token builtin class-name">read</span> -sp <span class="token string">"Enter source BIG-IP password: "</span> source_password
<span class="token builtin class-name">echo</span>
<span class="token comment"># Prompt for destination BIG-IP credentials</span>
<span class="token builtin class-name">read</span> -p <span class="token string">"Enter destination BIG-IP username: "</span> destination_username
<span class="token builtin class-name">read</span> -sp <span class="token string">"Enter destination BIG-IP password: "</span> destination_password
<span class="token builtin class-name">echo</span>
<span class="token comment"># Define the source and destination URLs</span>
<span class="token assign-left variable">source_url</span><span class="token operator">=</span><span class="token string">"https://<span class="token variable">$source_ip</span>/mgmt/tm/cli/script/<span class="token variable">$script_name</span>"</span>
<span class="token assign-left variable">destination_url</span><span class="token operator">=</span><span class="token string">"https://<span class="token variable">$destination_ip</span>/mgmt/tm/cli/script/"</span>
<span class="token comment"># Download the script from the source BIG-IP and store it in a variable</span>
<span class="token builtin class-name">echo</span> <span class="token string">"Downloading <span class="token variable">$script_name</span> from <span class="token variable">$source_ip</span>..."</span>
<span class="token assign-left variable">downloaded_script</span><span class="token operator">=</span><span class="token variable"><span class="token variable">$(</span><span class="token function">curl</span> -sk -u <span class="token string">"<span class="token variable">$source_username</span>:<span class="token variable">$source_password</span>"</span> <span class="token string">"<span class="token variable">$source_url</span>"</span> <span class="token operator">|</span> jq -r <span class="token string">'.apiAnonymous'</span><span class="token variable">)</span></span>
<span class="token assign-left variable">escaped_script</span><span class="token operator">=</span><span class="token variable"><span class="token variable">$(</span><span class="token builtin class-name">echo</span> <span class="token string">"<span class="token variable">$downloaded_script</span>"</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'s/"/\\"/g'</span><span class="token variable">)</span></span>
<span class="token builtin class-name">echo</span> <span class="token variable">$downloaded_script</span>
<span class="token comment"># Check if the download was successful</span>
<span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$?</span> -ne <span class="token number">0</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span>
<span class="token builtin class-name">echo</span> <span class="token string">"Error: Failed to download <span class="token variable">$script_name</span> from <span class="token variable">$source_ip</span>"</span>
<span class="token builtin class-name">exit</span> <span class="token number">1</span>
<span class="token keyword">fi</span>
<span class="token comment"># Upload the script to the destination BIG-IP using the "apiAnonymous" sourcePath</span>
<span class="token builtin class-name">echo</span> <span class="token string">"Uploading <span class="token variable">$script_name</span> to <span class="token variable">$destination_ip</span>..."</span>
<span class="token function">curl</span> -sk -X POST -u <span class="token string">"<span class="token variable">$destination_username</span>:<span class="token variable">$destination_password</span>"</span> -H <span class="token string">"Content-Type: application/json"</span> -d <span class="token string">"{<span class="token entity" title='\"'>\"</span>name<span class="token entity" title='\"'>\"</span>: <span class="token entity" title='\"'>\"</span><span class="token variable">$script_name</span><span class="token entity" title='\"'>\"</span>,<span class="token entity" title='\"'>\"</span>apiAnonymous<span class="token entity" title='\"'>\"</span>: <span class="token entity" title='\"'>\"</span><span class="token variable">$escaped_script</span><span class="token entity" title='\"'>\"</span>}"</span> <span class="token string">"<span class="token variable">$destination_url</span>"</span>
<span class="token comment"># Check if the upload was successful</span>
<span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$?</span> -ne <span class="token number">0</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span>
<span class="token builtin class-name">echo</span> <span class="token string">"Error: Failed to upload <span class="token variable">$script_name</span> to <span class="token variable">$destination_ip</span>"</span>
<span class="token builtin class-name">exit</span> <span class="token number">1</span>
<span class="token keyword">fi</span>
<span class="token builtin class-name">echo</span> <span class="token string">"Script <span class="token variable">$script_name</span> successfully transferred from <span class="token variable">$source_ip</span> to <span class="token variable">$destination_ip</span>"</span>
JRahm
January 31, 2024, 8:56pm
5
and for a breakdown on my process here and want to engage on this with the larger LinkedIn community, I wrote about how I worked out this script .