type=page
status=published
title=copy-config
next=create-admin-object.html
prev=configure-managed-jobs.html
~~~~~~

= copy-config

[[copy-config-1]][[GSRFM00011]][[copy-config]]

== copy-config

Copies an existing named configuration to create another configuration

[[sthref107]]

=== Synopsis

[source]
----
asadmin [asadmin-options] copy-config [--help]
[--systemproperties (name=value)[:name=value]*]
source-configuration-name destination-configuration-name
----

[[sthref108]]

=== Description

The `copy-config` subcommand creates a named configuration in the
configuration of the domain administration server (DAS) by copying an
existing configuration. The new configuration is identical to the copied
configuration, except for any properties that you specify in the
`--systemproperties` option.

The `default-config` configuration is copied when a standalone sever
instance or standalone cluster is created.

This subcommand is supported in remote mode only.

[[sthref109]]

=== Options

asadmin-options::
  Options for the `asadmin` utility. For information about these
  options, see the link:asadmin.html#asadmin-1m[`asadmin`(1M)] help page.
`--help`::
`-?`::
  Displays the help text for the subcommand.
`--systemproperties`::
  Optional attribute name-value pairs for the configuration. These
  properties override port settings in the configuration.
+
  The following properties are available:
+
  `ASADMIN_LISTENER_PORT`;;
    This property specifies the port number of the HTTP port or HTTPS
    port through which the DAS connects to the instance to manage the
    instance. Valid values are 1-65535. On UNIX, creating sockets that
    listen on ports 1-1024 requires superuser privileges.
  `HTTP_LISTENER_PORT`;;
    This property specifies the port number of the port that is used to
    listen for HTTP requests. Valid values are 1-65535. On UNIX,
    creating sockets that listen on ports 1-1024 requires superuser
    privileges.
  `HTTP_SSL_LISTENER_PORT`;;
    This property specifies the port number of the port that is used to
    listen for HTTPS requests. Valid values are 1-65535. On UNIX,
    creating sockets that listen on ports 1-1024 requires superuser
    privileges.
  `IIOP_LISTENER_PORT`;;
    This property specifies the port number of the port that is used for
    IIOP connections. Valid values are 1-65535. On UNIX, creating
    sockets that listen on ports 1-1024 requires superuser privileges.
  `IIOP_SSL_LISTENER_PORT`;;
    This property specifies the port number of the port that is used for
    secure IIOP connections. Valid values are 1-65535. On UNIX, creating
    sockets that listen on ports 1-1024 requires superuser privileges.
  `IIOP_SSL_MUTUALAUTH_PORT`;;
    This property specifies the port number of the port that is used for
    secure IIOP connections with client authentication. Valid values are
    1-65535. On UNIX, creating sockets that listen on ports 1-1024
    requires superuser privileges.
  `JAVA_DEBUGGER_PORT`;;
    This property specifies the port number of the port that is used for
    connections to the Java Platform Debugger Architecture (JPDA)
    (http://www.oracle.com/technetwork/java/javase/tech/jpda-141715.html)
    debugger. Valid values are 1-65535. On UNIX, creating sockets that
    listen on ports 1-1024 requires superuser privileges.
  `JMS_PROVIDER_PORT`;;
    This property specifies the port number for the Java Message Service
    provider. Valid values are 1-65535. On UNIX, creating sockets that
    listen on ports 1-1024 requires superuser privileges.
  `JMX_SYSTEM_CONNECTOR_PORT`;;
    This property specifies the port number on which the JMX connector
    listens. Valid values are 1-65535. On UNIX, creating sockets that
    listen on ports 1-1024 requires superuser privileges.
  `OSGI_SHELL_TELNET_PORT`;;
    This property specifies the port number of the port that is used for
    connections to the Apache Felix Remote Shell
    (`http://felix.apache.org/site/apache-felix-remote-shell.html`).
    This shell uses the Felix shell service to interact with the OSGi
    module management subsystem. Valid values are 1-65535. On UNIX,
    creating sockets that listen on ports 1-1024 requires superuser
    privileges.

[[sthref110]]

=== Operands

source-configuration-name::
  The name of the configuration that you are copying.
destination-configuration-name::
  The name of the configuration that you are creating by copying the
  source configuration.
+
  The name must meet the following requirements:
+
  * The name may contain only ASCII characters.
  * The name must start with a letter, a number, or an underscore.
  * The name may contain only the following characters:
  ** Lowercase letters
  ** Uppercase letters
  ** Numbers
  ** Hyphen
  ** Period
  ** Underscore
  * The name must be unique in the domain and must not be the name of a
  another named configuration, a cluster, a {productName} instance ,
  or a node.
  * The name must not be `domain`, `server`, or any other keyword that
  is reserved by {productName}.

[[sthref111]]

=== Examples

[[GSRFM456]][[sthref112]]

==== Example 1   Copying a Configuration

This example copies the `default-config` configuration to the
`pmdsaconfig` configuration, overriding the settings for the following
ports:

* HTTP listener port
* HTTPS listener port

[source]
----
asadmin> copy-config
--systemproperties HTTP_LISTENER_PORT=2000:HTTP_SSL_LISTENER_PORT=3000
default-config pmdsaconfig

Command copy-config executed successfully.
----

[[sthref113]]

=== Exit Status

0::
  command executed successfully
1::
  error in executing the command

[[sthref114]]

=== See Also

link:asadmin.html#asadmin-1m[`asadmin`(1M)]

link:delete-config.html#delete-config-1[`delete-config`(1)],
link:list-configs.html#list-configs-1[`list-configs`(1)]


