For more information regarding the security incident at F5, the actions we are taking to address it, and our ongoing efforts to protect our customers, click here.

iControl REST API in C# to change virtual server status

Problem this snippet solves:

iControl REST API in C# to show, enable, or disable status of a virtual server

How to use this snippet:

Compile the attached program and execute. Use credential must have admin priviledge. If executing on another machine, copy all files under ..\bin\Debug directory.

**Tested in the following environment: Microsoft Visual Studio Community 2017 Version 15.2 (26430.16) Release VisualStudio.15.Release/15.2.0+26430.16 Microsoft .NET Framework Version 4.6.01055 Installed Version: Community

Visual C# 2017 00369-60000-00001-AA991 Microsoft Visual C# 2017

Code :

//*******************************
//Lab F5 Console Application - ltmVipShowEnableDisable.cs
//Aim:
// 1. Show VIP settings "test-vip-443" in PARTITION 'test'
// 2. Enable VIP "test-vip-443" in PARTITION 'test'
// 3. Disable VIP "test-vip-443" in PARTITION 'test'
//Version 1.0
//Only1MasterBlaster 4/8/2017
//Modifications:
// 1.
// 2.
// 3.
// 4.
// 5.
// *******************************

using System;
using System.Text;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using Newtonsoft.Json; // Third Party JSON serializer. Download from Package Manager Cosnole > Install- 
Package Newtonsoft.Json

namespace ltmVipShowEnableDisable
{
    public class vipEnableObject
    {
        public string enabled { get; set; }
    }
    public class vipDisableObject
    {
        public string disabled { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            //use the httpclient
            using (var client = new HttpClient())
            {
                // IGNORE Certificate Error
                ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain,  
sslPolicyErrors) => true;
                // BASE HttpClient connectivity
                client.BaseAddress = new Uri("https://10.10.10.10/");  //url of our account
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new  
System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
                //ADD Basic Authentication
                var authByteArray = Encoding.ASCII.GetBytes("user1:password1");
                var authCredentials = Convert.ToBase64String(authByteArray);
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",  
authCredentials);
                //
                string partitionName = "~test~";
                string vipName = "test-vip-443";
                string vip = partitionName + vipName;
                string vipPath = "/mgmt/tm/ltm/virtual/" + vip;
                Console.WriteLine("\nSelect\n1. Show VIP Settings \n2. Enable VIP\n3. Disable VIP\n4.  
Exit\nChoice=");
                char choice = Console.ReadKey().KeyChar;
                switch (choice)
                {
                    case '1':
                        //HTTP GET to the REST endpoint            
                        HttpResponseMessage response = client.GetAsync(vipPath).Result;
                        var value = response.Content.ReadAsStringAsync().Result;

                        //CHECK to see if we have a succesful response
                        if (response.IsSuccessStatusCode)
                        {
                            //set the viewmodel from the content in the response
                            Console.WriteLine("\nShow current settings of VIP {0}\n", vip);
                            Console.WriteLine(value);
                        }
                        else
                        {
                            // HTTP Response status in not 200 OK
                            Console.WriteLine("\nError ... Not Successful\n");
                            Console.WriteLine(value);
                        }
                        break;
                    case '2':
                        //HTTP PUT to Enable the VIP            
                        Console.WriteLine("\nEnabling VIP {0}...\n", vip);
                        vipEnableObject vipEnableState = new vipEnableObject { enabled = "true" };
                        var jsonEnableContent = new StringContent(JsonConvert.SerializeObject 
(vipEnableState));
                        jsonEnableContent.Headers.ContentType = new MediaTypeWithQualityHeaderValue 
("application/json");
                        response = client.PutAsync(vipPath, jsonEnableContent).Result;
                        response.EnsureSuccessStatusCode();
                        value = response.Content.ReadAsStringAsync().Result;
                        Console.WriteLine("\nNew settings of VIP {0} \n\n {1}\n", vip, value);
                        break;
                    case '3':
                        //HTTP PUT to Disable the VIP            
                        Console.WriteLine("\nDisabling VIP {0}...\n", vip);
                        vipDisableObject vipDisableState = new vipDisableObject { disabled = "true" };
                        var jsonDisableContent = new StringContent(JsonConvert.SerializeObject 
(vipDisableState));
                        jsonDisableContent.Headers.ContentType = new MediaTypeWithQualityHeaderValue 
("application/json");
                        response = client.PutAsync(vipPath, jsonDisableContent).Result;
                        response.EnsureSuccessStatusCode();
                        value = response.Content.ReadAsStringAsync().Result;
                        Console.WriteLine("\nNew settings of VIP {0} \n\n {1}\n", vip, value);
                        break;
                    default:
                        break;
                }
                Console.WriteLine("\nTask Completed...");
                //choice = Console.ReadKey().KeyChar;
            }
        }
    }
}
Published Aug 08, 2017
Version 1.0

1 Comment

  • Then how to disable/enable status of vitrual server? Just like this: curl -sk -u user:passwd -H 'Content-Type: application/json' -X POST -d ....