Module: Vcloud::EdgeGateway::Schema

Defined in:
lib/vcloud/edge_gateway/schema/nat_service.rb,
lib/vcloud/edge_gateway/schema/edge_gateway.rb,
lib/vcloud/edge_gateway/schema/firewall_service.rb,
lib/vcloud/edge_gateway/schema/load_balancer_service.rb

Constant Summary collapse

NAT_RULE =
{
  type: Hash,
  internals: {
    id: {type: 'string_or_number', required: false},
    enabled: {type: 'boolean', required: false},
    rule_type: { type: 'enum', required: true, acceptable_values: ['SNAT', 'DNAT' ]},
    description: {type: 'string', required: false, allowed_empty: true},
    network_id: {type: 'string', required: true},
    original_ip: {type: 'ip_address_range', required: true},
    original_port: {type: 'string', required: false},
    translated_ip: {type: 'ip_address_range', required: true},
    translated_port: {type: 'string', required: false},
    protocol: {type: 'enum', required: false, acceptable_values: ['tcp', 'udp', 'icmp', 'tcpudp', 'any']},
  }
}
NAT_SERVICE =
{
  type: Hash,
  allowed_empty: true,
  required: false,
  internals: {
    enabled: {type: 'boolean', required: false},
    nat_rules: {
      type: Array,
      required: false,
      allowed_empty: true,
      each_element_is: NAT_RULE
    }
  }
}
EDGE_GATEWAY_SERVICES =
{
    type: 'hash',
    allowed_empty: false,
    internals: {
        gateway: { type: 'string' },
        firewall_service: FIREWALL_SERVICE,
        nat_service: NAT_SERVICE,
        load_balancer_service: LOAD_BALANCER_SERVICE,
    }
}
FIREWALL_RULE =
{
    type: Hash,
    internals: {
        id: { type: 'string_or_number', required: false},
        enabled: { type: 'boolean', required: false},
        match_on_translate: { type: 'boolean', required: false},
        description: { type: 'string', required: false, allowed_empty: true},
        policy: { type: 'enum', required: false, acceptable_values: ['allow', 'drop'] },
        source_ip: { type: 'ip_address_range', required: true },
        destination_ip: { type: 'ip_address_range', required: true },
        source_port_range: { type: 'string', required: false },
        destination_port_range: { type: 'string', required: false },
        enable_logging: { type: 'boolean', required: false },
        protocols: { type: 'enum', required: false, acceptable_values: ['tcp', 'udp', 'icmp', 'tcp+udp', 'any']},
    }
}
FIREWALL_SERVICE =
{
    type: Hash,
    allowed_empty: true,
    required: false,
    internals: {
        enabled: { type: 'boolean', required: false},
        policy: { type: 'enum', required: false, acceptable_values: ['allow', 'drop'] },
        log_default_action: { type: 'boolean', required: false},
        firewall_rules: {
            type: Array,
            required: false,
            allowed_empty: true,
            each_element_is: FIREWALL_RULE
        }
    }
}
POOL_MEMBER_SERVICE_PORT_ENTRY =
{
  type: Hash,
  required: false,
  internals: {
    port: { type: 'string_or_number', required: false },
    health_check_port: { type: 'string_or_number', required: false },
  }
}
LOAD_BALANCER_MEMBER_ENTRY =
{
  type: Hash,
  internals: {
    ip_address: { type: 'ip_address', required: true },
    weight:     { type: 'string_or_number', required: false },
    service_port: {
      type: 'hash',
      required: false,
      internals: {
        http:  POOL_MEMBER_SERVICE_PORT_ENTRY,
        https: POOL_MEMBER_SERVICE_PORT_ENTRY,
        tcp:   POOL_MEMBER_SERVICE_PORT_ENTRY,
      },
    },
  },
}
POOL_SERVICE_SECTION =
{
  type: Hash,
  required: false,
  allowed_empty: true,
  internals: {
    enabled: { type: 'boolean', required: false },
    port:    { type: 'string_or_number', required: false },
    algorithm: { type: 'enum', required: false,
      acceptable_values: [ 'ROUND_ROBIN', 'IP_HASH', 'URI', 'LEAST_CONNECTED' ]},
    health_check: {
      type: 'hash',
      required: false,
      internals: {
        port: { type: 'string_or_number', required: false },
        uri: { type: 'string', required: false },
        protocol: { type: 'enum', required: false,
          acceptable_values: [ 'HTTP', 'SSL', 'TCP' ] },
        health_threshold: { type: 'string_or_number', required: false },
        unhealth_threshold: { type: 'string_or_number', required: false },
        interval: { type: 'string_or_number', required: false },
        timeout: { type: 'string_or_number', required: false },
      },
    },
  }
}
LOAD_BALANCER_POOL_ENTRY =
{
  type: Hash,
  internals: {
    name: { type: 'string', required: true },
    description: { type: 'string', required: false },
    service: {
      type: 'hash',
      required: false,
      internals: {
        http:  POOL_SERVICE_SECTION,
        https: POOL_SERVICE_SECTION,
        tcp:   POOL_SERVICE_SECTION,
      }
    },
    members: {
      type: Array,
      required: true,
      allowed_empty: false,
      each_element_is: LOAD_BALANCER_MEMBER_ENTRY,
    }
  }
}
VIRTUAL_SERVER_SERVICE_PROFILE_TCP_ENTRY =
{
  type: Hash,
  required: false,
  allowed_empty: true,
  internals: {
    enabled: { type: 'boolean', required: false },
    port: { type: 'string_or_number', required: false },
  }
}
VIRTUAL_SERVER_SERVICE_PROFILE_HTTPS_ENTRY =
{
  type: Hash,
  required: false,
  allowed_empty: true,
  internals: {
    enabled: { type: 'boolean', required: false },
    port: { type: 'string_or_number', required: false },
    persistence: {
      type: 'hash',
      required: false,
      internals: {
        method: {
          type: 'enum',
          required: false,
          acceptable_values: [ 'SSL_SESSION_ID' ],
        },
      },
    },
  }
}
VIRTUAL_SERVER_SERVICE_PROFILE_HTTP_ENTRY =
{
  type: Hash,
  required: false,
  allowed_empty: true,
  internals: {
    enabled: { type: 'boolean', required: false },
    port: { type: 'string_or_number', required: false },
    persistence: {
      type: 'hash',
      required: false,
      internals: {
        method: {
          type: 'enum',
          required: false,
          acceptable_values: [ 'COOKIE' ],
        },
        cookie_name: { type: 'string', required: true },
        cookie_mode: {
          type: 'enum',
          required: true,
          acceptable_values: [ 'APP', 'PREFIX', 'INSERT' ]
        },
      },
    },
  }
}
LOAD_BALANCER_VIRTUAL_SERVER_ENTRY =
{
  type: Hash,
  internals: {
    enabled: { type: 'boolean', required: false },
    name:    { type: 'string', required: true },
    description: { type: 'string', required: false },
    ip_address: { type: 'ip_address', required: true },
    network: { type: 'string', required: true },
    pool: { type: 'string', required: true },
    logging: { type: 'boolean', required: false },
    service_profiles: {
      type: 'hash',
      required: false,
      internals: {
        http:  VIRTUAL_SERVER_SERVICE_PROFILE_HTTP_ENTRY,
        https: VIRTUAL_SERVER_SERVICE_PROFILE_HTTPS_ENTRY,
        tcp:   VIRTUAL_SERVER_SERVICE_PROFILE_TCP_ENTRY,
      },
    },
  }
}
LOAD_BALANCER_SERVICE =
{
  type: Hash,
  allowed_empty: true,
  required: false,
  internals: {
    enabled: { type: 'boolean', required: false },
    pools: {
      type: Array,
      required: false,
      allowed_empty: true,
      each_element_is: LOAD_BALANCER_POOL_ENTRY,
    },
    virtual_servers: {
      type: Array,
      required: false,
      allowed_empty: true,
      each_element_is: LOAD_BALANCER_VIRTUAL_SERVER_ENTRY,
    },
  }
}