1. Packages
  2. Exoscale
  3. API Docs
  4. ElasticIp
Exoscale v0.55.0 published on Monday, Jan 29, 2024 by Pulumiverse

exoscale.ElasticIp

Explore with Pulumi AI

exoscale logo
Exoscale v0.55.0 published on Monday, Jan 29, 2024 by Pulumiverse

    Manage Exoscale Elastic IPs (EIP).

    Corresponding data source: exoscale_elastic_ip.

    Example Usage

    Unmanaged

    using System.Collections.Generic;
    using System.Linq;
    using Pulumi;
    using Exoscale = Pulumiverse.Exoscale;
    
    return await Deployment.RunAsync(() => 
    {
        var myElasticIp = new Exoscale.ElasticIp("myElasticIp", new()
        {
            Zone = "ch-gva-2",
        });
    
    });
    
    package main
    
    import (
    	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    	"github.com/pulumiverse/pulumi-exoscale/sdk/go/exoscale"
    )
    
    func main() {
    	pulumi.Run(func(ctx *pulumi.Context) error {
    		_, err := exoscale.NewElasticIp(ctx, "myElasticIp", &exoscale.ElasticIpArgs{
    			Zone: pulumi.String("ch-gva-2"),
    		})
    		if err != nil {
    			return err
    		}
    		return nil
    	})
    }
    
    package generated_program;
    
    import com.pulumi.Context;
    import com.pulumi.Pulumi;
    import com.pulumi.core.Output;
    import com.pulumi.exoscale.ElasticIp;
    import com.pulumi.exoscale.ElasticIpArgs;
    import java.util.List;
    import java.util.ArrayList;
    import java.util.Map;
    import java.io.File;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    
    public class App {
        public static void main(String[] args) {
            Pulumi.run(App::stack);
        }
    
        public static void stack(Context ctx) {
            var myElasticIp = new ElasticIp("myElasticIp", ElasticIpArgs.builder()        
                .zone("ch-gva-2")
                .build());
    
        }
    }
    
    import pulumi
    import pulumiverse_exoscale as exoscale
    
    my_elastic_ip = exoscale.ElasticIp("myElasticIp", zone="ch-gva-2")
    
    import * as pulumi from "@pulumi/pulumi";
    import * as exoscale from "@pulumiverse/exoscale";
    
    const myElasticIp = new exoscale.ElasticIp("myElasticIp", {zone: "ch-gva-2"});
    
    resources:
      myElasticIp:
        type: exoscale:ElasticIp
        properties:
          zone: ch-gva-2
    

    EIPv6

    using System.Collections.Generic;
    using System.Linq;
    using Pulumi;
    using Exoscale = Pulumiverse.Exoscale;
    
    return await Deployment.RunAsync(() => 
    {
        var myManagedElasticIp = new Exoscale.ElasticIp("myManagedElasticIp", new()
        {
            AddressFamily = "inet6",
            Healthcheck = new Exoscale.Inputs.ElasticIpHealthcheckArgs
            {
                Interval = 5,
                Mode = "https",
                Port = 443,
                StrikesFail = 3,
                StrikesOk = 2,
                Timeout = 3,
                TlsSni = "example.net",
                Uri = "/health",
            },
            ReverseDns = "example.net",
            Zone = "ch-gva-2",
        });
    
    });
    
    package main
    
    import (
    	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    	"github.com/pulumiverse/pulumi-exoscale/sdk/go/exoscale"
    )
    
    func main() {
    	pulumi.Run(func(ctx *pulumi.Context) error {
    		_, err := exoscale.NewElasticIp(ctx, "myManagedElasticIp", &exoscale.ElasticIpArgs{
    			AddressFamily: pulumi.String("inet6"),
    			Healthcheck: &exoscale.ElasticIpHealthcheckArgs{
    				Interval:    pulumi.Int(5),
    				Mode:        pulumi.String("https"),
    				Port:        pulumi.Int(443),
    				StrikesFail: pulumi.Int(3),
    				StrikesOk:   pulumi.Int(2),
    				Timeout:     pulumi.Int(3),
    				TlsSni:      pulumi.String("example.net"),
    				Uri:         pulumi.String("/health"),
    			},
    			ReverseDns: pulumi.String("example.net"),
    			Zone:       pulumi.String("ch-gva-2"),
    		})
    		if err != nil {
    			return err
    		}
    		return nil
    	})
    }
    
    package generated_program;
    
    import com.pulumi.Context;
    import com.pulumi.Pulumi;
    import com.pulumi.core.Output;
    import com.pulumi.exoscale.ElasticIp;
    import com.pulumi.exoscale.ElasticIpArgs;
    import com.pulumi.exoscale.inputs.ElasticIpHealthcheckArgs;
    import java.util.List;
    import java.util.ArrayList;
    import java.util.Map;
    import java.io.File;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    
    public class App {
        public static void main(String[] args) {
            Pulumi.run(App::stack);
        }
    
        public static void stack(Context ctx) {
            var myManagedElasticIp = new ElasticIp("myManagedElasticIp", ElasticIpArgs.builder()        
                .addressFamily("inet6")
                .healthcheck(ElasticIpHealthcheckArgs.builder()
                    .interval(5)
                    .mode("https")
                    .port(443)
                    .strikesFail(3)
                    .strikesOk(2)
                    .timeout(3)
                    .tlsSni("example.net")
                    .uri("/health")
                    .build())
                .reverseDns("example.net")
                .zone("ch-gva-2")
                .build());
    
        }
    }
    
    import pulumi
    import pulumiverse_exoscale as exoscale
    
    my_managed_elastic_ip = exoscale.ElasticIp("myManagedElasticIp",
        address_family="inet6",
        healthcheck=exoscale.ElasticIpHealthcheckArgs(
            interval=5,
            mode="https",
            port=443,
            strikes_fail=3,
            strikes_ok=2,
            timeout=3,
            tls_sni="example.net",
            uri="/health",
        ),
        reverse_dns="example.net",
        zone="ch-gva-2")
    
    import * as pulumi from "@pulumi/pulumi";
    import * as exoscale from "@pulumiverse/exoscale";
    
    const myManagedElasticIp = new exoscale.ElasticIp("myManagedElasticIp", {
        addressFamily: "inet6",
        healthcheck: {
            interval: 5,
            mode: "https",
            port: 443,
            strikesFail: 3,
            strikesOk: 2,
            timeout: 3,
            tlsSni: "example.net",
            uri: "/health",
        },
        reverseDns: "example.net",
        zone: "ch-gva-2",
    });
    
    resources:
      myManagedElasticIp:
        type: exoscale:ElasticIp
        properties:
          addressFamily: inet6
          healthcheck:
            interval: 5
            mode: https
            port: 443
            strikesFail: 3
            strikesOk: 2
            timeout: 3
            tlsSni: example.net
            uri: /health
          reverseDns: example.net
          zone: ch-gva-2
    

    Create ElasticIp Resource

    new ElasticIp(name: string, args: ElasticIpArgs, opts?: CustomResourceOptions);
    @overload
    def ElasticIp(resource_name: str,
                  opts: Optional[ResourceOptions] = None,
                  address_family: Optional[str] = None,
                  description: Optional[str] = None,
                  healthcheck: Optional[ElasticIpHealthcheckArgs] = None,
                  labels: Optional[Mapping[str, str]] = None,
                  reverse_dns: Optional[str] = None,
                  zone: Optional[str] = None)
    @overload
    def ElasticIp(resource_name: str,
                  args: ElasticIpArgs,
                  opts: Optional[ResourceOptions] = None)
    func NewElasticIp(ctx *Context, name string, args ElasticIpArgs, opts ...ResourceOption) (*ElasticIp, error)
    public ElasticIp(string name, ElasticIpArgs args, CustomResourceOptions? opts = null)
    public ElasticIp(String name, ElasticIpArgs args)
    public ElasticIp(String name, ElasticIpArgs args, CustomResourceOptions options)
    
    type: exoscale:ElasticIp
    properties: # The arguments to resource properties.
    options: # Bag of options to control resource's behavior.
    
    
    name string
    The unique name of the resource.
    args ElasticIpArgs
    The arguments to resource properties.
    opts CustomResourceOptions
    Bag of options to control resource's behavior.
    resource_name str
    The unique name of the resource.
    args ElasticIpArgs
    The arguments to resource properties.
    opts ResourceOptions
    Bag of options to control resource's behavior.
    ctx Context
    Context object for the current deployment.
    name string
    The unique name of the resource.
    args ElasticIpArgs
    The arguments to resource properties.
    opts ResourceOption
    Bag of options to control resource's behavior.
    name string
    The unique name of the resource.
    args ElasticIpArgs
    The arguments to resource properties.
    opts CustomResourceOptions
    Bag of options to control resource's behavior.
    name String
    The unique name of the resource.
    args ElasticIpArgs
    The arguments to resource properties.
    options CustomResourceOptions
    Bag of options to control resource's behavior.

    ElasticIp Resource Properties

    To learn more about resource properties and how to use them, see Inputs and Outputs in the Architecture and Concepts docs.

    Inputs

    The ElasticIp resource accepts the following input properties:

    Zone string
    ❗ The Exoscale Zone name.
    AddressFamily string
    ❗ The Elastic IP (EIP) address family (inet4 or inet6; default: inet4).
    Description string
    A free-form text describing the Elastic IP (EIP).
    Healthcheck Pulumiverse.Exoscale.Inputs.ElasticIpHealthcheck
    Healthcheck configuration for managed EIPs. It can not be added to an existing Unmanaged EIP.
    Labels Dictionary<string, string>
    A map of key/value labels.
    ReverseDns string
    Domain name for reverse DNS record.
    Zone string
    ❗ The Exoscale Zone name.
    AddressFamily string
    ❗ The Elastic IP (EIP) address family (inet4 or inet6; default: inet4).
    Description string
    A free-form text describing the Elastic IP (EIP).
    Healthcheck ElasticIpHealthcheckArgs
    Healthcheck configuration for managed EIPs. It can not be added to an existing Unmanaged EIP.
    Labels map[string]string
    A map of key/value labels.
    ReverseDns string
    Domain name for reverse DNS record.
    zone String
    ❗ The Exoscale Zone name.
    addressFamily String
    ❗ The Elastic IP (EIP) address family (inet4 or inet6; default: inet4).
    description String
    A free-form text describing the Elastic IP (EIP).
    healthcheck ElasticIpHealthcheck
    Healthcheck configuration for managed EIPs. It can not be added to an existing Unmanaged EIP.
    labels Map<String,String>
    A map of key/value labels.
    reverseDns String
    Domain name for reverse DNS record.
    zone string
    ❗ The Exoscale Zone name.
    addressFamily string
    ❗ The Elastic IP (EIP) address family (inet4 or inet6; default: inet4).
    description string
    A free-form text describing the Elastic IP (EIP).
    healthcheck ElasticIpHealthcheck
    Healthcheck configuration for managed EIPs. It can not be added to an existing Unmanaged EIP.
    labels {[key: string]: string}
    A map of key/value labels.
    reverseDns string
    Domain name for reverse DNS record.
    zone str
    ❗ The Exoscale Zone name.
    address_family str
    ❗ The Elastic IP (EIP) address family (inet4 or inet6; default: inet4).
    description str
    A free-form text describing the Elastic IP (EIP).
    healthcheck ElasticIpHealthcheckArgs
    Healthcheck configuration for managed EIPs. It can not be added to an existing Unmanaged EIP.
    labels Mapping[str, str]
    A map of key/value labels.
    reverse_dns str
    Domain name for reverse DNS record.
    zone String
    ❗ The Exoscale Zone name.
    addressFamily String
    ❗ The Elastic IP (EIP) address family (inet4 or inet6; default: inet4).
    description String
    A free-form text describing the Elastic IP (EIP).
    healthcheck Property Map
    Healthcheck configuration for managed EIPs. It can not be added to an existing Unmanaged EIP.
    labels Map<String>
    A map of key/value labels.
    reverseDns String
    Domain name for reverse DNS record.

    Outputs

    All input properties are implicitly available as output properties. Additionally, the ElasticIp resource produces the following output properties:

    Cidr string
    The Elastic IP (EIP) CIDR.
    Id string
    The provider-assigned unique ID for this managed resource.
    IpAddress string
    The Elastic IP (EIP) IPv4 or IPv6 address.
    Cidr string
    The Elastic IP (EIP) CIDR.
    Id string
    The provider-assigned unique ID for this managed resource.
    IpAddress string
    The Elastic IP (EIP) IPv4 or IPv6 address.
    cidr String
    The Elastic IP (EIP) CIDR.
    id String
    The provider-assigned unique ID for this managed resource.
    ipAddress String
    The Elastic IP (EIP) IPv4 or IPv6 address.
    cidr string
    The Elastic IP (EIP) CIDR.
    id string
    The provider-assigned unique ID for this managed resource.
    ipAddress string
    The Elastic IP (EIP) IPv4 or IPv6 address.
    cidr str
    The Elastic IP (EIP) CIDR.
    id str
    The provider-assigned unique ID for this managed resource.
    ip_address str
    The Elastic IP (EIP) IPv4 or IPv6 address.
    cidr String
    The Elastic IP (EIP) CIDR.
    id String
    The provider-assigned unique ID for this managed resource.
    ipAddress String
    The Elastic IP (EIP) IPv4 or IPv6 address.

    Look up Existing ElasticIp Resource

    Get an existing ElasticIp resource’s state with the given name, ID, and optional extra properties used to qualify the lookup.

    public static get(name: string, id: Input<ID>, state?: ElasticIpState, opts?: CustomResourceOptions): ElasticIp
    @staticmethod
    def get(resource_name: str,
            id: str,
            opts: Optional[ResourceOptions] = None,
            address_family: Optional[str] = None,
            cidr: Optional[str] = None,
            description: Optional[str] = None,
            healthcheck: Optional[ElasticIpHealthcheckArgs] = None,
            ip_address: Optional[str] = None,
            labels: Optional[Mapping[str, str]] = None,
            reverse_dns: Optional[str] = None,
            zone: Optional[str] = None) -> ElasticIp
    func GetElasticIp(ctx *Context, name string, id IDInput, state *ElasticIpState, opts ...ResourceOption) (*ElasticIp, error)
    public static ElasticIp Get(string name, Input<string> id, ElasticIpState? state, CustomResourceOptions? opts = null)
    public static ElasticIp get(String name, Output<String> id, ElasticIpState state, CustomResourceOptions options)
    Resource lookup is not supported in YAML
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    resource_name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    The following state arguments are supported:
    AddressFamily string
    ❗ The Elastic IP (EIP) address family (inet4 or inet6; default: inet4).
    Cidr string
    The Elastic IP (EIP) CIDR.
    Description string
    A free-form text describing the Elastic IP (EIP).
    Healthcheck Pulumiverse.Exoscale.Inputs.ElasticIpHealthcheck
    Healthcheck configuration for managed EIPs. It can not be added to an existing Unmanaged EIP.
    IpAddress string
    The Elastic IP (EIP) IPv4 or IPv6 address.
    Labels Dictionary<string, string>
    A map of key/value labels.
    ReverseDns string
    Domain name for reverse DNS record.
    Zone string
    ❗ The Exoscale Zone name.
    AddressFamily string
    ❗ The Elastic IP (EIP) address family (inet4 or inet6; default: inet4).
    Cidr string
    The Elastic IP (EIP) CIDR.
    Description string
    A free-form text describing the Elastic IP (EIP).
    Healthcheck ElasticIpHealthcheckArgs
    Healthcheck configuration for managed EIPs. It can not be added to an existing Unmanaged EIP.
    IpAddress string
    The Elastic IP (EIP) IPv4 or IPv6 address.
    Labels map[string]string
    A map of key/value labels.
    ReverseDns string
    Domain name for reverse DNS record.
    Zone string
    ❗ The Exoscale Zone name.
    addressFamily String
    ❗ The Elastic IP (EIP) address family (inet4 or inet6; default: inet4).
    cidr String
    The Elastic IP (EIP) CIDR.
    description String
    A free-form text describing the Elastic IP (EIP).
    healthcheck ElasticIpHealthcheck
    Healthcheck configuration for managed EIPs. It can not be added to an existing Unmanaged EIP.
    ipAddress String
    The Elastic IP (EIP) IPv4 or IPv6 address.
    labels Map<String,String>
    A map of key/value labels.
    reverseDns String
    Domain name for reverse DNS record.
    zone String
    ❗ The Exoscale Zone name.
    addressFamily string
    ❗ The Elastic IP (EIP) address family (inet4 or inet6; default: inet4).
    cidr string
    The Elastic IP (EIP) CIDR.
    description string
    A free-form text describing the Elastic IP (EIP).
    healthcheck ElasticIpHealthcheck
    Healthcheck configuration for managed EIPs. It can not be added to an existing Unmanaged EIP.
    ipAddress string
    The Elastic IP (EIP) IPv4 or IPv6 address.
    labels {[key: string]: string}
    A map of key/value labels.
    reverseDns string
    Domain name for reverse DNS record.
    zone string
    ❗ The Exoscale Zone name.
    address_family str
    ❗ The Elastic IP (EIP) address family (inet4 or inet6; default: inet4).
    cidr str
    The Elastic IP (EIP) CIDR.
    description str
    A free-form text describing the Elastic IP (EIP).
    healthcheck ElasticIpHealthcheckArgs
    Healthcheck configuration for managed EIPs. It can not be added to an existing Unmanaged EIP.
    ip_address str
    The Elastic IP (EIP) IPv4 or IPv6 address.
    labels Mapping[str, str]
    A map of key/value labels.
    reverse_dns str
    Domain name for reverse DNS record.
    zone str
    ❗ The Exoscale Zone name.
    addressFamily String
    ❗ The Elastic IP (EIP) address family (inet4 or inet6; default: inet4).
    cidr String
    The Elastic IP (EIP) CIDR.
    description String
    A free-form text describing the Elastic IP (EIP).
    healthcheck Property Map
    Healthcheck configuration for managed EIPs. It can not be added to an existing Unmanaged EIP.
    ipAddress String
    The Elastic IP (EIP) IPv4 or IPv6 address.
    labels Map<String>
    A map of key/value labels.
    reverseDns String
    Domain name for reverse DNS record.
    zone String
    ❗ The Exoscale Zone name.

    Supporting Types

    ElasticIpHealthcheck, ElasticIpHealthcheckArgs

    Mode string
    The healthcheck mode (tcp, http or https; may only be set at creation time).
    Port int
    The healthcheck target port (must be between 1 and 65535).
    Interval int
    The healthcheck interval (seconds; must be between 5 and 300; default: 10).
    StrikesFail int
    The number of failed healthcheck attempts before considering the target unhealthy (must be between 1 and 20; default: 2).
    StrikesOk int
    The number of successful healthcheck attempts before considering the target healthy (must be between 1 and 20; default: 3).
    Timeout int
    The time before considering a healthcheck probing failed (seconds; must be between 2 and 60; default: 3).
    TlsSkipVerify bool
    Disable TLS certificate verification for healthcheck in https mode (boolean; default: false).
    TlsSni string
    The healthcheck server name to present with SNI in https mode.
    Uri string
    The healthcheck target URI (required in http(s) modes).
    Mode string
    The healthcheck mode (tcp, http or https; may only be set at creation time).
    Port int
    The healthcheck target port (must be between 1 and 65535).
    Interval int
    The healthcheck interval (seconds; must be between 5 and 300; default: 10).
    StrikesFail int
    The number of failed healthcheck attempts before considering the target unhealthy (must be between 1 and 20; default: 2).
    StrikesOk int
    The number of successful healthcheck attempts before considering the target healthy (must be between 1 and 20; default: 3).
    Timeout int
    The time before considering a healthcheck probing failed (seconds; must be between 2 and 60; default: 3).
    TlsSkipVerify bool
    Disable TLS certificate verification for healthcheck in https mode (boolean; default: false).
    TlsSni string
    The healthcheck server name to present with SNI in https mode.
    Uri string
    The healthcheck target URI (required in http(s) modes).
    mode String
    The healthcheck mode (tcp, http or https; may only be set at creation time).
    port Integer
    The healthcheck target port (must be between 1 and 65535).
    interval Integer
    The healthcheck interval (seconds; must be between 5 and 300; default: 10).
    strikesFail Integer
    The number of failed healthcheck attempts before considering the target unhealthy (must be between 1 and 20; default: 2).
    strikesOk Integer
    The number of successful healthcheck attempts before considering the target healthy (must be between 1 and 20; default: 3).
    timeout Integer
    The time before considering a healthcheck probing failed (seconds; must be between 2 and 60; default: 3).
    tlsSkipVerify Boolean
    Disable TLS certificate verification for healthcheck in https mode (boolean; default: false).
    tlsSni String
    The healthcheck server name to present with SNI in https mode.
    uri String
    The healthcheck target URI (required in http(s) modes).
    mode string
    The healthcheck mode (tcp, http or https; may only be set at creation time).
    port number
    The healthcheck target port (must be between 1 and 65535).
    interval number
    The healthcheck interval (seconds; must be between 5 and 300; default: 10).
    strikesFail number
    The number of failed healthcheck attempts before considering the target unhealthy (must be between 1 and 20; default: 2).
    strikesOk number
    The number of successful healthcheck attempts before considering the target healthy (must be between 1 and 20; default: 3).
    timeout number
    The time before considering a healthcheck probing failed (seconds; must be between 2 and 60; default: 3).
    tlsSkipVerify boolean
    Disable TLS certificate verification for healthcheck in https mode (boolean; default: false).
    tlsSni string
    The healthcheck server name to present with SNI in https mode.
    uri string
    The healthcheck target URI (required in http(s) modes).
    mode str
    The healthcheck mode (tcp, http or https; may only be set at creation time).
    port int
    The healthcheck target port (must be between 1 and 65535).
    interval int
    The healthcheck interval (seconds; must be between 5 and 300; default: 10).
    strikes_fail int
    The number of failed healthcheck attempts before considering the target unhealthy (must be between 1 and 20; default: 2).
    strikes_ok int
    The number of successful healthcheck attempts before considering the target healthy (must be between 1 and 20; default: 3).
    timeout int
    The time before considering a healthcheck probing failed (seconds; must be between 2 and 60; default: 3).
    tls_skip_verify bool
    Disable TLS certificate verification for healthcheck in https mode (boolean; default: false).
    tls_sni str
    The healthcheck server name to present with SNI in https mode.
    uri str
    The healthcheck target URI (required in http(s) modes).
    mode String
    The healthcheck mode (tcp, http or https; may only be set at creation time).
    port Number
    The healthcheck target port (must be between 1 and 65535).
    interval Number
    The healthcheck interval (seconds; must be between 5 and 300; default: 10).
    strikesFail Number
    The number of failed healthcheck attempts before considering the target unhealthy (must be between 1 and 20; default: 2).
    strikesOk Number
    The number of successful healthcheck attempts before considering the target healthy (must be between 1 and 20; default: 3).
    timeout Number
    The time before considering a healthcheck probing failed (seconds; must be between 2 and 60; default: 3).
    tlsSkipVerify Boolean
    Disable TLS certificate verification for healthcheck in https mode (boolean; default: false).
    tlsSni String
    The healthcheck server name to present with SNI in https mode.
    uri String
    The healthcheck target URI (required in http(s) modes).

    Import

    An existing Elastic IP (EIP) may be imported by <ID>@<zone>

     $ pulumi import exoscale:index/elasticIp:ElasticIp \
    

    exoscale_elastic_ip.my_elastic_ip \

    f81d4fae-7dec-11d0-a765-00a0c91e6bf6@ch-gva-2

    Package Details

    Repository
    exoscale pulumiverse/pulumi-exoscale
    License
    Apache-2.0
    Notes
    This Pulumi package is based on the exoscale Terraform Provider.
    exoscale logo
    Exoscale v0.55.0 published on Monday, Jan 29, 2024 by Pulumiverse