#
# Copyright (c) 2011, 2018 Oracle and/or its affiliates. All rights reserved.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0, which is available at
# http://www.eclipse.org/legal/epl-2.0.
#
# This Source Code may also be made available under the following Secondary
# Licenses when the conditions for such availability set forth in the
# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
# version 2 with the GNU Classpath Exception, which is available at
# https://www.gnu.org/software/classpath/license.html.
#
# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
#

UnableToSetPropertyInLbconfig=Unable to set property {0} in lbconfig with name {1}
LbConfigIsInUse=LB configuration [{0}] is in use by another load balancer.
DeleteLbConfigFailed=Unable to remove lb config {0}.
RequiredTargetOrConfig=CLI251: Either option --target or operand config_name is required for this command.
LbConfigExists=Load balancer configuration [{0}] already exists.
InvalidTarget=Invalid argument. Target [{0}] is not a cluster or stand alone server instance.
LbConfigNotEmpty=Load balancer configuration [{0}] contains server refs or clusters refs. It must be empty in order to be removed.
LbConfigsCreationFailed=Creation of parent element lb-configs failed

create.http.lb.config.command.usagetext=create-http-lb-config\n\t[--responsetimeout <responsetimeout(default:60)>]\n\t[--monitor <monitor(default:false)>]\n\t[--httpsrouting <httpsrouting(default:false)>]\n\t[--property (name=value)[:name=value]*]\n\t[--routecookie <routecookie(default:true)>]\n\t[--reloadinterval <reloadinterval(default:60)>]\n\t[-?|--help[=<help(default:false)>]] --target <target> | name

http_lb_admin.LbConfigCreated=EEADM0202:Load balancer configuration {0} created.
http_lb_admin.LbConfigDeleted=EEADM0203:Load balancer configuration {0} deleted.

lbconfig.invalid.name=Invalid lb-config name. The name must start with a letter, number or underscore and may contain only letters, numbers, and these characters: hyphen, period, underscore, hash and semicolon.
