powershelljenkinsfortigate

IP Address Input from Jenkins to Variable powershell


I Have Jenkins job that asks for IP Address

$ip = $env:Lan_ip

what the user enter goes to $ip

now $ip is 192.168.10.10 for Example

now I'm trying to insert this variable to FortiGate SSH

Invoke-SshCommand $Firewall -command ‘config system interface 
edit port1
set ip $ip 255.255.255.0
end’

but he can not read the $ip I need to make it like INT separate with .

im getting this Error

node_check_object fail! for ip $ip 

how can i convert the sting im getting from the user when he enter the ip address in for example --> 192.168.10.10 to usable variable in the code


Solution

  • From what I gather from here is that you need to give the subnet mask as a CIDR-formatted subnet mask like 255.255.255.0/24

    To get that CIDR value off a subnet IP address, you can use this function:

    function Get-SubnetMaskLength ([string]$SubnetMask) {
        # $cidr = Get-SubnetMaskLength "255.255.240.0" --> 20
        $result = 0
        [IPAddress]$ip = $SubnetMask
        foreach ($octet in $ip.GetAddressBytes()) {
            while ($octet) {
                $octet = ($octet -shl 1) -band [byte]::MaxValue
                $result++
            }
        }
        $result
    }
    

    So

    $subNet = '255.255.255.0'
    $cidr = Get-SubnetMaskLength $subNet          # --> 24
    $subNetAndCidr = '{0}/{1}' -f $subNet, $cidr  # --> 255.255.255.0/24
    

    P.S. Always use straight quotes instead of the curly thingies and in code!