From 95aef332cc851f91bafb9af7bf5f0f682bb566ce Mon Sep 17 00:00:00 2001 From: anthony Date: Wed, 23 Jan 2013 11:08:24 -0800 Subject: [PATCH 01/85] CLOUDSTACK-737, allow to add security group enabled networks in security group enabled zone --- .../ConfigurationManagerImpl.java | 10 +++--- .../consoleproxy/ConsoleProxyManagerImpl.java | 31 +++++++++++------- .../SecondaryStorageManagerImpl.java | 32 ++++++++++++------- 3 files changed, 44 insertions(+), 29 deletions(-) diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index df6642af9ca..f976fd204dc 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -1526,13 +1526,11 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura // check if zone has necessary trafficTypes before enabling try { PhysicalNetwork mgmtPhyNetwork; - if (NetworkType.Advanced == zone.getNetworkType()) { - // zone should have a physical network with public and management traffiType + // zone should have a physical network with management traffiType + mgmtPhyNetwork = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Management); + if (NetworkType.Advanced == zone.getNetworkType() && ! zone.isSecurityGroupEnabled() ) { + // advanced zone without SG should have a physical network with public Thpe _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Public); - mgmtPhyNetwork = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Management); - } else { - // zone should have a physical network with management traffiType - mgmtPhyNetwork = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Management); } try { diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index 6b2d8ad8e42..2d104978223 100755 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -756,19 +756,28 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx DataCenterDeployment plan = new DataCenterDeployment(dataCenterId); - TrafficType defaultTrafficType = TrafficType.Public; - if (dc.getNetworkType() == NetworkType.Basic || dc.isSecurityGroupEnabled()) { - defaultTrafficType = TrafficType.Guest; + NetworkVO defaultNetwork = null; + if (dc.getNetworkType() == NetworkType.Advanced && dc.isSecurityGroupEnabled()) { + List networks = _networkDao.listByZoneSecurityGroup(dataCenterId); + if (networks == null || networks.size() == 0) { + throw new CloudRuntimeException("Can not found security enabled network in SG Zone " + dc); + } + defaultNetwork = networks.get(0); + } else { + TrafficType defaultTrafficType = TrafficType.Public; + if (dc.getNetworkType() == NetworkType.Basic || dc.isSecurityGroupEnabled()) { + defaultTrafficType = TrafficType.Guest; + } + List defaultNetworks = _networkDao.listByZoneAndTrafficType(dataCenterId, defaultTrafficType); + + // api should never allow this situation to happen + if (defaultNetworks.size() != 1) { + throw new CloudRuntimeException("Found " + defaultNetworks.size() + " networks of type " + + defaultTrafficType + " when expect to find 1"); + } + defaultNetwork = defaultNetworks.get(0); } - List defaultNetworks = _networkDao.listByZoneAndTrafficType(dataCenterId, defaultTrafficType); - - if (defaultNetworks.size() != 1) { - throw new CloudRuntimeException("Found " + defaultNetworks.size() + " networks of type " + defaultTrafficType + " when expect to find 1"); - } - - NetworkVO defaultNetwork = defaultNetworks.get(0); - List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemControlNetwork, NetworkOffering.SystemManagementNetwork); List> networks = new ArrayList>(offerings.size() + 1); NicProfile defaultNic = new NicProfile(); diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java index e4208811f23..b53ecd3293d 100755 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java @@ -537,19 +537,27 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V DataCenterDeployment plan = new DataCenterDeployment(dataCenterId); DataCenter dc = _dcDao.findById(plan.getDataCenterId()); - TrafficType defaultTrafficType = TrafficType.Public; - if (dc.getNetworkType() == NetworkType.Basic || dc.isSecurityGroupEnabled()) { - defaultTrafficType = TrafficType.Guest; + NetworkVO defaultNetwork = null; + if (dc.getNetworkType() == NetworkType.Advanced && dc.isSecurityGroupEnabled()) { + List networks = _networkDao.listByZoneSecurityGroup(dataCenterId); + if (networks == null || networks.size() == 0) { + throw new CloudRuntimeException("Can not found security enabled network in SG Zone " + dc); + } + defaultNetwork = networks.get(0); + } else { + TrafficType defaultTrafficType = TrafficType.Public; + + if (dc.getNetworkType() == NetworkType.Basic || dc.isSecurityGroupEnabled()) { + defaultTrafficType = TrafficType.Guest; + } + List defaultNetworks = _networkDao.listByZoneAndTrafficType(dataCenterId, defaultTrafficType); + // api should never allow this situation to happen + if (defaultNetworks.size() != 1) { + throw new CloudRuntimeException("Found " + defaultNetworks.size() + " networks of type " + + defaultTrafficType + " when expect to find 1"); + } + defaultNetwork = defaultNetworks.get(0); } - - List defaultNetworks = _networkDao.listByZoneAndTrafficType(dataCenterId, defaultTrafficType); - - //api should never allow this situation to happen - if (defaultNetworks.size() != 1) { - throw new CloudRuntimeException("Found " + defaultNetworks.size() + " networks of type " + defaultTrafficType + " when expect to find 1"); - } - - NetworkVO defaultNetwork = defaultNetworks.get(0); List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork, NetworkOfferingVO.SystemManagementNetwork, NetworkOfferingVO.SystemStorageNetwork); List> networks = new ArrayList>(offerings.size() + 1); From d7201dfe1f49fb75054e1f0b6922ed21446ad130 Mon Sep 17 00:00:00 2001 From: anthony Date: Thu, 24 Jan 2013 17:26:51 -0800 Subject: [PATCH 02/85] CLOUDSTACK-737 add xenserver support in UI only XenServer and KVM clusters are allowed in security enabled zone. only shared security enabled networks are allowed in security enabled zone. --- .../src/com/cloud/network/NetworkManagerImpl.java | 15 +++++++++------ .../com/cloud/resource/ResourceManagerImpl.java | 6 ++++++ ui/scripts/zoneWizard.js | 1 - 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index bb60dcfcdc8..b3273919002 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -1870,13 +1870,16 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { } else if (zone.getNetworkType() == NetworkType.Advanced) { if (zone.isSecurityGroupEnabled()) { - // Only Account specific Isolated network with sourceNat service disabled are allowed in security group + // Only shared network with sourceNat service disabled are allowed in security group // enabled zone - boolean allowCreation = (ntwkOff.getGuestType() == GuestType.Isolated - && !_networkModel.areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat)); - if (!allowCreation) { - throw new InvalidParameterValueException("Only Account specific Isolated network with sourceNat " + - "service disabled are allowed in security group enabled zone"); + if ( ntwkOff.getGuestType() != GuestType.Shared ){ + throw new InvalidParameterValueException("Only shared guest network can be created in security group enabled zone"); + } + if ( _networkModel.areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat)) { + throw new InvalidParameterValueException("Service SourceNat is not allowed in security group enabled zone"); + } + if ( _networkModel.areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SecurityGroup)) { + throw new InvalidParameterValueException("network must have SecurityGroup provider in security group enabled zone"); } } diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java index f82424a10c2..5817d4d827e 100755 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -388,6 +388,12 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma throw new InvalidParameterValueException("Unable to resolve " + cmd.getHypervisor() + " to a supported "); } + if (zone.isSecurityGroupEnabled()) { + if( hypervisorType != HypervisorType.KVM && hypervisorType != HypervisorType.XenServer ) { + throw new InvalidParameterValueException("Don't support hypervisor type " + hypervisorType + " in advanced security enabled zone"); + } + } + Cluster.ClusterType clusterType = null; if (cmd.getClusterType() != null && !cmd.getClusterType().isEmpty()) { clusterType = Cluster.ClusterType.valueOf(cmd.getClusterType()); diff --git a/ui/scripts/zoneWizard.js b/ui/scripts/zoneWizard.js index 26838a173c3..141cd6dd24a 100755 --- a/ui/scripts/zoneWizard.js +++ b/ui/scripts/zoneWizard.js @@ -373,7 +373,6 @@ var nonSupportedHypervisors = {}; if(args.context.zones[0]['network-model'] == "Advanced" && args.context.zones[0]['zone-advanced-sg-enabled'] == "on") { firstOption = "KVM"; - nonSupportedHypervisors["XenServer"] = 1; //to developers: comment this line if you need to test Advanced SG-enabled zone with XenServer hypervisor nonSupportedHypervisors["VMware"] = 1; nonSupportedHypervisors["BareMetal"] = 1; nonSupportedHypervisors["Ovm"] = 1; From 65210f4e7ee62b237ccdd8d853553e7c990f19c8 Mon Sep 17 00:00:00 2001 From: Anthony Xu Date: Thu, 31 Jan 2013 15:45:52 -0800 Subject: [PATCH 03/85] CLOUDSTACK-737 support multiple NICs in Security group in java side --- .../com/cloud/network/NetworkManagerImpl.java | 2 +- .../src/com/cloud/vm/UserVmManagerImpl.java | 82 +++++-------------- 2 files changed, 22 insertions(+), 62 deletions(-) diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index b3273919002..da0a560938b 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -1878,7 +1878,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { if ( _networkModel.areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat)) { throw new InvalidParameterValueException("Service SourceNat is not allowed in security group enabled zone"); } - if ( _networkModel.areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SecurityGroup)) { + if ( ! _networkModel.areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SecurityGroup)) { throw new InvalidParameterValueException("network must have SecurityGroup provider in security group enabled zone"); } } diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 58910562beb..8ceee383028 100644 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2048,80 +2048,41 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager Account caller = UserContext.current().getCaller(); List networkList = new ArrayList(); - boolean isSecurityGroupEnabledNetworkUsed = false; boolean isVmWare = (template.getHypervisorType() == HypervisorType.VMware || (hypervisor != null && hypervisor == HypervisorType.VMware)); + if (isVmWare) { + throw new InvalidParameterValueException("Security group feature is not supported for vmWare hypervisor"); + } //Verify that caller can perform actions in behalf of vm owner _accountMgr.checkAccess(caller, null, true, owner); - - // If no network is specified, find system security group enabled network if (networkIdList == null || networkIdList.isEmpty()) { - Network networkWithSecurityGroup = _networkModel.getNetworkWithSecurityGroupEnabled(zone.getId()); - if (networkWithSecurityGroup == null) { - throw new InvalidParameterValueException("No network with security enabled is found in zone id=" + zone.getId()); - } - - networkList.add(_networkDao.findById(networkWithSecurityGroup.getId())); - isSecurityGroupEnabledNetworkUsed = true; - - } else if (securityGroupIdList != null && !securityGroupIdList.isEmpty()) { - if (isVmWare) { - throw new InvalidParameterValueException("Security group feature is not supported for vmWare hypervisor"); - } - // Only one network can be specified, and it should be security group enabled - if (networkIdList.size() > 1) { - throw new InvalidParameterValueException("Only support one network per VM if security group enabled"); - } - - NetworkVO network = _networkDao.findById(networkIdList.get(0).longValue()); - + throw new InvalidParameterValueException("need to specify networkIDs"); + } + // Verify that all the networks are Shared/Guest; can't create combination of SG enabled and disabled networks + for (Long networkId : networkIdList) { + NetworkVO network = _networkDao.findById(networkId); if (network == null) { throw new InvalidParameterValueException("Unable to find network by id " + networkIdList.get(0).longValue()); } - if (!_networkModel.isSecurityGroupSupportedInNetwork(network)) { - throw new InvalidParameterValueException("Network is not security group enabled: " + network.getId()); - } + boolean isSecurityGroupEnabled = _networkModel.isSecurityGroupSupportedInNetwork(network); + if ( ! isSecurityGroupEnabled) { + throw new InvalidParameterValueException("Only support Security Group enabled networks in Security enabled zone, network " + network.getUuid() + " doesn't support security group "); + } - networkList.add(network); - isSecurityGroupEnabledNetworkUsed = true; - - } else { - // Verify that all the networks are Shared/Guest; can't create combination of SG enabled and disabled networks - for (Long networkId : networkIdList) { - NetworkVO network = _networkDao.findById(networkId); - - if (network == null) { - throw new InvalidParameterValueException("Unable to find network by id " + networkIdList.get(0).longValue()); - } - - boolean isSecurityGroupEnabled = _networkModel.isSecurityGroupSupportedInNetwork(network); - if (isSecurityGroupEnabled) { - if (networkIdList.size() > 1) { - throw new InvalidParameterValueException("Can't create a vm with multiple networks one of" + - " which is Security Group enabled"); - } - - isSecurityGroupEnabledNetworkUsed = true; - } - - if (!(network.getTrafficType() == TrafficType.Guest && network.getGuestType() == Network.GuestType.Shared)) { - throw new InvalidParameterValueException("Can specify only Shared Guest networks when" + + if (!(network.getTrafficType() == TrafficType.Guest && network.getGuestType() == Network.GuestType.Shared)) { + throw new InvalidParameterValueException("Can specify only Shared Guest networks when" + " deploy vm in Advance Security Group enabled zone"); - } - - // Perform account permission check - if (network.getAclType() == ACLType.Account) { - _accountMgr.checkAccess(caller, AccessType.UseNetwork, false, network); - } - networkList.add(network); } - } + // Perform account permission check + if (network.getAclType() == ACLType.Account) { + _accountMgr.checkAccess(caller, AccessType.UseNetwork, false, network); + } + networkList.add(network); + } // if network is security group enabled, and no security group is specified, then add the default security group automatically - if (isSecurityGroupEnabledNetworkUsed && !isVmWare && _networkModel.canAddDefaultSecurityGroup()) { - - //add the default securityGroup only if no security group is specified + if ( _networkModel.canAddDefaultSecurityGroup()) { if(securityGroupIdList == null || securityGroupIdList.isEmpty()){ if (securityGroupIdList == null) { securityGroupIdList = new ArrayList(); @@ -2140,7 +2101,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } } } - return createVirtualMachine(zone, serviceOffering, template, hostName, displayName, owner, diskOfferingId, diskSize, networkList, securityGroupIdList, group, userData, sshKeyPair, hypervisor, caller, requestedIps, defaultIp, keyboard); } From 8a86d08fe307719e50d28d61d8e9025e56ab27da Mon Sep 17 00:00:00 2001 From: Anthony Xu Date: Mon, 4 Feb 2013 17:09:06 -0800 Subject: [PATCH 04/85] CLOUDSTACK-737 Security Group script assume there is only one nic per VM, it is a big task to support multiple NICs, may seperate that as another project --- server/src/com/cloud/vm/UserVmManagerImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 8ceee383028..7a139f418a8 100644 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2058,6 +2058,9 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (networkIdList == null || networkIdList.isEmpty()) { throw new InvalidParameterValueException("need to specify networkIDs"); } + if (networkIdList.size() > 1 ) { + throw new InvalidParameterValueException("VM can only be on one network in Zone with Security group enabled zone"); + } // Verify that all the networks are Shared/Guest; can't create combination of SG enabled and disabled networks for (Long networkId : networkIdList) { NetworkVO network = _networkDao.findById(networkId); From a996e43bbd259867d2a7a69231978d9ba8d12e13 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Wed, 6 Feb 2013 20:23:53 +0100 Subject: [PATCH 05/85] Summary: Document the procedure for TCP listening of libvirt on Ubuntu 12.04 Detail: This is now controlled by a variable in /etc/default/libvirt-bin BUG-ID: CLOUDSTACK-1150 Bugfix-for: Reviewed-by: Wido den Hollander Reported-by: Logan McNaughton Signed-off-by: Wido den Hollander 1360178633 +0100 --- docs/en-US/hypervisor-host-install-libvirt.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/en-US/hypervisor-host-install-libvirt.xml b/docs/en-US/hypervisor-host-install-libvirt.xml index 8ba2fe99a2a..4649d8522db 100644 --- a/docs/en-US/hypervisor-host-install-libvirt.xml +++ b/docs/en-US/hypervisor-host-install-libvirt.xml @@ -40,11 +40,11 @@ On RHEL or CentOS modify /etc/sysconfig/libvirtd: Uncomment the following line: #LIBVIRTD_ARGS="--listen" - On Ubuntu: modify /etc/init/libvirt-bin.conf - Change the following line (at the end of the file): - exec /usr/sbin/libvirtd -d - to (just add -l) - exec /usr/sbin/libvirtd -d -l + On Ubuntu: modify /etc/default/libvirt-bin + Add "-l" to the following line:: + libvirtd_opts="-d" + so it looks like: + libvirtd_opts="-d -l" Restart libvirt From 5af6d16c5d6b046be911ed369919a0d9bba10d62 Mon Sep 17 00:00:00 2001 From: Hugo Trippaers Date: Wed, 6 Feb 2013 22:44:56 +0100 Subject: [PATCH 06/85] Summary: fixup spec file Remove duplicate entries in the config dir Fix directory permisisons of some directories Remove the scripts from the webapp as they are packaged inside the cloudstack-common package --- packaging/centos63/cloud.spec | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/packaging/centos63/cloud.spec b/packaging/centos63/cloud.spec index 8a296877f52..fd5b2a5dba5 100644 --- a/packaging/centos63/cloud.spec +++ b/packaging/centos63/cloud.spec @@ -217,6 +217,10 @@ install -D client/target/utilities/bin/cloud-update-xenserver-licenses ${RPM_BUI cp -r client/target/utilities/scripts/db/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/setup cp -r client/target/cloud-client-ui-4.1.0-SNAPSHOT/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapps/client +# Don't package the scripts in the management webapp +rm -rf {RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapps/WEB-INF/classes/scripts +rm -rf {RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapps/WEB-INF/classes/vms + for name in db.properties log4j-cloud.xml tomcat6-nonssl.conf tomcat6-ssl.conf server-ssl.xml server-nonssl.xml \ catalina.policy catalina.properties db-enc.properties classpath.conf tomcat-users.xml web.xml ; do mv ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapps/client/WEB-INF/classes/$name \ @@ -319,11 +323,19 @@ fi %dir %attr(0770,root,cloud) %{_localstatedir}/log/%{name}/agent %dir %attr(0770,root,cloud) %{_localstatedir}/log/%{name}/awsapi %config(noreplace) %{_sysconfdir}/sysconfig/%{name}-management -%config(noreplace) %{_sysconfdir}/%{name}/management %config(noreplace) %attr(0640,root,cloud) %{_sysconfdir}/%{name}/management/db.properties %config(noreplace) %{_sysconfdir}/%{name}/management/log4j-cloud.xml %config(noreplace) %{_sysconfdir}/%{name}/management/tomcat6-nonssl.conf %config(noreplace) %{_sysconfdir}/%{name}/management/tomcat6-ssl.conf +%config(noreplace) %{_sysconfdir}/%{name}/management/Catalina/localhost/client/context.xml +%config(noreplace) %{_sysconfdir}/%{name}/management/catalina.policy +%config(noreplace) %{_sysconfdir}/%{name}/management/catalina.properties +%config(noreplace) %{_sysconfdir}/%{name}/management/classpath.conf +%config(noreplace) %{_sysconfdir}/%{name}/management/db-enc.properties +%config(noreplace) %{_sysconfdir}/%{name}/management/server-nonssl.xml +%config(noreplace) %{_sysconfdir}/%{name}/management/server-ssl.xml +%config(noreplace) %{_sysconfdir}/%{name}/management/tomcat-users.xml +%config(noreplace) %{_sysconfdir}/%{name}/management/web.xml %attr(0755,root,root) %{_initrddir}/%{name}-management %attr(0755,root,root) %{_bindir}/%{name}-setup-management %attr(0755,root,root) %{_bindir}/%{name}-update-xenserver-licenses @@ -364,10 +376,13 @@ fi %doc NOTICE %files common +%dir %attr(0755,root,root) %{_libdir}/python2.6/site-packages/cloudutils +%dir %attr(0755,root,root) %{_datadir}/%{name}-common/vms %attr(0755,root,root) %{_datadir}/%{name}-common/scripts -%attr(0644,root,root) %{_datadir}/%{name}-common/vms +%attr(0644, root, root) %{_datadir}/%{name}-common/vms/systemvm.iso +%attr(0644, root, root) %{_datadir}/%{name}-common/vms/systemvm.zip %attr(0644,root,root) %{_libdir}/python2.6/site-packages/cloud_utils.py -%attr(0644,root,root) %{_libdir}/python2.6/site-packages/cloudutils +%attr(0644,root,root) %{_libdir}/python2.6/site-packages/cloudutils/* %doc LICENSE %doc NOTICE From 3d1989c10301978af4ba68f093138cfbe42de63b Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Wed, 6 Feb 2013 13:57:31 -0800 Subject: [PATCH 07/85] IPv6: CLOUDSTACK-1141: Fix reboot router with IPv6 assigned VM --- server/src/com/cloud/vm/dao/UserVmDaoImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/src/com/cloud/vm/dao/UserVmDaoImpl.java b/server/src/com/cloud/vm/dao/UserVmDaoImpl.java index 93780b155ca..f2fc10bbaa4 100755 --- a/server/src/com/cloud/vm/dao/UserVmDaoImpl.java +++ b/server/src/com/cloud/vm/dao/UserVmDaoImpl.java @@ -285,7 +285,9 @@ public class UserVmDaoImpl extends GenericDaoBase implements Use if (UserVmSearch == null) { SearchBuilder nicSearch = _nicDao.createSearchBuilder(); nicSearch.and("networkId", nicSearch.entity().getNetworkId(), SearchCriteria.Op.EQ); - nicSearch.and("ip4Address", nicSearch.entity().getIp4Address(), SearchCriteria.Op.NNULL); + nicSearch.and().op("ip4Address", nicSearch.entity().getIp4Address(), SearchCriteria.Op.NNULL); + nicSearch.or("ip6Address", nicSearch.entity().getIp6Address(), SearchCriteria.Op.NNULL); + nicSearch.cp(); UserVmSearch = createSearchBuilder(); UserVmSearch.and("states", UserVmSearch.entity().getState(), SearchCriteria.Op.IN); From 06acd9f0eac69d3380b54c470b4cbe889415cae9 Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Wed, 6 Feb 2013 19:46:58 -0800 Subject: [PATCH 08/85] IPv6: One network can have more than one vlan --- api/src/com/cloud/network/NetworkModel.java | 4 +- .../cloud/network/Ipv6AddressManagerImpl.java | 49 +++++++++++++------ .../com/cloud/network/NetworkManagerImpl.java | 6 +-- .../com/cloud/network/NetworkModelImpl.java | 29 +++++------ .../cloud/network/dao/UserIpv6AddressDao.java | 2 + .../network/dao/UserIpv6AddressDaoImpl.java | 8 +++ .../cloud/network/MockNetworkModelImpl.java | 6 +-- .../com/cloud/vpc/MockNetworkModelImpl.java | 6 +-- 8 files changed, 67 insertions(+), 43 deletions(-) diff --git a/api/src/com/cloud/network/NetworkModel.java b/api/src/com/cloud/network/NetworkModel.java index 57eeb290c05..0432e4fb363 100644 --- a/api/src/com/cloud/network/NetworkModel.java +++ b/api/src/com/cloud/network/NetworkModel.java @@ -249,7 +249,7 @@ public interface NetworkModel { boolean isNetworkInlineMode(Network network); - Vlan getVlanForNetwork(long networkId); + boolean isIP6AddressAvailableInNetwork(long networkId); - boolean isIP6AddressAvailable(long networkId); + boolean isIP6AddressAvailableInVlan(long vlanId); } \ No newline at end of file diff --git a/server/src/com/cloud/network/Ipv6AddressManagerImpl.java b/server/src/com/cloud/network/Ipv6AddressManagerImpl.java index f5ad7da1d14..ecef5a225e9 100644 --- a/server/src/com/cloud/network/Ipv6AddressManagerImpl.java +++ b/server/src/com/cloud/network/Ipv6AddressManagerImpl.java @@ -17,6 +17,7 @@ package com.cloud.network; +import java.util.List; import java.util.Map; import javax.ejb.Local; @@ -30,6 +31,7 @@ import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenterVO; import com.cloud.dc.Vlan; +import com.cloud.dc.VlanVO; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.VlanDao; import com.cloud.exception.InsufficientAddressCapacityException; @@ -76,25 +78,34 @@ public class Ipv6AddressManagerImpl extends ManagerBase implements Ipv6AddressMa if (network == null) { return null; } - Vlan vlan = _networkModel.getVlanForNetwork(networkId); - if (vlan == null) { + List vlans = _vlanDao.listVlansByNetworkId(networkId); + if (vlans == null) { s_logger.debug("Cannot find related vlan or too many vlan attached to network " + networkId); return null; } String ip = null; + Vlan ipVlan = null; if (requestedIp6 == null) { - if (!_networkModel.isIP6AddressAvailable(networkId)) { + if (!_networkModel.isIP6AddressAvailableInNetwork(networkId)) { throw new InsufficientAddressCapacityException("There is no more address available in the network " + network.getName(), DataCenter.class, network.getDataCenterId()); } - ip = NetUtils.getIp6FromRange(vlan.getIp6Range()); - int count = 0; - while (_ipv6Dao.findByNetworkIdAndIp(networkId, ip) != null) { - ip = NetUtils.getNextIp6InRange(ip, vlan.getIp6Range()); - count ++; - // It's an arbitrate number to prevent the infinite loop - if (count > _ipv6RetryMax) { - ip = null; - break; + for (Vlan vlan : vlans) { + if (!_networkModel.isIP6AddressAvailableInVlan(vlan.getId())) { + continue; + } + ip = NetUtils.getIp6FromRange(vlan.getIp6Range()); + int count = 0; + while (_ipv6Dao.findByNetworkIdAndIp(networkId, ip) != null) { + ip = NetUtils.getNextIp6InRange(ip, vlan.getIp6Range()); + count ++; + // It's an arbitrate number to prevent the infinite loop + if (count > _ipv6RetryMax) { + ip = null; + break; + } + } + if (ip != null) { + ipVlan = vlan; } } if (ip == null) { @@ -102,7 +113,13 @@ public class Ipv6AddressManagerImpl extends ManagerBase implements Ipv6AddressMa DataCenter.class, network.getDataCenterId()); } } else { - if (!NetUtils.isIp6InRange(requestedIp6, vlan.getIp6Range())) { + for (Vlan vlan : vlans) { + if (NetUtils.isIp6InRange(requestedIp6, vlan.getIp6Range())) { + ipVlan = vlan; + break; + } + } + if (ipVlan == null) { throw new CloudRuntimeException("Requested IPv6 is not in the predefined range!"); } ip = requestedIp6; @@ -117,9 +134,9 @@ public class Ipv6AddressManagerImpl extends ManagerBase implements Ipv6AddressMa _dcDao.update(dc.getId(), dc); String macAddress = NetUtils.long2Mac(NetUtils.createSequenceBasedMacAddress(mac)); - UserIpv6AddressVO ipVO = new UserIpv6AddressVO(ip, dcId, macAddress, vlan.getId()); - ipVO.setPhysicalNetworkId(vlan.getPhysicalNetworkId()); - ipVO.setSourceNetworkId(vlan.getNetworkId()); + UserIpv6AddressVO ipVO = new UserIpv6AddressVO(ip, dcId, macAddress, ipVlan.getId()); + ipVO.setPhysicalNetworkId(network.getPhysicalNetworkId()); + ipVO.setSourceNetworkId(networkId); ipVO.setState(UserIpv6Address.State.Allocated); ipVO.setDomainId(owner.getDomainId()); ipVO.setAccountId(owner.getAccountId()); diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 65b4b1aeafa..f24623ef577 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -3405,11 +3405,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L if (nic.getIp6Address() == null) { ipv6 = true; UserIpv6Address ip = _ipv6Mgr.assignDirectIp6Address(dc.getId(), vm.getOwner(), network.getId(), requestedIpv6); - Vlan vlan = _networkModel.getVlanForNetwork(network.getId()); - if (vlan == null) { - s_logger.debug("Cannot find related vlan or too many vlan attached to network " + network.getId()); - return; - } + Vlan vlan = _vlanDao.findById(ip.getVlanId()); nic.setIp6Address(ip.getAddress().toString()); nic.setIp6Gateway(vlan.getIp6Gateway()); nic.setIp6Cidr(vlan.getIp6Cidr()); diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java index f8d0addd1da..ce8fac7fb2d 100644 --- a/server/src/com/cloud/network/NetworkModelImpl.java +++ b/server/src/com/cloud/network/NetworkModelImpl.java @@ -527,7 +527,7 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel { return false; } if (network.getIp6Gateway() != null) { - hasFreeIps = isIP6AddressAvailable(network.getId()); + hasFreeIps = isIP6AddressAvailableInNetwork(network.getId()); } } else { hasFreeIps = (getAvailableIps(network, null)).size() > 0; @@ -537,17 +537,7 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel { } @Override - public Vlan getVlanForNetwork(long networkId) { - List vlans = _vlanDao.listVlansByNetworkId(networkId); - if (vlans == null || vlans.size() > 1) { - s_logger.debug("Cannot find related vlan or too many vlan attached to network " + networkId); - return null; - } - return vlans.get(0); - } - - @Override - public boolean isIP6AddressAvailable(long networkId) { + public boolean isIP6AddressAvailableInNetwork(long networkId) { Network network = _networksDao.findById(networkId); if (network == null) { return false; @@ -555,8 +545,19 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel { if (network.getIp6Gateway() == null) { return false; } - Vlan vlan = getVlanForNetwork(network.getId()); - long existedCount = _ipv6Dao.countExistedIpsInNetwork(network.getId()); + List vlans = _vlanDao.listVlansByNetworkId(networkId); + for (Vlan vlan : vlans) { + if (isIP6AddressAvailableInVlan(vlan.getId())) { + return true; + } + } + return false; + } + + @Override + public boolean isIP6AddressAvailableInVlan(long vlanId) { + VlanVO vlan = _vlanDao.findById(vlanId); + long existedCount = _ipv6Dao.countExistedIpsInVlan(vlanId); BigInteger existedInt = BigInteger.valueOf(existedCount); BigInteger rangeInt = NetUtils.countIp6InRange(vlan.getIp6Range()); return (existedInt.compareTo(rangeInt) < 0); diff --git a/server/src/com/cloud/network/dao/UserIpv6AddressDao.java b/server/src/com/cloud/network/dao/UserIpv6AddressDao.java index 81e0da83764..555b7f60253 100644 --- a/server/src/com/cloud/network/dao/UserIpv6AddressDao.java +++ b/server/src/com/cloud/network/dao/UserIpv6AddressDao.java @@ -36,4 +36,6 @@ public interface UserIpv6AddressDao extends GenericDao List listByPhysicalNetworkId(long physicalNetworkId); long countExistedIpsInNetwork(long networkId); + + long countExistedIpsInVlan(long vlanId); } diff --git a/server/src/com/cloud/network/dao/UserIpv6AddressDaoImpl.java b/server/src/com/cloud/network/dao/UserIpv6AddressDaoImpl.java index 8a1115dd3b6..587193c73f8 100644 --- a/server/src/com/cloud/network/dao/UserIpv6AddressDaoImpl.java +++ b/server/src/com/cloud/network/dao/UserIpv6AddressDaoImpl.java @@ -59,6 +59,7 @@ public class UserIpv6AddressDaoImpl extends GenericDaoBase sc = CountFreePublicIps.create(); + sc.setParameters("vlanId", vlanId); + return customSearch(sc, null).get(0); + } } diff --git a/server/test/com/cloud/network/MockNetworkModelImpl.java b/server/test/com/cloud/network/MockNetworkModelImpl.java index 502354ea108..1088321e46f 100644 --- a/server/test/com/cloud/network/MockNetworkModelImpl.java +++ b/server/test/com/cloud/network/MockNetworkModelImpl.java @@ -810,13 +810,13 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel { } @Override - public Vlan getVlanForNetwork(long networkId) { + public boolean isIP6AddressAvailableInNetwork(long networkId) { // TODO Auto-generated method stub - return null; + return false; } @Override - public boolean isIP6AddressAvailable(long networkId) { + public boolean isIP6AddressAvailableInVlan(long vlanId) { // TODO Auto-generated method stub return false; } diff --git a/server/test/com/cloud/vpc/MockNetworkModelImpl.java b/server/test/com/cloud/vpc/MockNetworkModelImpl.java index 1080d48f1be..aed54c7f254 100644 --- a/server/test/com/cloud/vpc/MockNetworkModelImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkModelImpl.java @@ -824,13 +824,13 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel { } @Override - public Vlan getVlanForNetwork(long networkId) { + public boolean isIP6AddressAvailableInNetwork(long networkId) { // TODO Auto-generated method stub - return null; + return false; } @Override - public boolean isIP6AddressAvailable(long networkId) { + public boolean isIP6AddressAvailableInVlan(long vlanId) { // TODO Auto-generated method stub return false; } From bdb904c125a93c40808338e78ece8f8429811047 Mon Sep 17 00:00:00 2001 From: Channy Yun Date: Thu, 7 Feb 2013 10:34:18 +0530 Subject: [PATCH 09/85] Localization:Korean Translation --- .../resources/messages_ko_KR.properties | 1513 +++++++++++++++++ 1 file changed, 1513 insertions(+) create mode 100644 client/WEB-INF/classes/resources/messages_ko_KR.properties diff --git a/client/WEB-INF/classes/resources/messages_ko_KR.properties b/client/WEB-INF/classes/resources/messages_ko_KR.properties new file mode 100644 index 00000000000..dc65d7001c2 --- /dev/null +++ b/client/WEB-INF/classes/resources/messages_ko_KR.properties @@ -0,0 +1,1513 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +#new labels (begin) ********************************************************************************************** + + +#new labels (end) ************************************************************************************************ + + +#modified labels (begin) ***************************************************************************************** + + +#modified labels (end) ******************************************************************************************* + +label.configure.network.ACLs=네트워크 권한 관리(ACL) 구성 +label.network.ACLs=네트워크 권한 관리(ACL) +label.add.network.ACL=네트워크 권한 관리(ACL) 추가 +label.private.Gateway=사설 게이트웨이 +label.VPC.router.details=VPC 라우터 상세 +label.VMs.in.tier=계층 내부 가상머신 + +message.zoneWizard.enable.local.storage=경고:현재 Zone의 로컬 스토리지를 사용 하는 경우는 시스템 VM의 시작 장소에 따라 다음 작업이 필요합니다.

1. 시스템 VM을 기본 스토리지로 시작해야 하는 경우 기본 스토리지를 만들기한 다음에 Zone에 추가해야 합니다. 또한, 유효하지 않은 상태의 Zone을 시작해야 합니다.

2. 시스템 VM를 로컬 스토리지로 시작할 필요가 있는 경우 system.vm.use.local.storage를 true 로 설정하고 나서 Zone을 사용해야 합니다.


진행 하시겠습니까? +label.local.storage.enabled=로컬 스토리지는 유효 +label.tier.details=계층 상세 장버 +label.edit.tags=태그 편집 +label.network.rate.megabytes=네트워크 속도 (MB/초) +label.action.enable.physical.network=물리 네트워크 사용함 +label.action.disable.physical.network=물리 네트워크 사용 안 함 +message.action.enable.physical.network=현재 물리 네트워크를 사용하시겠습니까? +message.action.disable.physical.network=현재 물리 네트워크를 사용 안 함으로 하시겠습니까? + +label.select.tier=계층 선택 +label.add.ACL=권한 관리(ACL) 추가 +label.remove.ACL=권한 관리(ACL) 삭제 +label.tier=계층 +label.network.ACL=네트워크 권한 관리(ACL) +label.network.ACL.total=네트워크 권한 관리(ACL) 합계 +label.add.new.gateway=새 게이트웨이 추가하기 +message.add.new.gateway.to.vpc=현재 VPC에 새로운 게이트웨이를 추가하기 위한 정보를 지정해 주십시오. +label.delete.gateway=게이트웨이 삭제 +message.delete.gateway=현재 게이트웨이를 삭제하시겠습니까? +label.CIDR.of.destination.network=대상 네트워크 CIDR +label.add.route=라우트 추가 +label.add.static.route=정적 라우트 추가 +label.remove.static.route=정적 라우트 삭제 +label.site.to.site.VPN=사이트간 사설네트워크(VPN) +label.add.VPN.gateway=VPN 게이트웨이 추가 +message.add.VPN.gateway=VPN 게이트웨이를 추가하시겠습니까? +label.VPN.gateway=VPN 게이트웨이 +label.delete.VPN.gateway=VPN 게이트웨이삭제 +message.delete.VPN.gateway=현재 VPN 게이트웨이를 삭제하시겠습니까? +label.VPN.connection=VPN 접속 +label.IPsec.preshared.key=IPsec 사전 공유 키 +label.IKE.policy=IKE 정책 +label.ESP.policy=ESP 정책 +label.create.VPN.connection=VPN 접속 만들기 +label.VPN.customer.gateway=VPN 고객 게이트웨이 +label.CIDR.list=CIDR 목록 +label.IKE.lifetime=IKE 유효기간(초) +label.ESP.lifetime=ESP 유효기간(초) +label.dead.peer.detection=정지 피어 감지 +label.reset.VPN.connection=VPN 접속 재설정 +message.reset.VPN.connection=VPN 접속을 재설정 하시겠습니까? +label.delete.VPN.connection=VPN 접속 삭제 +message.delete.VPN.connection=VPN 접속을 삭제하시겠습니까? +label.add.new.tier=새 계층 추가 +label.add.VM.to.tier=계층에 VM 추가 +label.remove.tier=계층 삭제 + +label.local.storage.enabled=로컬 스토리지 사용함 +label.associated.network=관련 네트워크 +label.add.port.forwarding.rule=포토 전송 규칙의 추가 +label.dns=DNS + +label.vpc=VPC +label.vpc.id=VPC ID +label.tier=계층 +label.add.vpc=VPC 추가 +label.super.cidr.for.guest.networks=손님 네트워크 슈퍼 CIDR +label.DNS.domain.for.guest.networks=손님 네트워크 DNS 도메인 +label.configure.vpc=VPC 구성 +label.edit.vpc=VPC 편집 +label.restart.vpc=VPC 재시작 +message.restart.vpc=VPC를 재시작하시겠습니까? +label.remove.vpc=VPC 삭제 +message.remove.vpc=VPC를 삭제하시겠습니까? +label.vpn.customer.gateway=VPN 고객 게이트웨이 +label.add.vpn.customer.gateway=VPN 고객 게이트웨이 추가 +label.IKE.encryption=IKE 암호화 +label.IKE.hash=IKE 해시 +label.IKE.DH=IKE DH +label.ESP.encryption=ESP 암호화 +label.ESP.hash=ESP 해시 +label.perfect.forward.secrecy=Perfect Forward Secrecy +label.IKE.lifetime=IKE 유효기간(초) +label.ESP.lifetime=ESP 유효기간(초) +label.dead.peer.detection=정지 피어 감지 +label.delete.VPN.customer.gateway=VPN 고객 게이트웨이 삭제 +message.delete.VPN.customer.gateway=현재 VPN 고객 게이트웨이를 삭제하시겠습니까? + +label.network.domain.text=네트워크 도메인 +label.memory.mb=메모리 (MB) +label.cpu.mhz=CPU (MHz) +message.action.remove.host=현재 호스트를 삭제하시겠습니까? + +message.action.reboot.router=현재 가상 라우터로 제공하는 모든 서비스가 중단됩니다. 이 라우터를 재시작하시겠습니까? +message.action.stop.router=현재 가상 라우터로 제공하는 모든 서비스가 중단됩니다. 이 라우터를 정지하시겠습니까? +message.restart.network=현재 네트워크로 제공하는 모든 서비스가 중단됩니다. 이 네트워크를 재시작하시겠습니까? + + +label.ipaddress=IP 주소 +label.vcdcname=vCenter DC 명 +label.vcipaddress=vCenter IP 주소 +label.vsmctrlvlanid=제어 VLAN ID +label.vsmpktvlanid=패킷 VLAN ID +label.vsmstoragevlanid=스토리지 VLAN ID +label.nexusVswitch=Nexus 1000V +label.action.delete.nexusVswitch=Nexus 1000V 삭제 +label.action.enable.nexusVswitch=Nexus 1000V 사용함 +label.action.disable.nexusVswitch=Nexus 1000V 사용 안 함 +label.action.list.nexusVswitch=Nexus 1000V 목록 표시 +message.action.delete.nexusVswitch=현재 Nexus 1000V를 삭제하시겠습니까? +message.action.enable.nexusVswitch=현재 Nexus 1000V를 사용 하시겠습니까? +message.action.disable.nexusVswitch=현재 Nexus 1000V를 사용 안 함으로 하시겠습니까? +message.specify.url=URL를 지정해 주십시오 +label.select.instance.to.attach.volume.to=볼륨을 연결하는 인스턴스를 선택해 주십시오 +label.upload=업로드 +label.upload.volume=볼륨의 업로드 +label.virtual.routers=가상 라우터 +label.primary.storage.count=기본 스토리지 그룹 +label.secondary.storage.count=2차 스토리지 그룹 +label.number.of.system.vms=시스템 VM 수 +label.number.of.virtual.routers=가상 라우터수 +label.action.register.iso=ISO 등록 +label.isolation.method=분리 방법 +label.action.register.template=템플릿 등록 +label.checksum=MD5 체크섬 +label.vpn=가상 사설망(VPN) +label.vlan=가상 네트워크(VLAN) + + +label.management.ips=관리 IP 주소 +label.devices=기기 +label.rules=규칙 +label.traffic.label=트래픽 라벨 +label.vm.state=VM 상태 +message.setup.physical.network.during.zone.creation.basic=기본 Zone을 추가할 때는 하이퍼 바이저상의 네트웍카드(NIC)에 대응하는 한 가지 물리 네트워크를 설정 할 수 있습니다. 네트워크는 몇 가지 종류의 트래픽을 전송합니다.

물리 네트워크에 다른 트래픽의 종류를드래그 앤 드롭 할 수도 있습니다. +label.domain.router=도메인 라우터 +label.console.proxy=콘솔 프록시 +label.secondary.storage.vm=2차 스토리지 VM +label.add.netScaler.device=Netscaler 기기 추가 +label.add.F5.device=F5 기기 추가 +label.add.SRX.device=SRX 기기 추가 +label.account.and.security.group=계정 정보, 보안 그룹 +label.fetch.latest=최신 정보 취득 +label.system.offering=시스템 제공 +message.validate.instance.name=인스턴스명은 63 문자 이내에서 지정해 주십시오. ASCII 문자의 a-z, A-Z, 숫자의 0-9 및 하이픈만을 사용할 수 있습니다. 문자로 시작하여 문자 또는 숫자로 끝내야 합니다. + + +label.isolated.networks=분리 네트워크 +label.latest.events=최신 이벤트 +state.Enabled=사용함 +label.system.wide.capacity=시스템 전체 처리 능력 +label.network.service.providers=네트워크 서비스 제공자 +message.launch.zone=Zone을 시작할 준비가 되었습니다. 다음 순서에 따라 진행해 주십시오. +error.unable.to.reach.management.server=관리 서버와 통신할 수 없습니다. +label.internal.name=내부명 +message.configure.all.traffic.types=복수의 물리 네트워크가 있습니다. [편집]을 클릭해 트래픽의 종류 마다 라벨을 구성해 주십시오. +message.edit.traffic.type=현재 트래픽의 종류에 관련 트래픽 라벨을 지정해 주십시오. +label.edit.traffic.type=트래픽 종류 편집 +label.label=라벨 +label.max.networks=최대 네트워크수 +error.invalid.username.password=유효하지 않은 사용자명 또는 암호 +message.enabling.security.group.provider=보안 그룹 제공자를 사용 하고 있습니다. +message.adding.Netscaler.provider=Netscaler 제공자를 추가하고 있습니다. +message.creating.guest.network=손님 네트워크를 만듭니다. +label.action.delete.physical.network=물리 네트워크 삭제 +message.action.delete.physical.network=현재 물리 네트워크를 삭제하시겠습니까? +message.installWizard.copy.whatIsAHost=호스트는 단일 컴퓨터로 손님 가상 머신을 실행하는 컴퓨팅 자원을 제공합니다. 베어 메탈 호스트를 제외하고, 각 호스트는 게스트 가상 머신을 관리하기 위한 하이퍼 바이저 소프트웨어를 설치합니다. 베어 메탈 호스트에 대해서는 설치 가이드 고급편 특수 사례로서 설명합니다. 예를 들어, KVM은 유효한 Linux 서버, Citrix XenServer가 동작하는 서버 및 ESXi 서버가 호스트입니다. 기본 설치에서는 XenServer 또는 KVM를 실행하는 단일 호스트를 사용합니다.

호스트는 CloudStack™ 환경내의 최소의 조직 단위입니다. 호스트는 클러스터에 포함되어 클러스터는 Pod에 포함되어 Pod는 Zone에 포함됩니다. + + +label.add.compute.offering=컴퓨팅 자원 추가 +label.compute.offering=컴퓨팅 자원 제공 +label.compute.offerings=컴퓨팅 자원 제공 +label.select.offering=제공 선택 +label.menu.infrastructure=인프라스트럭쳐 +label.sticky.tablesize=테이블 크기 +label.sticky.expire=만료시간 +label.sticky.cookie-name=Cookie 명 +label.sticky.mode=모드 +label.sticky.length=길이 +label.sticky.holdtime=보관 유지 시간 +label.sticky.request-learn=러닝 요구 +label.sticky.prefix=프레픽스 +label.sticky.nocache=캐시 없음 +label.sticky.indirect=간접 +label.sticky.postonly=포스트만 +label.sticky.domain=도메인 +state.Allocating=할당 중 +state.Migrating=이전 중 +error.please.specify.physical.network.tags=현재 물리 네트워크 태그를 지정하지 않으면, 네트워크 제공은 사용할 수 없습니다. + + +state.Stopping=정지하고 있는 중 +message.add.load.balancer.under.ip=다음 IP 주소에 대해서 네트워크 로드 공유 규칙을 추가합니다: +message.select.instance=인스턴스를 선택해 주십시오. +label.select=선택 +label.select.vm.for.static.nat=정적 NAT용 VM 선택 +label.select.instance=인스턴스 선택 +label.nat.port.range=NAT 포토 범위 +label.static.nat.vm.details=정적 NAT VM 상세 정보 +label.edit.lb.rule=네트워크 로드 공유 규칙 편집 +message.migrate.instance.to.host=다른 호스트에게 인스턴스를 이전하시겠습니까? +label.migrate.instance.to.host=다른 호스트에게 인스턴스 이전 +message.migrate.instance.to.ps=다른 기본 스토리지에 인스턴스를 이전하시겠습니까? +label.migrate.instance.to.ps=다른 기본 스토리지에 인스턴스 이전 +label.corrections.saved=접속 정보 저장 +message.installWizard.copy.whatIsSecondaryStorage=2차 스토리지는 Zone과 관련돤 아래의 항목을 포함합니다.
  • 템플릿 - VM 시작 시 사용할 수 있는 OS 이미지로 애플리케이션의 설치 등 추가 구성을 포함할 수 있습니다.
  • ISO 이미지 - 바로 시작 가능 또는 시작 불가의 OS 이미지입니다.
  • 디스크 볼륨 스냅샷 - VM 데이터 저장 복사본입니다. 데이터의 복원 또는 새로운 템플릿 만들기에 사용할 수 있습니다.
+message.installWizard.copy.whatIsPrimaryStorage=CloudStack™ 클라우드 인프라스트럭쳐에서는 기본 스토리지와 2차 스토리지 두 종류의 스토리지를 사용합니다. 양쪽 스토리지에서 iSCSI, NFS 서버, 또는 로컬 디스크를 사용할 수 있습니다.

기본 스토리지는 클러스터에 관련되어그 클러스터내의 호스트로 동작하는 모든 VM 중 각 게스트 VM의 디스크 볼륨을 포함합니다. 원래, 기본 스토리지 서버는 호스트 근처에 설치합니다. +message.installWizard.copy.whatIsACluster=클러스터는 호스트를 그룹화 하는 방법입니다. 한 가지 클러스터내 호스트는 모두 동일한 하드웨어에서 구성되어 같은 하이퍼 바이저를 실행하고 같은 서브 네트워크상에 있어서 같은 공유 스토리지에 접근 합니다. 같은 클러스터내의 호스트 사이에서는 사용자에게 서비스를 중단하지 않고 가상 머신 인스턴스를 실시간 이전 할 수 있습니다. 클러스터는 CloudStack™ 환경내의 세 번째로 큰 조직 단위입니다. 클러스터는 Pod에 포함되어 Pod는 Zone에 포함됩니다.

CloudStack™ 에서는 한 가지 클라우드 환경에 복수 클러스터를 설정할 수 있으나 기본 설치에서는 클러스터는 한 개입니다. +message.installWizard.copy.whatIsAPod=원래 한 가지 Pod는 단일 잠금을 나타냅니다. 같은 Pod내 호스트는 같은 서브 네트워크에 포함됩니다.

Pod는 CloudStack™ 환경내의 두 번째로 큰 조직 단위입니다. Pod는 Zone에 포함됩니다. 각 Zone은 한 개 이상의 Pod를 포함할 수 있습니다. 기본 설치에서는 Zone내 Pod는 한 개입니다. +message.installWizard.copy.whatIsAZone=Zone은 CloudStack™ 환경내 최대 조직 단위입니다. 한 가지 데이터 센터내에 복수 Zone을 설정할 수 있으나 원래 Zone은 단일의 데이터 센터에 할당합니다. 인프라스트럭쳐를 Zone에 조직화하면, Zone을 물리적우로 분리해 설정할 수 있습니다. 예를 들어, 각 Zone에 전원과 네트워크 업링크를 배치합니다. 필수가 아니지만 원격지에 분산할 수 있습니다. +message.installWizard.copy.whatIsCloudStack=CloudStack™는 컴퓨팅 자원을 포함하는 소프트웨어 플랫웹 양식에서 공개, 사설, 및 하이브리드의 Infrastructure as a Service (IaaS) 클라우드를 구축할 수 있습니다. CloudStack™를 사용하고, 클라우드 인프라스트럭쳐를 구성하는 네트워크, 스토리지 및 컴퓨팅 노드를 관리하고 클라우드 컴퓨팅 환경을 설정, 관리 및 구성합니다.

CloudStack™은 하드웨어상에서 동작하는 개별 가상 머신 이미지를 넘어 확장할 수 있기 때문에 간단한 설정으로 동작하는 클라우드 인프라스트럭쳐 소프트웨어 스택에 의해 가상 데이터 센터 즉 여러 층형 멀티 세입자 클라우드 애플리케이션을 서비스로서 구축하고 설정하고 관리하기 위해서 불가결한 항목을 모두 제공합니다. 오픈 소스 버전과 프리미엄 버전 양쪽 모두에 제공하며 오픈 소스 버전에서도 대부분 기능을 사용할 수 있습니다. +message.installWizard.tooltip.addSecondaryStorage.path=위에서 지정한 서버에 존재하는 내보내기 경로입니다. +message.installWizard.tooltip.addSecondaryStorage.nfsServer=2차 스토리지를 호스트 하는 NFS 서버 IP 주소입니다. +message.installWizard.tooltip.addPrimaryStorage.path=(NFS의 경우) 서버에서 내보내기 경로입니다. (SharedMountPoint의 경우) 일반 경로입니다. KVM에서는 기본 스토리지가 마운트되는 각 호스트상의 경로입니다. 예를 들어, /mnt/primary 입니다. +message.installWizard.tooltip.addPrimaryStorage.server=(NFS, iSCSI 또는 PreSetup의 경우) 스토리지 기기의 IP 주소 또는 DNS 명입니다. +message.installWizard.tooltip.addPrimaryStorage.name=스토리지 기기의 이름입니다. +message.installWizard.tooltip.addHost.password=XenServer 측에서 지정한 위의 사용자명에 대한 암호입니다. +message.installWizard.tooltip.addHost.username=원래 root 입니다. +message.installWizard.tooltip.addHost.hostname=호스트 DNS 명 또는 IP 주소입니다. +message.installWizard.tooltip.addCluster.name=클러스터 이름입니다. CloudStack에서 예약하지 않은 임의 텍스트를 지정할 수 있습니다. +message.installWizard.tooltip.addPod.reservedSystemEndIp=이것은 2차 스토리지 VM 및 콘솔 프록시 VM를 관리하기 위해서 CloudStack에서 사용하는 사설 네트워크내 IP 주소 범위입니다. 이러한 IP 주소는 컴퓨팅 서버와 같은 서브네트워크에서 할당합니다. +message.installWizard.tooltip.addPod.reservedSystemStartIp=이것은 2차 스토리지 VM 및 콘솔 프록시 VM를 관리하기 위해서 CloudStack에서 사용하는 사설 네트워크내의 IP 주소 범위입니다. 이러한 IP 주소는 컴퓨팅 서버와 같은 서브네트워크에서 할당합니다. +message.installWizard.tooltip.addPod.reservedSystemNetmask=게스트가 사용하는 서브네트워크상에서 지정한 넷 마스크입니다. +message.installWizard.tooltip.addPod.reservedSystemGateway=현재 Pod내 호스트 게이트웨이입니다. +message.installWizard.tooltip.addPod.name=Pod 이름입니다. +message.installWizard.tooltip.configureGuestTraffic.guestEndIp=현재 Zone의 게스트에게 할당할 수 있는 IP 주소 범위입니다. 사용하는 NIC가 한 가지인 경우는 이러한 IP 주소는 Pod의 CIDR와 같은 CIDR에 포함되어 있어야 합니다. +message.installWizard.tooltip.configureGuestTraffic.guestStartIp=현재 Zone의 게스트에게 할당할 수 있는 IP 주소 범위입니다. 사용하는 NIC가 한 가지 경우는 이러한 IP 주소는 Pod의 CIDR와 같은 CIDR에 포함되어 있어야 합니다. +message.installWizard.tooltip.configureGuestTraffic.guestNetmask=게스트에서 사용하는 서브네트워크상에서 사용되는 넷 마스크입니다. +message.installWizard.tooltip.configureGuestTraffic.guestGateway=게스트에서 사용하는 게이트웨이입니다. +message.installWizard.tooltip.configureGuestTraffic.description=네트워크 설명입니다. +message.installWizard.tooltip.configureGuestTraffic.name=네트워크 이름입니다. +message.installWizard.tooltip.addZone.internaldns2=Zone내 시스템 VM으로 사용하는 DNS 서버입니다. 현재 DNS 서버는 시스템 VM의 사설 네트워크 인터페이스를 개입시켜 접근합니다. Pod의 사설 IP 주소에서 여기서 지정하는 DNS 서버에 통신할 수 있어야 합니다. +message.installWizard.tooltip.addZone.internaldns1=Zone내의 시스템 VM 로 사용하는 DNS 서버입니다. 현재 DNS 서버는 시스템 VM의 사설 네트워크 인터페이스를 개입시켜 접근합니다. Pod의 사설 IP 주소에서 여기서 지정하는 DNS 서버에 통신할 수 있어야 합니다. +message.installWizard.tooltip.addZone.dns2=Zone내 게스트 VM 로 사용하는 DNS 서버입니다. 현재 DNS 서버에는 다음에 추가하는 공개 네트워크 경유로 접근합니다. Zone의 공개 IP 주소에서 여기서 지정하는 공개 DNS 서버에 통신할 수 있어야 합니다. +message.installWizard.tooltip.addZone.name=Zone의 이름입니다. +message.installWizard.tooltip.addZone.dns1=Zone내의 게스트 VM으로 사용하는 DNS 서버입니다. 이러한 DNS 서버에는 다음에 추가하는 공개 네트워크 경유로 접근 합니다. Zone의 공개 IP 주소에서 여기서 지정하는 공개 DNS 서버에 통신할 수 있어야 합니다. +message.setup.successful=클라우드가 설정 되었습니다. +label.may.continue=실행 할 수 있음 +error.installWizard.message=문제가 발생했습니다. 다시 오류를 수정할 수 있습니다. +message.installWizard.now.building=클라우드를 구축하고 있는 중... +message.installWizard.click.retry=시작을 재시행하려면 버튼을 클릭해 주십시오. +label.launch=시작 +label.installWizard.click.launch=[시작]을 클릭해 주십시오. +label.congratulations=설정이 곧 완료입니다. +label.installWizard.addSecondaryStorageIntro.subtitle=2차 스토리지에 대해 +label.installWizard.addSecondaryStorageIntro.title=2차 스토리지 추가 +label.installWizard.addPrimaryStorageIntro.subtitle=기본 스토리지에 대해 +label.installWizard.addPrimaryStorageIntro.title=기본 스토리지 추가 +label.installWizard.addHostIntro.subtitle=호스트에 대해 +label.installWizard.addHostIntro.title=호스트 추가 +label.installWizard.addClusterIntro.subtitle=클러스터 대한 정보 +label.installWizard.addClusterIntro.title=클러스터 추가 +label.installWizard.addPodIntro.subtitle=Pod에 대한 정보 +label.installWizard.addPodIntro.title=Pod 추가 +label.installWizard.addZone.title=Zone 추가 +label.installWizard.addZoneIntro.subtitle=Zone에 대한 정보 +label.installWizard.addZoneIntro.title=Zone 추가 +error.password.not.match=암호가 일치하지 않음 +label.confirm.password=암호 확인 입력 +message.change.password=암호를 변경해 주십시오. +label.save.and.continue=저장하기 +label.skip.guide=CloudStack 사용 가이드 건너뛰기 +label.continue.basic.install=기본 설치 실행 +label.introduction.to.cloudstack=CloudStack™ 소개 +label.what.is.cloudstack=CloudStack™ 정보 +label.hints=정보 +label.installWizard.subtitle=현재 가이드 투어는 CloudStack™ 환경 설정에 도움이 됩니다 +label.continue=실행 +label.installWizard.title=CloudStack™ 마법사 +label.agree=동의 +label.manage.resources=자원 관리 +label.port.forwarding.policies=포토 전송 정책 +label.load.balancing.policies=네트워크 로드 공유 정책 +label.networking.and.security=네트워크와 보안 +label.bandwidth=대역폭 +label.virtual.machines=가상 머신 +label.compute.and.storage=컴퓨팅과 스토리지 +label.task.completed=작업 완료 +label.update.project.resources=프로젝트 자원 업데이트 +label.remove.project.account=프로젝트 계정 정보 삭제 +label.item.listing=항목 목록 +message.select.item=항목을 선택해 주십시오. +label.removing=삭제하는 중 +label.invite=초대 +label.add.by=추가 단위 +label.max.vms=최대 사용자 VM수 +label.max.public.ips=최대 공개 IP 주소수 +label.max.volumes=최대 볼륨수 +label.max.snapshots=최대 스냅샷수 +label.max.templates=최대 템플릿수 +label.project.dashboard=프로젝트 대시 보드 +label.remind.later=알림 표시 +label.invited.accounts=초대가 끝난 계정 정보 +label.invite.to=초대 프로젝트: +label.add.accounts.to=계정 정보 추가: +label.add.accounts=계정 정보 추가 +label.project.name=프로젝트명 +label.create.project=프로젝트 만들기 +label.networks=네트워크 +label.launch.vm=VM 시작 +label.new.vm=새 VM +label.previous=뒤로 +label.add.to.group=그룹에 추가 +message.vm.review.launch=다음의 정보를 참조하고 가상 인스턴스를 올바르게 설정한 것을 확인하고 나서 시작해 주십시오. +message.select.security.groups=새로운 가상 머신 보안 그룹을 선택해 주십시오. +label.new=신규 +message.please.select.networks=가상 머신 네트워크를 선택해 주십시오. +message.please.proceed=다음의 순서에 진행해 주십시오. +message.zone.no.network.selection=선택한 Zone에서는 네트워크를 선택할 수 없습니다. +label.no.thanks=설정 안함 +label.my.templates=나의 템플릿 +message.select.template=새로운 가상 인스턴스 템플릿을 선택해 주십시오. +message.select.iso=새로운 가상 인스턴스 ISO를 선택해 주십시오. +message.template.desc=VM의 시작에 사용할 수 있는 OS 이미지 +message.iso.desc=데이터 또는 OS 시작 가능 미디어를 포함한 디스크 이미지 +label.select.iso.or.template=ISO 또는 템플릿 선택 +message.select.a.zone=Zone은 원래 단일 데이터 센터에 해당합니다. 복수 Zone을 설정하고 물리적으로 분리하는 방법으로 클라우드의 신뢰성을 높일 수 있습니다. +label.select.a.zone=Zone 선택 +label.review=확인 +label.select.a.template=템플릿 선택 +label.setup=설정 +state.Allocated=할당 끝난 상태 +changed.item.properties=항목 속성 변경 +label.apply=적용 +label.default=기본 +label.viewing=표시 항목: +label.move.to.top=처음으로 이동 +label.move.up.row=위로 이동 +label.move.down.row=아래로 이동 +label.move.to.bottom=마지막으로 이동 +label.drag.new.position=새로운 위치에 끌어오기 +label.order=순서 +label.no.data=표시할 데이터가 없음 +label.change.value=값 변경 +label.clear.list=목록 삭제 +label.full.path=전체 경로 +message.add.domain=현재 도메인에 만들고자 하는 서브 도메인을 지정해 주십시오. +message.delete.user=현재 사용자를 삭제하시겠습니까? +message.enable.user=현재 사용자를 사용 하시겠습니까? +message.disable.user=현재 사용자를 사용 안 함으로 하시겠습니까? +message.generate.keys=현재 사용자에게 새로운 키를 생성하시겠습니까? +message.update.resource.count=현재 계정 정보 자원수를 업데이트하시겠습니까? +message.edit.account=편집 ("-1"는 자원 만들기 숫자에 제한이 없는 값입니다.) +label.total.of.vm=VM 합계 +label.total.of.ip=IP 주소 합계 +state.enabled=유효함 +message.action.download.iso=현재 ISO를 다운로드하시겠습니까? +message.action.download.template=현재 템플릿을 다운로드하시겠습니까? +label.destination.zone=복사할 Zone +label.keyboard.type=키보드 종류 +label.nic.adapter.type=NIC 아답터 종류 +label.root.disk.controller=루트 디스크 콘트롤러 +label.community=커뮤니티 +label.remove.egress.rule=전송 규칙 삭제 +label.add.egress.rule=전송 규칙 추가 +label.egress.rule=전송 규칙 +label.remove.ingress.rule=수신 규칙 삭제 +label.delete.vpn.user=VPN 사용자 삭제 +label.add.vpn.user=VPN 사용자 추가 +label.remove.pf=포토 전송 규칙 삭제 +label.remove.vm.from.lb=네트워크 로드 공유 규칙에 VM 삭제 +label.add.vms.to.lb=네트워크 로드 공유 규칙에 VM 추가 +label.add.vm=VM 추가 +label.remove.static.nat.rule=정적 NAT 규칙 삭제 +label.remove.rule=규칙 삭제 +label.add.static.nat.rule=정적 NAT 규칙 추가 +label.add.rule=규칙 추가 +label.configuration=구성 +message.disable.vpn=VPN를 사용 안 함으로 하시겠습니까? +label.disable.vpn=VPN 사용 안 함 +message.enable.vpn=현재 IP 주소에 대한 VPN 접근를 사용 하시겠습니까? +label.enable.vpn=VPN 사용함 +message.acquire.new.ip=현재 네트워크가 새로운 IP 주소를 취득하시겠습니까? +label.elastic=오류 스틱 +label.my.network=내 네트워크 +label.add.vms=VM 추가 +label.configure=구성 +label.stickiness=지속성 +label.source=시작 위치 +label.least.connections=최소 접속 +label.round.robin=라운드 로빈 +label.restart.required=재시작 필요 +label.clean.up=삭제하기 +label.restart.network=네트워크 재시작 +label.edit.network.details=네트워크 상세한 편집 +label.add.guest.network=손님 네트워크 추가 +label.guest.networks=손님 네트워크 +message.ip.address.changed=사용 IP 주소가 변경된 가능성이 있습니다. 목록을 업데이트합니까? 그 경우는 상세 설정창이 닫는 것에 주의해 주십시오. +state.BackingUp=백업 중 +state.BackedUp=백업 완료 +label.done=완료 +label.vm.name=VM 명 +message.migrate.volume=다른 기본 스토리지에 볼륨을 이전하시겠습니까? +label.migrate.volume=다른 기본 스토리지에 볼륨 이전 +message.create.template=템플릿을 만들기하시겠습니까? +label.create.template=템플릿 만들기 +message.download.volume.confirm=현재 볼륨을 다운로드하시겠습니까? +message.detach.disk=현재 디스크를 분리 하시겠습니까? +state.ready=준비 완료 +state.Ready=준비 완료 +label.vm.display.name=VM 표시명 +label.select-view=표시 방법 선택 +label.local.storage=로컬 스토리지 +label.direct.ips=직접 IP 주소 +label.view.all=모두 표시 +label.zone.details=Zone 상세 +message.alert.state.detected=경계체제 상태가 감지되었습니다 +state.Starting=시작 중 +state.Expunging=제거 중 +state.Creating=생성 중 +message.decline.invitation=현재 프로젝트에 초대를 거절하시겠습니까? +label.decline.invitation=초대 거절 +message.confirm.join.project=현재 프로젝트에 참여하시겠습니까? +message.join.project=이것으로, 프로젝트에 참여했습니다. 프로젝트를 참조하려면 프로젝트 보기로 전환해 주십시오. +label.accept.project.invitation=프로젝트 초대 승인 +label.token=토큰 +label.project.id=프로젝트 ID +message.enter.token=전자 메일 초대장에 설명되어 있는 토큰을 입력해 주십시오. +label.enter.token=토큰 입력 +state.Accepted=승인 완료 +state.Pending=보류 +state.Completed=완료 +state.Declined=거절 +label.project=프로젝트 +label.invitations=초대장 +label.delete.project=프로젝트 삭제 +message.delete.project=현재 프로젝트를 삭제하시겠습니까? +message.activate.project=현재 프로젝트를 활성화 하시겠습니까? +label.activate.project=프로젝트 활성화 +label.suspend.project=프로젝트 일시정지 +message.suspend.project=현재 프로젝트를 일시정지하시겠습니까? +state.Suspended=일시정지 +label.edit.project.details=프로젝트 상세 편집 +label.new.project=새 프로젝트 +state.Active=활성 +state.Disabled=유효하지 않은 +label.projects=프로젝트 +label.make.project.owner=계정 정보 프로젝트 소유자 +label.remove.project.account=계정 정보 프로젝트에서 삭제 +message.project.invite.sent=사용자에게 초대장이 전송되었습니다. 사용자가 초대를 승인하면, 프로젝트에 추가됩니다. +label.add.account.to.project=계정 정보 프로젝트에 추가 +label.revoke.project.invite=초대 취소 +label.project.invite=프로젝트에 초대 +label.select.project=프로젝트 선택 +message.no.projects=프로젝트가 없습니다.
프로젝트 섹션에서 새로운 프로젝트를 만들어 주십시오. +message.no.projects.adminOnly=프로젝트가 없습니다.
관리자에게 새로운 프로젝트 생성을 의뢰하십시오. +message.pending.projects.1=보류중인 프로젝트 초대장이 있습니다. +message.pending.projects.2=표시하려면 프로젝트 섹션으로 이동하고 목록에서 초대장을 선택합니다. +message.instanceWizard.noTemplates=사용 가능한 템플릿이 없습니다. 호환성이 있는 템플릿을 추가하고, 인스턴스 위저드를 재시작해 주십시오. +label.view=표시 - +instances.actions.reboot.label=인스턴스 재시작 +label.filterBy=필터 +label.ok=확인 +notification.reboot.instance=인스턴스 재시작 +notification.start.instance=인스턴스 시작 +notification.stop.instance=인스턴스 정지 +label.display.name=표시명 +label.zone.name=Zone 이름 +ui.listView.filters.all=모두 +ui.listView.filters.mine=내 정보만 +state.Running=실행 중 +state.Stopped=정지된 상태 +state.Destroyed=파기된 상태 +state.Error=오류 +message.reset.password.warning.notPasswordEnabled=현재 인스턴스 템플릿은 암호 관리를 사용 하지 않고 생성되었습니다. +message.reset.password.warning.notStopped=현재 암호를 변경하기 전에 인스턴스를 정지해야 합니다. +label.notifications=알림 +label.default.view=기본 보기 +label.project.view=프로젝트 보기 + +message.add.system.service.offering=새로운 시스템 서비스 제공을 추가하기 위해 다음 데이터를 입력해 주십시오. +message.action.delete.system.service.offering=현재 시스템 서비스 제공을 삭제하시겠습니까? +label.action.delete.system.service.offering=시스템 서비스 제공 삭제 +label.hypervisor.capabilities=하이퍼 바이저 기능 +label.hypervisor.version=하이퍼 바이저 버전 +label.max.guest.limit=최대 게스트 제한 +label.add.network.offering=네트워크 제공 추가 +label.supported.services=기술 지원되는 서비스 +label.service.capabilities=서비스 기능 +label.guest.type=게스트 종류 +label.specify.IP.ranges=IP 주소 범위 지정 +label.conserve.mode=절약 모드 +label.created.by.system=시스템 만들기 +label.menu.system.service.offerings=시스템 제공 +label.add.system.service.offering=시스템 서비스 제공 추가 +label.redundant.router.capability=중복 라우터 기능 +label.supported.source.NAT.type=기술 지원되는 전송 NAT 종류 +label.elastic.LB=탄력적 네트워크 로드 공유 +label.LB.isolation=네트워크 로드 공유 분리 +label.elastic.IP=탄력적 IP 주소 +label.network.label.display.for.blank.value=기본 게이트웨이를 사용 +label.xen.traffic.label=XenServer 트래픽 라벨 +label.kvm.traffic.label=KVM 트래픽 라벨 +label.vmware.traffic.label=VMware 트래픽 라벨 +label.start.IP=시작 IP 주소 +label.end.IP=종료 IP 주소 +label.remove.ip.range=IP 주소 범위 삭제 +label.ip.ranges=IP 주소 범위 +label.start.vlan=시작 VLAN +label.end.vlan=종료 VLAN +label.broadcast.domain.range=브로드캐스트 도메인 범위 +label.compute=컴퓨팅 +message.add.guest.network=손님 네트워크를 추가하시겠습니까? +label.subdomain.access=서브 도메인 접근 +label.guest.start.ip=게스트 시작 IP 주소 +label.guest.end.ip=게스트 종료 IP 주소 +label.virtual.router=가상 라우터 +label.physical.network.ID=물리 네트워크 ID +label.destination.physical.network.id=목적 물리 네트워크 ID +label.dhcp=DHCP +label.destroy.router=라우터 파기 +message.confirm.destroy.router=현재 라우터를 파기하시겠습니까? +label.change.service.offering=서비스 제공 변경 +label.view.console=콘솔 표시 +label.redundant.state=중복 상태 +label.enable.provider=제공자 사용함 +message.confirm.enable.provider=현재 제공자를 사용하시겠습니까? +label.disable.provider=제공자 사용 안 함 +message.confirm.disable.provider=현재 제공자를 사용 안 함으로 하시겠습니까? +label.shutdown.provider=제공자 종료 +message.confirm.shutdown.provider=현재 제공자를 종료하시겠습니까? +label.netScaler=NetScaler +label.add.new.NetScaler=새로운 NetScaler 추가 +label.capacity=처리 능력 +label.dedicated=전용 +label.f5=F5 +label.add.new.F5=새로운 F5 추가 +label.srx=SRX +label.providers=제공자 +label.add.new.SRX=새로운 SRX 추가 +label.timeout=시간 초과 +label.public.network=공개 네트워크 +label.private.network=사설 네트워크 +label.enable.swift=Swift 사용함 +confirm.enable.swift=Swift 기술 지원를 사용 하려면 다음 정보를 입력해 주십시오. +message.after.enable.swift=Swift가 구성되었습니다. 주의:이 페이지를 닫으면 Swift를 재구성할 수 없습니다. +label.key=키 +label.delete.NetScaler=NetScaler 삭제 +message.confirm.delete.NetScaler=NetScaler를 삭제하시겠습니까? +label.delete.F5=F5 삭제 +message.confirm.delete.F5=F5를 삭제하시겠습니까? +label.delete.SRX=SRX 삭제 +message.confirm.delete.SRX=SRX를 삭제하시겠습니까? +label.pods=Pod +label.pod.name=Pod명 +label.reserved.system.gateway=예약된 시스템 게이트웨이 +label.reserved.system.netmask=예약된 시스템 넷 마스크 +label.start.reserved.system.IP=예약된 시작 시스템 IP 주소 +label.end.reserved.system.IP=예약된 종료 시스템 IP 주소 +label.clusters=클러스터 +label.cluster.name=클러스터명 +label.host.MAC=호스트 MAC +label.agent.username=에이전트 사용자명 +label.agent.password=에이전트 암호 +message.confirm.action.force.reconnect=현재 호스트를 강제 재접속하시겠습니까? +label.resource.state=자원 상태 +label.LUN.number=LUN 번호 +message.confirm.remove.IP.range=현재 IP 주소 범위를 삭제하시겠습니까? +message.tooltip.zone.name=Zone 이름입니다. +message.tooltip.dns.1=Zone내 VM 로 사용하는 DNS 서버 이름입니다. Zone 공개 IP 주소에서 이 서버에 통신할 수 있어야 합니다. +message.tooltip.dns.2=Zone내 VM 로 사용하는 두번째 DNS 서버 이름입니다. Zone 공개 IP 주소에서 이 서버에 통신할 수 있어야 합니다. +message.tooltip.internal.dns.1=Zone내 CloudStack 내부 시스템 VM 로 사용하는 DNS 서버 이름입니다. Pod 사설 IP 주소에서 이 서버에 통신할 수 있어야 합니다. +message.tooltip.internal.dns.2=Zone내 CloudStack 내부 시스템 VM 로 사용하는 DNS 서버 이름입니다. Pod 사설 IP 주소에서 이 서버에 통신할 수 있어야 합니다. +message.tooltip.network.domain=DNS 서픽스입니다. 이 서픽스에서 게스트 VM 로 접근 하는 네트워크 맞춤형 도메인명을 만듭니다. +message.tooltip.pod.name=현재 Pod 이름입니다. +message.tooltip.reserved.system.gateway=Pod내 호스트 게이트웨이입니다. +message.tooltip.reserved.system.netmask=Pod 서브네트워크를 정하는 네트워크 프레픽스입니다. CIDR 표기를 사용합니다. +message.creating.zone=Zone을 만들었습니다. +message.creating.physical.networks=물리 네트워크를 만들었습니다. +message.configuring.physical.networks=물리 네트워크를 구성해 있습니다 +message.adding.Netscaler.device=Netscaler 기기를 추가하고 있습니다 +message.creating.pod=Pod를 만들었습니다. +message.configuring.public.traffic=공개 트래픽을 구성해 있습니다 +message.configuring.storage.traffic=스토리지 트래픽을 구성해 있습니다 +message.configuring.guest.traffic=게스트 트래픽을 구성해 있습니다 +message.creating.cluster=클러스터를 만들었습니다. +message.adding.host=호스트를 추가하고 있습니다 +message.creating.primary.storage=기본 스토리지를 만들었습니다. +message.creating.secondary.storage=2차 스토리지를 만들었습니다. +message.Zone.creation.complete=Zone을 만들었습니다. +message.enabling.zone=Zone을 사용하고 있습니다 +error.something.went.wrong.please.correct.the.following=문제가 발생했습니다. 다음 내용을 수정해 주십시오 +error.could.not.enable.zone=Zone을 사용 할 수 없습니다. +message.zone.creation.complete.would.you.like.to.enable.this.zone=Zone을 만들었습니다. 이 Zone을 사용 하시겠습니까? +message.please.add.at.lease.one.traffic.range=적어도 한 개 이상 트래픽 범위를 추가해 주십시오. +message.you.must.have.at.least.one.physical.network=적어도 한 개 이상 물리 네트워크가 필요합니다 +message.please.select.a.different.public.and.management.network.before.removing=삭제 전에 다른 공개 및 관리 네트워크를 선택해 주십시오. + +label.zone.type=Zone 종류 +label.setup.zone=Zone 설정 +label.setup.network=네트워크 설정 +label.add.resources=자원 추가 +label.launch=시작 +label.set.up.zone.type=Zone 종류 설정 +message.please.select.a.configuration.for.your.zone=Zone 구성을 선택해 주십시오. +message.desc.basic.zone= 각 VM 인스턴스에 IP 주소가 네트워크에서 직접 할당할 수 있는 단일 네트워크를 제공합니다. 보안 그룹 (전송원 IP 주소 필터)과 같은 층 세 가지 레벨 방법으로 게스트를 분리할 수 있습니다. +label.basic=기본 +message.desc.advanced.zone=보다 세련된 네트워크 기술을 지원합니다. 이 네트워크 모델을 선택하면, 보다 유연하게 게스트 네트워크를 정하고 방화벽(fire wall), VPN, 네트워크 로드 공유 장치 기술 지원와 같은 사용자 지정 한 네트워크 제공을 제공할 수 있습니다. +label.advanced=확장 +message.desc.zone=Zone은 CloudStack 환경내 최대 조직 단위로 원래 단일 데이터 센터에 해당합니다. Zone에 해서 물리적인 분리와 중복성이 제공됩니다. Zone은 한 개 이상 Pod( 각 Pod는 호스트와 기본 스토리지 서버에서 구성)와 Zone내 모든 Pod로 공유되는 2차 스토리지 서버로 구성됩니다. +label.physical.network=물리 네트워크 +label.public.traffic=공개 트래픽 +label.guest.traffic=게스트 트래픽 +label.storage.traffic=스토리지 트래픽 +message.setup.physical.network.during.zone.creation=확장 Zone을 추가할 때는 한 개 이상 물리 네트워크를 설정해야 합니다. 각 네트워크는 하이퍼 바이저상 한 가지 네트워크 카드(NIC)에 대응합니다. 각 물리 네트워크에서는 구성에 제한이 있으나, 한 가지 종류 이상 트래픽을 통신할 수 있습니다.

각 물리 네트워크에 대해서트래픽 종류를 드래그 앤 드롭해 주십시오. +label.add.physical.network=물리 네트워크 추가 +label.traffic.types=트래픽 종류 +label.management=관리 +label.guest=게스트 +label.please.specify.netscaler.info=Netscaler 정보를 지정해 주십시오 +message.public.traffic.in.advanced.zone=클라우드 내부 VM이 인터넷에 접근 하면, 공개 트래픽이 생성됩니다. 이 때문에 일반적으로 접근 가능한 IP 주소를 할당할 필요가 있습니다. 최종 사용자는 CloudStack 사용자 인터페이스를 사용해 이러한 IP 주소를 취득하고 손님 네트워크와 공개 네트워크 사이에 NAT를 구현할 수 있습니다.

인터넷 트래픽을 위해 적어도 한 개 이상 IP 주소 범위를 입력해 주십시오. +message.public.traffic.in.basic.zone=클라우드 내부 VM이 인터넷에 접근 할 때 인터넷 경유로 클라이언트에 서비스를 제공하면, 공개 트래픽이 생성됩니다. 이 때문에 일반적으로 접근 가능한 IP 주소를 할당할 필요가 있습니다. 인스턴스를 만들기하면, 게스트 IP 주소 외에이 공개 IP 주소 범위에서 주소가 하나의 인스턴스에 할당할 수 있습니다. 공개 IP 주소와 게스트 IP 주소 사이에 정적인 1대 1 NAT가 자동으로 설정 됩니다. 최종 사용자는 CloudStack 사용자 인터페이스를 사용해 추가 IP 주소를 취득하고 인스턴스와 공개 IP 주소 사이에 정적 NAT를 구현할 수도 있습니다. +message.add.pod.during.zone.creation= 각 Zone에는 한 개 이상 Pod가 필요합니다. 지금 여기서 첫번째 Pod를 추가합니다. Pod는 호스트와 기본 스토리지 서버에서 구성합니다만 이는 다음 순서로 추가합니다. 맨 처음 CloudStack 내부 관리 트래픽을 위해서 IP 주소 범위를 예약합니다. IP 주소 범위는 클라우드 내부 각 Zone에서 중복 하지 않게 예약할 필요가 있습니다. +message.guest.traffic.in.advanced.zone=손님 네트워크 트래픽은 최종 사용자 가상 머신간 통신입니다. 각 물리 네트워크 게스트 트래픽을 통신하기 위한 VLAN ID 범위를 지정해 주십시오. +message.guest.traffic.in.basic.zone=손님 네트워크 트래픽은 최종 사용자의 가상 머신간 통신입니다. CloudStack에 게스트 VM에 할당할 수 있는 IP 주소 범위를 지정해 주십시오.이 범위가 예약 끝난 시스템 IP 주소 범위와 중복 하지 않게 주의해 주십시오. +message.storage.traffic=호스트나 CloudStack 시스템 VM 등 관리 서버와 통신하는 CloudStack 내부 자원간 트래픽입니다. 여기서 스토리지 트래픽을 구성해 주십시오. +message.desc.cluster= 각 Pod에는 한 개 이상 클러스터가 필요합니다. 지금 여기서 최초 클러스터를 추가합니다. 클러스터는 호스트를 그룹화 하는 방법입니다. 한 클러스터 내부 호스트는 모두 동일한 하드웨어에서 구성되어 같은 하이퍼 바이저를 실행하고 같은 서브 네트워크상에 있어 같은 공유 스토리지에 접근 합니다. 각 클러스터는 한 개 이상 호스트와 한 개 이상 기본 스토리지 서버에서 구성됩니다. +message.desc.host= 각 클러스터에는 적어도 한 개 이상 게스트 VM를 실행하기 위한 호스트 (컴퓨터)가 필요합니다. 지금 여기서 첫번째 호스트를 추가합니다. CloudStack으로 호스트를 동작하려면 호스트에게 하이퍼 바이저를 설치하고 IP 주소를 할당해 호스트가 CloudStack 관리 서버에 접속하도록 합니다.

호스트 DNS 명 또는 IP 주소, 사용자명(원래 root)과 암호 및 호스트 분류에 사용하는 라벨을 입력해 주십시오. +message.desc.primary.storage= 각 클러스터에는 적어도 한 개 이상의 기본 스토리지 서버가 필요합니다. 지금 여기서 첫번째 서버를 추가합니다. 기본 스토리지는 클러스터 내 부 호스트상에서 동작하는 모든 VM 디스크 볼륨을 포함합니다. 기본적으로 하이퍼 바이저에서 기술 지원되는 표준에 준거한 프로토콜을 사용해 주십시오. +message.desc.secondary.storage= 각 Zone에는 적어도 한 개 이상의 NFS 즉 2차 스토리지 서버가 필요합니다. 지금 여기서 첫번째 서버를 추가합니다. 2차 스토리지는 VM 템플릿, ISO 이미지 및 VM 디스크 볼륨 스냅샷을 포함합니다. 이 서버는 Zone내 모든 호스트에서 사용할 수 있어야 합니다.

IP 주소와 내보내낼 경로를 입력해 주십시오. +label.launch.zone=Zone 시작 +message.please.wait.while.zone.is.being.created=Zone이 만들기될 때까지 잠깐 기다려 주십시오... + +label.load.balancing=네트워크 로드 공유 +label.static.nat.enabled=정적 NAT 유효 +label.zones=Zone +label.view.more=상세 표시 +label.number.of.zones=Zone수 +label.number.of.pods=Pod수 +label.number.of.clusters=클러스터수 +label.number.of.hosts=호스트수 +label.total.hosts=호스트 합계 +label.total.CPU=CPU 합계 +label.total.memory=메모리 합계 +label.total.storage=스토리지 합계 +label.purpose=목적 + +label.action.migrate.router=라우터 이전 +label.action.migrate.router.processing=라우터를 이전하는 중... +message.migrate.router.confirm=라우터 이전 위치로 호스트를 선택십시오. +label.migrate.router.to=라우터 이전 위치: + +label.action.migrate.systemvm=시스템 VM 이전 +label.action.migrate.systemvm.processing=시스템 VM를 이전하는 중 +message.migrate.systemvm.confirm=시스템 VM 이전 이전 위치로 호스트를 선택십시오. +label.migrate.systemvm.to=시스템 VM 이전 위치: + +mode=모드 +side.by.side=병렬 +inline=직렬 + +extractable=추출 가능 + +label.ocfs2=OCFS2 + +label.action.edit.host=호스트 편집 + +network.rate=네트워크 속도 + +ICMP.type=ICMP 종류 +ICMP.code=ICMP 코드 + +image.directory=이미지 디렉토리 + +label.action.create.template.from.vm=VM에서 템플릿 만들기 +label.action.create.template.from.volume=볼륨에서 템플릿 만들기 + +message.vm.create.template.confirm=템플릿 만들기하면 VM이 자동으로 재시작됩니다. + +label.action.manage.cluster=클러스터 관리 동작 +message.action.manage.cluster=클러스터를 관리 대상으로 하시겠습니까? +label.action.manage.cluster.processing=클러스터를 관리 대상으로 하는 중... + +label.action.unmanage.cluster=클러스터 비관리 동작 +message.action.unmanage.cluster=클러스터를 비관리 대상으로 하시겠습니까? +label.action.unmanage.cluster.processing=클러스터를 비관리 대상으로 하는 중... + +label.allocation.state=할당 상태 +managed.state=관리 대상 상태 + +label.default.use=기본 사용 +label.host.tags=호스트 태그 + +label.cidr=CIDR +label.cidr.list=전송원 CIDR + +label.storage.tags=스토리지 태그 + +label.redundant.router=중복 라우터 +label.is.redundant.router=중복 + +force.delete=강제 삭제 +force.delete.domain.warning=경고:이 옵션을 선택하면, 모든 내부 도메인 및 관련하는 모든 계정 정보와 그 자원이 삭제됩니다. + +force.remove=강제 해제 +force.remove.host.warning=경고:이 옵션을 선택하면, 실행중 모든 가상 머신이 강제적으로 정지되어 클러스터에서 호스트가 강제적으로 해제됩니다. + +force.stop=강제 정지 +force.stop.instance.warning=경고: 인스턴스 강제 정지는 최종 수단으로 해 주십시오. 데이터가 손실될 뿐만 아니라 가상 머신 동작이 일관하지 않게 될 가능성이 있습니다. + +label.PreSetup=PreSetup +label.SR.name = SR 명 라벨 +label.SharedMountPoint=SharedMountPoint +label.clvm=CLVM +label.volgroup=볼륨 그룹 +label.VMFS.datastore=VMFS 데이터 스토어 + +label.network.device=네트워크 기기 +label.add.network.device=네트워크 기기 추가 +label.network.device.type=네트워크 기기 종류 +label.DHCP.server.type=DHCP 서버 종류 +label.Pxe.server.type=PXE 서버 종류 +label.PING.storage.IP=PING 대상 스토리지 IP 주소 +label.PING.dir=PING 디렉토리 +label.TFTP.dir=TFTP 디렉토리 +label.PING.CIFS.username=PING CIFS 사용자명 +label.PING.CIFS.password=PING CIFS 암호 +label.CPU.cap=CPU 제한 + + +label.action.enable.zone=Zone 사용함 +label.action.enable.zone.processing=Zone을 사용 설정 중... +message.action.enable.zone=현재 Zone을 사용 하시겠습니까? +label.action.disable.zone=Zone 사용 안 함 +label.action.disable.zone.processing=Zone을 사용 안 함으로 설정 중... +message.action.disable.zone=현재 Zone을 사용 안 함으로 하시겠습니까? + +label.action.enable.pod=Pod 사용함 +label.action.enable.pod.processing=Pod를 사용 설정 중... +message.action.enable.pod=현재 Pod를 사용 하시겠습니까? +label.action.disable.pod=Pod 사용 안 함 +label.action.disable.pod.processing=Pod를 사용 안 함으로 설정 중... +message.action.disable.pod=현재 Pod를 사용 안 함으로 하시겠습니까? + +label.action.enable.cluster=클러스터 사용함 +label.action.enable.cluster.processing=클러스터를 사용 설정 중... +message.action.enable.cluster=현재 클러스터를 사용 하시겠습니까? +label.action.disable.cluster=클러스터 사용 안 함 +label.action.disable.cluster.processing=클러스터를 사용 안 함으로 설정 중... +message.action.disable.cluster=현재 클러스터를 사용 안 함으로 하시겠습니까? + +label.account.id=계정 정보 ID +label.account.name=계정 정보명 +label.account.specific=계정 정보 고유 +label.account=계정 정보 +label.accounts=계정 정보 +label.acquire.new.ip=새로운 IP 주소 취득 +label.show.ingress.rule=수신 규칙 표시 +label.hide.ingress.rule=수신 규칙을 숨기기 +label.action.attach.disk.processing=디스크를 연결하는 중... +label.action.attach.disk=디스크 연결 +label.action.attach.iso.processing=ISO를 연결하는 중... +label.action.attach.iso=ISO 연결 +label.action.cancel.maintenance.mode.processing=유지 보수 모드를 취소하는 중... +label.action.cancel.maintenance.mode=유지 보수 모드 취소 +label.action.change.password=암호 변경 +label.action.change.service.processing=서비스를 변경하는 중... +label.action.change.service=서비스 변경 +label.action.copy.ISO.processing=ISO를 복사하는 중... +label.action.copy.ISO=ISO 복사 +label.action.copy.template.processing=템플릿을 복사하는 중... +label.action.copy.template=템플릿 복사 +label.action.create.template.processing=템플릿을 만드는 중... +label.action.create.template=템플릿 만들기 +label.action.create.vm.processing=VM를 만드는 중... +label.action.create.vm=VM 만들기 +label.action.create.volume.processing=볼륨을 만드는 중... +label.action.create.volume=볼륨 만들기 +label.action.delete.IP.range.processing=IP 주소 범위를 삭제하는 중... +label.action.delete.IP.range=IP 주소 범위 삭제 +label.action.delete.ISO.processing=ISO를 삭제하는 중... +label.action.delete.ISO=ISO 삭제 +label.action.delete.account.processing=계정 정보를 삭제하는 중... +label.action.delete.account=계정 정보 삭제 +label.action.delete.cluster.processing=클러스터를 삭제하는 중... +label.action.delete.cluster=클러스터 삭제 +label.action.delete.disk.offering.processing=디스크 제공을 삭제하는 중... +label.action.delete.disk.offering=디스크 제공 삭제 + +label.action.update.resource.count=자원 수 업데이트 +label.action.update.resource.count.processing=자원 수를 업데이트하는 중... + +label.action.delete.domain=도메인 삭제 +label.action.delete.domain.processing=도메인을 삭제하는 중... + +label.action.delete.firewall.processing=방화벽(fire wall)를 삭제하는 중... +label.action.delete.firewall=방화벽(fire wall) 규칙 삭제 +label.action.delete.ingress.rule.processing=수신 규칙을 삭제하는 중... +label.action.delete.ingress.rule=수신 규칙 삭제 +label.action.delete.load.balancer.processing=네트워크 로드 공유 장치를 삭제하는 중... +label.action.delete.load.balancer=네트워크 로드 공유 규칙 삭제 +label.action.edit.network.processing=네트워크를 편집하는 중... +label.action.edit.network=네트워크 편집 +label.action.delete.network.processing=네트워크를 삭제하는 중... +label.action.delete.network=네트워크 삭제 +label.action.delete.pod.processing=Pod를 삭제하는 중... +label.action.delete.pod=Pod 삭제 +label.action.delete.primary.storage.processing=기본 스토리지를 삭제하는 중... +label.action.delete.primary.storage=기본 스토리지 삭제 +label.action.delete.secondary.storage.processing=2차 스토리지를 삭제하는 중... +label.action.delete.secondary.storage=2차 스토리지 삭제 +label.action.delete.security.group.processing=보안 그룹을 삭제하는 중... +label.action.delete.security.group=보안 그룹 삭제 +label.action.delete.service.offering.processing=서비스제공을 삭제하는 중... +label.action.delete.service.offering=서비스제공 삭제 +label.action.delete.snapshot.processing=스냅샷을 삭제하는 중... +label.action.delete.snapshot=스냅샷 삭제 +label.action.delete.template.processing=템플릿을 삭제하는 중... +label.action.delete.template=템플릿 삭제 +label.action.delete.user.processing=사용자를 삭제하는 중... +label.action.delete.user=사용자 삭제 +label.action.delete.volume.processing=볼륨을 삭제하는 중... +label.action.delete.volume=볼륨 삭제 +label.action.delete.zone.processing=Zone을 삭제하는 중... +label.action.delete.zone=Zone 삭제 +label.action.destroy.instance.processing=인스턴스를 파기하는 중... +label.action.destroy.instance=인스턴스 파기 +label.action.destroy.systemvm.processing=시스템 VM를 파기하는 중... +label.action.destroy.systemvm=시스템 VM 파기 +label.action.detach.disk.processing=디스크를 분리 하는 중... +label.action.detach.disk=디스크 분리 +label.action.detach.iso.processing=ISO를 분리 하는 중... +label.action.detach.iso=ISO 분리 +label.action.disable.account.processing=계정 정보를 중지하는 중... +label.action.disable.account=계정 정보 중지 +label.action.disable.static.NAT.processing=정적 NAT를 중지하는 중... +label.action.disable.static.NAT=정적 NAT 사용 안 함 +label.action.disable.user.processing=사용자를 중지하는 중... +label.action.disable.user=사용자 중지 +label.action.download.ISO=ISO 다운로드 +label.action.download.template=템플릿 다운로드 +label.action.download.volume.processing=볼륨을 다운로드하는 중... +label.action.download.volume=볼륨 다운로드 +label.action.edit.ISO=ISO 편집 +label.action.edit.account=계정 정보 편집 +label.action.edit.disk.offering=디스크 제공 편집 +label.action.edit.domain=도메인 편집 +label.action.edit.global.setting=글로벌 설정 편집 +label.action.edit.instance=인스턴스 편집 +label.action.edit.network.offering=네트워크 제공 편집 +label.action.edit.pod=Pod 편집 +label.action.edit.primary.storage=기본 스토리지 편집 +label.action.edit.resource.limits=자원 제한 편집 +label.action.edit.service.offering=서비스 제공 편집 +label.action.edit.template=템플릿 편집 +label.action.edit.user=사용자 편집 +label.action.edit.zone=Zone 편집 +label.action.enable.account.processing=계정 정보를 사용 설정 중... +label.action.enable.account=계정 정보 사용함 +label.action.enable.maintenance.mode.processing=유지 보수 모드를 사용 설정 중... +label.action.enable.maintenance.mode=유지 보수 모드 사용함 +label.action.enable.static.NAT.processing=정적 NAT를 사용 설정 중... +label.action.enable.static.NAT=정적 NAT 사용함 +label.action.enable.user.processing=사용자를 사용 설정 중... +label.action.enable.user=사용자 사용함 +label.action.force.reconnect.processing=재접속하는 중... +label.action.force.reconnect=강제재접속 +label.action.generate.keys.processing=키를 생성하는 중... +label.action.generate.keys=키 생성 +label.action.lock.account.processing=계정 정보를 잠그는 중... +label.action.lock.account=계정 정보 잠금 +label.action.migrate.instance=인스턴스 이전 +label.action.migrate.instance.processing=인스턴스를 이전하는 중... +label.action.reboot.instance.processing=인스턴스를 재시작하는 중... +label.action.reboot.instance=인스턴스 재시작 +label.action.reboot.router.processing=라우터를 재시작하는 중... +label.action.reboot.router=라우터 재시작 +label.action.reboot.systemvm.processing=시스템 VM를 재시작하는 중... +label.action.reboot.systemvm=시스템 VM 재시작 +label.action.recurring.snapshot=정기 스냅샷 +label.action.release.ip.processing=IP 주소를 해제하는 중... +label.action.release.ip=IP 주소 해제 +label.action.remove.host.processing=호스트를 삭제하는 중... +label.action.remove.host=호스트 삭제 +label.action.reset.password.processing=암호를 재설정 하는 중... +label.action.reset.password=암호 재설정 +label.action.resource.limits=자원 제한 +label.action.restore.instance.processing=인스턴스를 복원하는 중... +label.action.restore.instance=인스턴스 복원 +label.action.start.instance.processing=인스턴스를 시작하는 중... +label.action.start.instance=인스턴스 시작 +label.action.start.router.processing=라우터를 시작하는 중... +label.action.start.router=라우터 시작 +label.action.start.systemvm.processing=시스템 VM를 시작하는 중... +label.action.start.systemvm=시스템 VM 시작 +label.action.stop.instance.processing=인스턴스를 정지하는 중... +label.action.stop.instance=인스턴스 정지 +label.action.stop.router.processing=라우터를 정지하는 중... +label.action.stop.router=라우터 정지 +label.action.stop.systemvm.processing=시스템 VM를 정지하는 중... +label.action.stop.systemvm=시스템 VM 정지 +label.action.take.snapshot.processing=스냅샷을 만드는 중.... +label.action.take.snapshot=스냅샷 만들기 +label.action.update.OS.preference.processing=OS 기본 설정을 업데이트하는 중... +label.action.update.OS.preference=OS 기본 설정 업데이트 +label.actions=작업 +label.active.sessions=활성 세션 +label.add.account=계정 정보 추가 +label.add.by.cidr=CIDR 로 추가 +label.add.by.group=그룹에서 추가 +label.add.cluster=클러스터 추가 +label.add.direct.iprange=직접 IP 주소 범위 추가 +label.add.disk.offering=디스크 제공 추가 +label.add.domain=도메인 추가 +label.add.firewall=방화벽(fire wall) 규칙 추가 +label.add.host=호스트 추가 +label.add.ingress.rule=수신 규칙 추가 +label.add.ip.range=IP 주소 범위 추가 +label.add.load.balancer=네트워크 로드 공유 장치 추가 +label.add.more=다른 항목 추가 +label.add.network=네트워크 추가 +label.add.pod=Pod 추가 +label.add.primary.storage=기본 스토리지 추가 +label.add.secondary.storage=2차 스토리지 추가 +label.add.security.group=보안 그룹 추가 +label.add.service.offering=서비스제공 추가 +label.add.template=템플릿 추가 +label.add.user=사용자 추가 +label.add.vlan=VLAN 추가 +label.add.volume=볼륨 추가 +label.add.zone=Zone 추가 +label.add=추가 +label.adding.cluster=클러스터를 추가중... +label.adding.failed=추가할 수 없음 +label.adding.pod=Pod를 추가 가능 +label.adding.processing=추가하는 중... +label.adding.succeeded=추가 완료 +label.adding.user=사용자 추가 +label.adding.zone=Zone 추가 +label.adding=정보 추가 +label.additional.networks=추가 네트워크 +label.admin.accounts=관리자 계정 정보 +label.admin=관리자 +label.advanced.mode=확장 모드 +label.advanced.search=고도 검색 +label.advanced=확장 +label.alert=알림 체제 +label.algorithm=알고리즘 +label.allocated=할당 완료 상태 +label.api.key=API 키 +label.assign.to.load.balancer=네트워크 로드 공유 장치에 인스턴스를 할당 +label.assign=할당 +label.associated.network.id=관련 네트워크 ID +label.attached.iso=연결 ISO +label.availability.zone=이용 가능 Zone +label.availability=가용성 +label.available.public.ips=사용 가능 공개 IP 주소 +label.available=사용 가능 +label.back=뒤로 +label.basic.mode=기본 모드 +label.bootable=부팅 가능 +label.broadcast.domain.type=브로드캐스트 도메인 종류 +label.by.account=계정 정보 +label.by.availability=가용성 +label.by.domain=도메인 +label.by.end.date=종료일 +label.by.level=레벨 +label.by.pod=Pod +label.by.role=역할 +label.by.start.date=시작일 +label.by.state=상태 +label.by.traffic.type=트래픽 종류 +label.by.type.id=종류 ID +label.by.type=종류 +label.by.zone=Zone +label.bytes.received=수신 바이트 +label.bytes.sent=전송 바이트 +label.cancel=취소 +label.certificate=인증서 +label.privatekey=PKC#8 비밀 키 +label.domain.suffix=DNS 도메인 (예: xyz.com) +label.character=문자 +label.cidr.account=CIDR 또는 계정 정보/보안 그룹 +label.close=닫기 +label.cloud.console=클라우드 관리 콘솔 +label.cloud.managed=Cloud.com 관리 +label.cluster.type=클러스터 종류 +label.cluster=클러스터 +label.code=코드 +label.confirmation=확인 +label.cpu.allocated.for.VMs=VM에 할당 완료 CPU +label.cpu.allocated=할당 완료 CPU +label.cpu.utilized=CPU 사용율 +label.cpu=CPU +label.created=일시 만들기 +label.cross.zones=크로스 존 +label.custom.disk.size=맞춤 디스크 크기 +label.daily=매일 +label.data.disk.offering=데이타 디스크 제공 +label.date=날짜 +label.day.of.month=매월 지정일 +label.day.of.week=매주 지정일 +label.delete=삭제 +label.deleting.failed=삭제할 수 없음 +label.deleting.processing=삭제하는 중... +label.description=설명 +label.detaching.disk=디스크를 분리함 +label.details=상세 +label.device.id=기기 ID +label.disabled=사용 안함 +label.disabling.vpn.access=VPN 접근를 사용 안 함으로 설정 중 +label.disk.allocated=할당 완료 디스크 +label.disk.offering=디스크 제공 +label.disk.size.gb=디스크 크기(GB 단위) +label.disk.size=디스크 크기 +label.disk.total=디스크 합계 +label.disk.volume=디스크 볼륨 +label.display.text=표시 텍스트 +label.dns.1=DNS 1 +label.dns.2=DNS 2 +label.domain.admin=도메인 관리자 +label.domain.id=도메인 ID +label.domain.name=도메인명 +label.domain=도메인 +label.double.quotes.are.not.allowed=큰 따옴표 사용할 수 없음 +label.download.progress=다운로드 진행 사항 +label.edit=편집 +label.email=전자 메일 +label.enabling.vpn.access=VPN 접근를 사용 하고 있음 +label.enabling.vpn=VPN를 사용 하고 있음 +label.end.port=종료 포토 +label.endpoint.or.operation=엔드 포인트 또는 작업 +label.error.code=오류 코드 +label.error=오류 +label.esx.host=ESX/ESXi 호스트 +label.example=예 +label.failed=실패 +label.featured=추천 +label.firewall=방화벽(fire wall) +label.first.name=이름 +label.format=형식 +label.friday=금요일 +label.full=전체 +label.gateway=게이트웨이 +label.general.alerts=일반 알림 체제 +label.generating.url=URL를 생성하고 있음 +label.go.step.2=단계 2으로 +label.go.step.3=단계 3으로 +label.go.step.4=단계 4으로 +label.go.step.5=단계 5으로 +label.group.optional=그룹(옵션) +label.group=그룹 +label.guest.cidr=게스트 CIDR +label.guest.gateway=게스트 게이트웨이 +label.guest.ip.range=게스트 IP 주소 범위 +label.guest.ip=게스트 IP 주소 +label.guest.netmask=게스트 넷 마스크 +label.ha.enabled=고가용성 사용함 +label.help=도움말 +label.host.alerts=호스트 알림 체계 +label.host.name=호스트명 +label.host=호스트 +label.hosts=호스트 +label.hourly=매시간 +label.hypervisor.type=하이퍼 바이저 종류 +label.hypervisor=하이퍼 바이저 +label.id=ID +label.info=정보 +label.ingress.rule=수신 규칙 +label.initiated.by=시작 사용자 +label.instance.limits=인스턴스 제한 +label.instance.name=인스턴스명 +label.instance=인스턴스 +label.instances=인스턴스 +label.internal.dns.1=내부 DNS 1 +label.internal.dns.2=내부 DNS 2 +label.interval.type=간격 종류 +label.invalid.integer=유효하지 않은 정수값 +label.invalid.number=유효하지 않은 숫자값 +label.ip.address=IP 주소 +label.ip.allocations=IP 주소 할당 +label.ip.limits=공개 IP 주소 제한 +label.ip.or.fqdn=IP 주소 또는 FQDN +label.ip.range=IP 주소 범위 +label.ip=IP +label.ips=IP +label.is.default=기본 +label.is.shared=공유 +label.is.system=시스템 +label.iscsi=iSCSI +label.iso.boot=ISO 시작 +label.iso=ISO +label.isolation.mode=분리 모드 +label.keep=유지 +label.lang.chinese=중국어(간체) +label.lang.english=영어 +label.lang.japanese=일본어 +label.lang.spanish=스페인어 +label.last.disconnected=마지막 종료 시점 +label.last.name=성 +label.level=레벨 +label.linklocal.ip=링크 로컬 IP 주소 +label.load.balancer=네트워크 로드 공유 장치 +label.loading=로드 하는 중 +label.local=로컬 +label.login=로그인 +label.logout=로그아웃 +label.lun=LUN +label.manage=관리 +label.maximum=최대 +label.memory.allocated=할당완료 메모리 +label.memory.total=메모리 합계 +label.memory.used=메모리 사용량 +label.memory=메모리 +label.menu.accounts=계정 정보 +label.menu.alerts=알림 체계 +label.menu.all.accounts=모든 계정 정보 +label.menu.all.instances=모든 인스턴스 +label.menu.community.isos=커뮤니티 ISO +label.menu.community.templates=커뮤니티 템플릿 +label.menu.configuration=구성 +label.menu.dashboard=대시 보드 +label.menu.destroyed.instances=파기된 인스턴스 +label.menu.disk.offerings=디스크제공 +label.menu.domains=도메인 +label.menu.events=이벤트 +label.menu.featured.isos=추천 ISO +label.menu.featured.templates=추천 템플릿 +label.menu.global.settings=글로벌 설정 +label.menu.instances=인스턴스 +label.menu.ipaddresses=IP 주소 +label.menu.isos=ISO +label.menu.my.accounts=나의 계정 정보 +label.menu.my.instances=나의 인스턴스 +label.menu.my.isos=나의 ISO +label.menu.my.templates=나의 템플릿 +label.menu.network.offerings=네트워크 제공 +label.menu.network=네트워크 +label.menu.physical.resources=물리 자원 +label.menu.running.instances=실행 중 인스턴스 +label.menu.security.groups=보안 그룹 +label.menu.service.offerings=서비스제공 +label.menu.snapshots=스냅샷 +label.menu.stopped.instances=정지된 인스턴스 +label.menu.storage=스토리지 +label.menu.system.vms=시스템 VM +label.menu.system=시스템 +label.menu.templates=템플릿 +label.menu.virtual.appliances=가상 아프라이안스 +label.menu.virtual.resources=가상 자원 +label.menu.volumes=볼륨 +label.migrate.instance.to=인스턴스 이전 위치: +label.minimum=최소 +label.minute.past.hour=분(매시) +label.monday=월요일 +label.monthly=매월 +label.more.templates=다른 템플릿 +label.my.account=나의 계정 정보 +label.name.optional=이름(옵션) +label.name=이름 +label.netmask=넷 마스크 +label.network.desc=네트워크 설명 +label.network.domain=네트워크 도메인 +label.network.id=네트워크 ID +label.network.name=네트워크명 +label.network.offering.display.text=네트워크 제공 표시 텍스트 +label.network.offering.id=네트워크 제공 ID +label.network.offering.name=네트워크 제공명 +label.network.offering=네트워크 제공 +label.network.rate=네트워크 속도 +label.network.read=네트워크 읽기 +label.network.type=네트워크 종류 +label.network.write=네트워크 기입 +label.network=네트워크 +label.new.password=새로운 암호 +label.next=다음 +label.nfs.server=NFS 서버 +label.nfs.storage=NFS 스토리지 +label.nfs=NFS +label.nics=NIC +label.no.actions=실행할 수 있는 작업 없음 +label.no.alerts=최근 알림 체계 없음 +label.no.errors=최근 오류는 없음 +label.no.isos=사용할 수 있는 ISO 없음 +label.no.items=사용할 수 있는 항목 없음 +label.no.security.groups=사용할 수 있는 보안 그룹 없음 +label.no.thanks=설정 안 함 +label.no=아니오 +label.none=없음 +label.not.found=검색 결과 없음 +label.num.cpu.cores=CPU 코어수 +label.numretries=재시행 회수 +label.offer.ha=고가용성 제공 +label.optional=옵션 +label.os.preference=OS 기본 설정 +label.os.type=OS 종류 +label.owned.public.ips=소유 공개 IP 주소 +label.owner.account=소유자 계정 정보 +label.owner.domain=소유자 도메인 +label.parent.domain=부모 도메인 +label.password.enabled=암호 관리 사용 +label.password=암호 +label.path=경로 +label.please.wait=기다려 주십시오... +label.pod=Pod +label.port.forwarding=포토 전송 +label.port.range=포토 범위 +label.prev=뒤로 +label.primary.allocated=할당 완료 기본 스토리지 +label.primary.network=기본 네트워크 +label.primary.storage=기본 스토리지 +label.primary.used=기본 스토리지 사용량 +label.private.interface=사설 인터페이스 +label.private.ip.range=사설 IP 주소 범위 +label.private.ip=사설 IP 주소 +label.private.ips=사설 IP 주소 +label.private.port=사설 포트 +label.private.zone=사설 Zone +label.protocol=프로토콜 +label.public.interface=공개 인터페이스 +label.public.ip=공개 IP 주소 +label.public.ips=공개 IP 주소 +label.public.port=공개 포트 +label.public.zone=공개 Zone +label.public=공개 +label.recent.errors=최근 오류 +label.refresh=업데이트 +label.related=관련 +label.remove.from.load.balancer=네트워크 로드 공유 장치에서 인스턴스를 삭제하는 중 +label.removing.user=사용자를 삭제하는 중 +label.required=필수 사항 +label.reserved.system.ip=예약된 시스템 IP 주소 +label.resource.limits=자원 제한 +label.resource=자원 +label.resources=자원 +label.role=역할 +label.root.disk.offering=루트 디스크제공 +label.running.vms=실행중 VM +label.saturday=토요일 +label.save=저장 +label.saving.processing=저장하는 중... +label.scope=범위 +label.search=검색 +label.secondary.storage=2차 스토리지 +label.secondary.used=2차 스토리지 사용량 +label.secret.key=비밀 키 +label.security.group.name=보안 그룹명 +label.security.group=보안 그룹 +label.security.groups.enabled=보안 그룹 유효 +label.security.groups=보안 그룹 +label.sent=전송된 상태 +label.server=서버 +label.service.offering=서비스제공 +label.system.service.offering=시스템 서비스 제공 +label.session.expired=세션 유효기간이 끊어짐 +label.shared=공유 +label.size=크기 +label.snapshot.limits=스냅샷 제한 +label.snapshot.name=스냅샷 이름 +label.snapshot.s=스냅샷 +label.snapshot.schedule=정기 스냅샷 설정 +label.snapshot=스냅샷 +label.snapshots=스냅샷 +label.source.nat=전송원 NAT +label.specify.vlan=VLAN 지정 +label.start.port=시작 포토 +label.state=상태 +label.static.nat.to=정적 NAT 설정 위치: +label.static.nat=정적 NAT +label.statistics=통계 +label.status=상태 +label.step.1.title=단계 1. 템플릿 선택 +label.step.1=단계 1 +label.step.2.title=단계 2. 서비스 제공 +label.step.2=단계 2 +label.step.3.title=단계 3. 디스크 제공 선택 +label.step.3=단계 3 +label.step.4.title=단계 4. 네트워크 +label.step.4=단계 4 +label.step.5.title=단계 5. 최종 확인 +label.step.5=단계 5 +label.stopped.vms=정지 중 VM +label.storage.type=스토리지 종류 +label.storage=스토리지 +label.submit=보내기 +label.submitted.by=[사용자: ] +label.succeeded=완료 +label.sunday=일요일 +label.system.capacity=시스템 처리 능력 +label.system.vm.type=시스템 VM 종류 +label.system.vm=시스템 VM +label.system.vms=시스템 VM +label.tagged=태그 +label.tags=태그 +label.target.iqn=타겟 IQN +label.template.limits=템플릿 제한 +label.template=템플릿 +label.theme.default=기본 테마 +label.theme.grey=맞춤- 회색조 +label.theme.lightblue=맞춤 - 라이트 블루 +label.thursday=목요일 +label.time.zone=시간대 +label.time=시각 +label.timeout.in.second = 시간 초과 (초) +label.timezone=시간대 +label.total.cpu=CPU 합계 +label.total.vms=VM 합계 +label.traffic.type=트래픽 종류 +label.tuesday=화요일 +label.type.id=종류 ID +label.type=종류 +label.unavailable=사용 불가 +label.unlimited=무제한 +label.untagged=태그 없음 +label.update.ssl.cert=SSL 인증서 업데이트 +label.update.ssl=SSL 인증서 업데이트 +label.updating=업데이트하고 있는 중 +label.url=URL +label.usage.interface=사용 상황 측정 인터페이스 +label.used=사용 중 +label.user=사용자 +label.username=사용자명 +label.users=사용자 +label.value=값 +label.vcenter.cluster=vCenter 클러스터 +label.vcenter.datacenter=vCenter 데이터 센터 +label.vcenter.datastore=vCenter 데이터 스토어 +label.vcenter.host=vCenter 호스트 +label.vcenter.password=vCenter 암호 +label.vcenter.username=vCenter 사용자명 +label.version=버전 +label.virtual.appliance=가상 어플라이언스 +label.virtual.appliances=가상 어플라이언스 +label.virtual.network=가상 네트워크 +label.vlan.id=VLAN ID +label.vlan.range=VLAN 범위 +label.vm.add=인스턴스 추가 +label.vm.destroy=파기 +label.vm.reboot=재시작 +label.vm.start=시작 +label.vm.stop=정지 +label.vmfs=VMFS +label.vms=VM +label.volume.limits=볼륨 제한 +label.volume.name=볼륨명 +label.volume=볼륨 +label.volumes=볼륨 +label.vsphere.managed=vSphere 관리 +label.waiting=대기하는 중 +label.warn=경고 +label.wednesday=수요일 +label.weekly=매주 +label.welcome.cloud.console=관리 콘솔에 오신것을 환영합니다! +label.welcome=어서 오십시오 +label.yes=예 +label.zone.id=Zone ID +label.zone.step.1.title=단계 1. 네트워크 선택 +label.zone.step.2.title=단계 2. Zone 추가 +label.zone.step.3.title=단계 3. Pod 추가 +label.zone.step.4.title=단계 4. IP 주소 범위 추가 +label.zone.wide=Zone 전체 +label.zone=Zone + +#Messages +message.acquire.public.ip=새로운 IP 주소를 취득하는 Zone을 선택해 주십시오. +message.action.cancel.maintenance.mode=현재 유지 보수를 취소하시겠습니까? +message.action.cancel.maintenance=호스트 유지 보수는 정상적으로 취소되었습니다. 처리에는 몇 분 정도 걸릴 수 있습니다. +message.action.delete.ISO.for.all.zones=이 ISO는 모든 Zone에서 사용하고 있습니다. 모든 Zone에서 삭제하시겠습니까? +message.action.delete.ISO=현재 ISO를 삭제하시겠습니까? +message.action.delete.cluster=현재 클러스터를 삭제하시겠습니까? +message.action.delete.disk.offering=현재 디스크제공을 삭제하시겠습니까? +message.action.delete.domain=현재 도메인을 삭제하시겠습니까? +message.action.delete.external.firewall=현재 외부 방화벽(fire wall)를 삭제하시겠습니까? 경고: 같은 외부 방화벽(fire wall)를 다시 추가할 경우는 기기 사용 상황 데이터를 재설정해야 합니다. +message.action.delete.external.load.balancer=현재 외부 네트워크 로드 공유 장치를 삭제하시겠습니까? 경고: 같은 외부 네트워크 로드 공유 장치를 다시 추가할 경우는 기기 사용 상황 데이터를 재설정해야 합니다. +message.action.delete.ingress.rule=현재 수신 규칙을 삭제하시겠습니까? +message.action.delete.network=현재 네트워크를 삭제하시겠습니까? +message.action.delete.pod=현재 Pod를 삭제하시겠습니까? +message.action.delete.primary.storage=현재 기본 스토리지를 삭제하시겠습니까? +message.action.delete.secondary.storage=현재 2차 스토리지를 삭제하시겠습니까? +message.action.delete.security.group=현재 보안 그룹을 삭제하시겠습니까? +message.action.delete.service.offering=현재 서비스제공을 삭제하시겠습니까? +message.action.delete.snapshot=현재 스냅샷을 삭제하시겠습니까? +message.action.delete.template.for.all.zones=그 템플릿은 모든 Zone에서 사용되어 있습니다. 모든 Zone에서 삭제하시겠습니까? +message.action.delete.template=현재 템플릿을 삭제하시겠습니까? +message.action.delete.volume=현재 볼륨을 삭제하시겠습니까? +message.action.delete.zone=현재 Zone을 삭제하시겠습니까? +message.action.destroy.instance=현재 인스턴스를 파기하시겠습니까? +message.action.destroy.systemvm=현재 시스템 VM를 파기하시겠습니까? +message.action.disable.static.NAT=정적 NAT를 사용 안 함으로 설정하시겠습니까? +message.action.enable.maintenance=호스트를 유지 보수할 준비를 할 수 있었습니다. 이 호스트상 VM 수에 따라서 처리에 몇 분 이상 걸릴 가능성이 있습니다. +message.action.force.reconnect=호스트는 강제적으로 재접속했습니다. 이 처리에는 몇 분 이상 걸릴 가능성이 있습니다 +message.action.host.enable.maintenance.mode=유지 보수 모드를 사용 하면, 이 호스트로 실행 중인 모든 인스턴스를 다른 사용가능 호스트에게 실시간 이전됩니다. +message.action.instance.reset.password=현재 가상 머신 루트 암호를 변경하시겠습니까? +message.action.primarystorage.enable.maintenance.mode=경고: 기본 스토리지를 유지 보수 모드로 하면 그 스토리지상 볼륨을 사용하는 모든 VM가 정지합니다. 실행하시겠습니까? +message.action.reboot.instance=현재 인스턴스를 재시작하시겠습니까? +message.action.reboot.systemvm=현재 시스템 VM을 재시작하시겠습니까? +message.action.release.ip=현재 IP 주소를 해제하시겠습니까? +message.action.restore.instance=현재 인스턴스를 복원하시겠습니까? +message.action.start.instance=현재 인스턴스를 시작하시겠습니까? +message.action.start.router=현재 라우터를 시작하시겠습니까? +message.action.start.systemvm=현재 시스템 VM을 시작하시겠습니까? +message.action.stop.instance=현재 인스턴스를 정지하시겠습니까? +message.action.stop.systemvm=현재 시스템 VM을 정지하시겠습니까? +message.action.take.snapshot=현재 볼륨 스냅샷을 만드시겠습니까? +message.add.cluster.zone=Zone 에 하이퍼 바이저로 관리되는 클러스터를 추가합니다. +message.add.cluster=Zone Pod 에 하이퍼 바이저로 관리되는 클러스터를 추가합니다. +message.add.disk.offering=새로운 디스크 제공을 추가하기 위해 다음 파라미터를 지정해 주십시오. +message.add.firewall=Zone에 방화벽(fire wall)을 추가합니다. +message.add.host=새로운 호스트를 추가하기 위해 아래 파라미터를 지정해 주십시오. +message.add.ip.range.direct.network=Zone 직접 네트워크 에 IP 주소 범위를 추가합니다 +message.add.ip.range.to.pod=

Pod 에 IP 주소 범위를 추가합니다.

+message.add.ip.range=Zone 공개 네트워크에 IP 주소 범위를 추가합니다. +message.add.load.balancer=Zone에 네트워크 로드 공유 장치를 추가합니다. +message.add.network=Zone 에 새로운 네트워크를 추가합니다. +message.add.pod=Zone 에 새로운 Pod를 추가합니다. +message.add.primary.storage=Zone Pod 에 새로운 기본 스토리지를 추가합니다. +message.add.primary=새로운 기본 스토리지를 추가하기 위해 아래 파라미터를 지정해 주십시오. +message.add.secondary.storage=Zone 에 새로운 스토리지를 추가합니다 +message.add.service.offering=새로운 컴퓨팅 자원 제공을 추가하기 위해서, 다음 데이터를 입력해 주십시오. +message.add.template=새로운 템플릿을 만들기하기 위해 아래 데이터를 입력해 주십시오. +message.add.volume=새로운 볼륨을 추가하기 위해 아래 데이터를 입력해 주십시오. +message.additional.networks.desc=가상 인스턴스가 접속하는 추가 네트워크를 선택해 주십시오. +message.advanced.mode.desc=VLAN 기술 지원를 사용 하는 경우는 이 네트워크 모델을 선택해 주십시오.이 모델에서는 가장 유연하게 카스탐네트워크 제공을 제공할 수 있어 방화벽(fire wall), VPN, 네트워크 로드 공유 장치 기술 지원 외에, 직접 네트워크와 가상 네트워크도 사용 할 수 있습니다. +message.advanced.security.group=게스트 VM를 분리하기 위해서 보안 그룹을 사용하는 경우는 이 옵션을 선택해 주십시오. +message.advanced.virtual=게스트 VM를 분리하기 위해서 존 전체 VLAN를 사용하는 경우는 이 옵션을 선택해 주십시오. +message.allow.vpn.access=VPN 접근를 허가하는 사용자 사용자명과 암호를 입력해 주십시오. +message.attach.iso.confirm=현재 가상 인스턴스에 ISO 파일을 연결 하시겠습니까? +message.attach.volume=새로운 볼륨을 연결 하기 위해 아래 데이터를 입력해 주십시오.Windows 베이스 가상 머신에 디스크 볼륨을 연결 하는 경우는 연결 한 디스크를 인식하기 위해서 인스턴스를 재시작할 필요가 있습니다. +message.basic.mode.desc=VLAN 기술 지원가불필요한경우는 이 네트워크 모델을 선택해 주십시오.이 네트워크 모델로 만들기되는 모든 가상 인스턴스에 네트워크에서 직접 IP 주소를 할당할 수 있어 보안 그룹을 사용해 보안와 분리가 제공됩니다. +message.change.offering.confirm=현재 가상 인스턴스 서비스제공을 변경하시겠습니까? +message.copy.iso.confirm=ISO를 다음 장소에 복사하시겠습니까? +message.copy.template=존 으에서 템플릿 XXX를 다음 장소에 복사합니다: +message.create.template.vm=템플릿 으에서 VM를 만들었습니다. +message.create.template.volume=디스크 볼륨 템플릿을 만들기하기 전에, 다음 정보를 지정해 주십시오.볼륨 크기에 따라서는 템플릿 만들기에는 몇분 이상 걸릴 가능성이 있습니다. +message.delete.account=현재 계정 정보를 삭제하시겠습니까? +message.detach.iso.confirm=현재 가상 인스턴스에서 ISO 파일을 분리 하시겠습니까? +message.disable.account=현재 계정 정보를 사용 안 함으로 하시겠습니까?이 계정 정보 모든 사용자가 클라우드 자원에 접근 할 수 없게 됩니다. 실행중 모든 가상 머신은 금방에 종료 됩니다. +message.disable.vpn.access=VPN 접근를 사용 안 함으로 하시겠습니까? +message.download.ISO=ISO를 다운로드하려면 00000을 클릭합니다. +message.download.template=템플릿을 다운로드하려면 00000을 클릭합니다. +message.download.volume=볼륨을 다운로드하려면 00000을 클릭합니다. +message.edit.confirm=[저장]을 클릭하기 전으로 변경 내용을 확인해 주십시오. +message.edit.limits=다음 자원에 제한을 지정해 주십시오.「-1」은 자원 만들기에 제한이 없다는 의미입니다. +message.enable.account=현재 계정 정보를 사용 하시겠습니까? +message.enable.vpn.access=현재이 IP 주소에 대한 VPN는 유효하지 않은입니다. VPN 접근를 사용 하시겠습니까? +message.enabled.vpn.ip.sec=IPSec 사전 공유 키: +message.enabled.vpn=현재 VPN 접근 사용 설정되어 있습니다. 다음 IP 주소 경유로 접근 할 수 있습니다. +message.launch.vm.on.private.network=사적 전용 네트워크로 인스턴스를 시작합니까? +message.lock.account=현재 계정 정보를 잠그어도 좋습니까? 이 계정 정보 모든 사용자가 클라우드 자원을 관리할 수 없게 됩니다. 그 후도 기존 Zone 자원에는 접근 할 수 있습니다. +message.migrate.instance.confirm=가상 인스턴스 이전 위치는 다음 호스트로 하시겠습니까? +message.new.user=계정 정보에 새로운 사용자를 추가하기 위해 아래 정보를 지정해 주십시오. +message.no.network.support.configuration.not.true=보안 그룹이 유효한 Zone이 없기 때문에 추가 네트워크 기능은 없습니다. 단계 5로 진행해 주십시오. +message.no.network.support=하이퍼 바이저로서 vSphere를 선택했으나 이 하이퍼 바이저에 추가 네트워크 기능은 없습니다. 단계 5로 진행해 주십시오. +message.number.clusters=

클러스터

+message.number.hosts=

호스트

+message.number.pods=

Pod

+message.number.storage=

기본 스토리지 볼륨

+message.number.zones=

Zone

+message.remove.vpn.access=다음 사용자에서 VPN 접근를 삭제하시겠습니까? +message.restart.mgmt.server=새로운 설정을 사용 하기 위해 관리 서버를 재시작해 주십시오. +message.restart.mgmt.usage.server=새로운 설정을 사용 하기 위해 관리 서버와 사용 상황 측정 서버를 재시작해 주십시오. +message.security.group.usage=(해당하는 보안 그룹을 모두 선택하려면 Ctrl 키를 누르면서 클릭해 주십시오) +message.snapshot.schedule=다음 옵션에서 선택한 정책 기본 설정을 적용하여 정기 스냅샷 스케줄을 설정 할 수 있습니다. +message.step.1.continue=실행하려면 템플릿 또는 ISO를 선택해 주십시오. +message.step.1.desc=새로운 가상 인스턴스용 템플릿을 선택해 주십시오.ISO를 설치 할 수 있는 공백 템플릿을 선택할 수도 있습니다. +message.step.2.continue=실행하려면 서비스제공을 선택해 주십시오. +message.step.2.desc= +message.step.3.continue=실행하려면 디스크제공을 선택해 주십시오. +message.step.3.desc= +message.step.4.continue=실행하려면 네트워크를 적어도 한 개 이상 선택해 주십시오. +message.step.4.desc=가상 인스턴스가 접속하는 기본 네트워크를 선택해 주십시오. +message.update.os.preference=현재 호스트 OS 기본 설정을 선택해 주십시오.같은 기본 설정을 가지는 모든 가상 인스턴스는 다른 호스트를 선택하기 전에 우선이 호스트가 할당할 수 있습니다. +message.update.ssl=각 콘솔 프록시 가상 인스턴스로 업데이트하는 X.509 기반 새 SSL 인증서를 전송해 주십시오: +message.virtual.network.desc=계정 정보 전용 가상 네트워크입니다. 브로드캐스트 도메인은 VLAN 내에 배치되어 공개 네트워크에 접근는 모두 가상 라우터에 해서 루팅 됩니다. +message.volume.create.template.confirm=현재 디스크 볼륨 템플릿을 만드시겠습니까? 볼륨 크기에 따라 템플릿 만들기에 몇 분 이상 걸릴 가능성이 있습니다. +message.zone.step.1.desc=Zone 네트워크 모델을 선택해 주십시오. +message.zone.step.2.desc=새 Zone을 추가하기 위해 아래 정보를 입력해 주십시오. +message.zone.step.3.desc=새 Pod를 추가하기 위해 아래 정보를 입력해 주십시오. +message.apply.snapshot.policy=현재 스냅샷 정책를 업데이트했습니다. +message.disable.snapshot.policy=현재 스냅샷 정책를 사용 안 함으로 설정했습니다. +message.action.change.service.warning.for.instance=현재 서비스 제공을 변경하기 전에 인스턴스를 정지해야 합니다. +message.action.change.service.warning.for.router=현재 서비스 제공을 변경하기 전에 라우터를 정지해야 합니다. +message.action.reset.password.warning=현재 암호를 변경하기 전에 인스턴스를 정지해야 합니다. +message.action.reset.password.off=인스턴스는 현재 기능을 지원 하지 않습니다. + +#Errors +error.login=사용자명/암호가 기록과 일치하지 않습니다. +error.menu.select=항목이 선택되어 있지 않기 때문에 작업을 실행할 수 없습니다. +error.mgmt.server.inaccessible=관리 서버에 접근 할 수 없습니다. 다음에 재실행해 주십시오. +error.session.expired=세션 유효기간이 끊어졌습니다. + +#resizeVolumes +label.resize.new.size=새 크기(GB) +label.action.resize.volume=볼륨 크기 변경 +label.action.resize.volume.processing=볼륨 크기 변경 중... +label.resize.new.offering.id=새로 제공 +label.resize.shrink.ok=변경 완료 From d44d4b76e7893485c4f91d75f39677f81cad78d7 Mon Sep 17 00:00:00 2001 From: Pranav Saxena Date: Thu, 7 Feb 2013 10:41:51 +0530 Subject: [PATCH 10/85] Enabling Korean Translation on the CloudStack UI --- ui/dictionary.jsp | 1 + ui/index.jsp | 1 + 2 files changed, 2 insertions(+) diff --git a/ui/dictionary.jsp b/ui/dictionary.jsp index d2cb67fc8a5..508135611e3 100644 --- a/ui/dictionary.jsp +++ b/ui/dictionary.jsp @@ -810,6 +810,7 @@ dictionary = { 'label.lang.chinese': '', 'label.lang.english': '', 'label.lang.japanese': '', +'label.lang.korean': '', 'label.lang.spanish': '', 'label.last.disconnected': '', 'label.last.name': '', diff --git a/ui/index.jsp b/ui/index.jsp index 5481da80130..fdacd9e99d4 100644 --- a/ui/index.jsp +++ b/ui/index.jsp @@ -75,6 +75,7 @@ under the License. + From 7c003611d04d10bae2f02f3f3b9338e166b75676 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 7 Feb 2013 11:08:28 +0530 Subject: [PATCH 11/85] CLOUDSTACK-1181: Fix NPE, ignore if default path is not readable, we're passing props file anyway Signed-off-by: Rohit Yadav --- server/src/com/cloud/upgrade/DatabaseCreator.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/src/com/cloud/upgrade/DatabaseCreator.java b/server/src/com/cloud/upgrade/DatabaseCreator.java index 99e63a673c0..4d706344707 100755 --- a/server/src/com/cloud/upgrade/DatabaseCreator.java +++ b/server/src/com/cloud/upgrade/DatabaseCreator.java @@ -156,7 +156,10 @@ public class DatabaseCreator { System.exit(1); } - Transaction.initDataSource(dbPropsFile); + try { + Transaction.initDataSource(dbPropsFile); + } catch (NullPointerException e) { + } initDB(dbPropsFile, rootPassword, databases, dryRun); // Process sql files From 13a4c0670ee2caffd7a3fe04f82680e583b20607 Mon Sep 17 00:00:00 2001 From: Mice Xia Date: Thu, 7 Feb 2013 13:31:49 +0800 Subject: [PATCH 12/85] CLOUDSTACK-1176 1) remove 'final' modifier from id attribute in SnapshotVO 2) make state setter method comply with convention --- core/src/com/cloud/storage/SnapshotVO.java | 4 ++-- server/src/com/cloud/storage/dao/SnapshotDaoImpl.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/com/cloud/storage/SnapshotVO.java b/core/src/com/cloud/storage/SnapshotVO.java index 0aa489be7c4..68336cb97ec 100644 --- a/core/src/com/cloud/storage/SnapshotVO.java +++ b/core/src/com/cloud/storage/SnapshotVO.java @@ -31,7 +31,7 @@ public class SnapshotVO implements Snapshot { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") - private final long id = -1; + private long id; @Column(name="data_center_id") long dataCenterId; @@ -248,7 +248,7 @@ public class SnapshotVO implements Snapshot { return state; } - public void setStatus(State state) { + public void setState(State state) { this.state = state; } diff --git a/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java b/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java index 17bcf9b1bcf..a8a07dcc3a6 100644 --- a/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java +++ b/server/src/com/cloud/storage/dao/SnapshotDaoImpl.java @@ -328,7 +328,7 @@ public class SnapshotDaoImpl extends GenericDaoBase implements Transaction txn = Transaction.currentTxn(); txn.start(); SnapshotVO snapshotVO = (SnapshotVO)snapshot; - snapshotVO.setStatus(nextState); + snapshotVO.setState(nextState); super.update(snapshotVO.getId(), snapshotVO); txn.commit(); return true; From 5fe1ef47dd66160f11cad2f36a026ad53c687c7e Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 7 Feb 2013 11:33:01 +0530 Subject: [PATCH 13/85] CLOUDSTACK-520: Autorename vmware and manageontap jars Signed-off-by: Rohit Yadav --- deps/install-non-oss.sh | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/deps/install-non-oss.sh b/deps/install-non-oss.sh index 28eb03e1562..af495e7cc21 100755 --- a/deps/install-non-oss.sh +++ b/deps/install-non-oss.sh @@ -8,7 +8,7 @@ # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 -# +# # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -19,13 +19,17 @@ mvn install:install-file -Dfile=cloud-iControl.jar -DgroupId=com.cloud.com.f5 -DartifactId=icontrol -Dversion=1.0 -Dpackaging=jar mvn install:install-file -Dfile=cloud-netscaler.jar -DgroupId=com.cloud.com.citrix -DartifactId=netscaler -Dversion=1.0 -Dpackaging=jar mvn install:install-file -Dfile=cloud-netscaler-sdx.jar -DgroupId=com.cloud.com.citrix -DartifactId=netscaler-sdx -Dversion=1.0 -Dpackaging=jar -# + # From http://support.netapp.com/ (not available online, contact your support representative) # Version: 4.0 +if [ -e cloud-manageontap.jar ]; then mv cloud-manageontap.jar manageontap.jar; fi mvn install:install-file -Dfile=manageontap.jar -DgroupId=com.cloud.com.netapp -DartifactId=manageontap -Dversion=4.0 -Dpackaging=jar -# + # From https://my.vmware.com/group/vmware/get-download?downloadGroup=VSDK41 -# Version: 4.1, Release-date: 2010-07-13, Build: 257238 +# Version: 4.1, Release-date: 2010-07-13, Build: 257238 +if [ -e vmware-apputils.jar ]; then mv vmware-apputils.jar apputils.jar; fi +if [ -e vmware-vim.jar ]; then mv vmware-vim.jar vim.jar; fi +if [ -e vmware-vim25.jar ]; then mv vmware-vim25.jar vim25.jar; fi mvn install:install-file -Dfile=vim25.jar -DgroupId=com.cloud.com.vmware -DartifactId=vmware-vim25 -Dversion=4.1 -Dpackaging=jar mvn install:install-file -Dfile=apputils.jar -DgroupId=com.cloud.com.vmware -DartifactId=vmware-apputils -Dversion=4.1 -Dpackaging=jar mvn install:install-file -Dfile=vim.jar -DgroupId=com.cloud.com.vmware -DartifactId=vmware-vim -Dversion=4.1 -Dpackaging=jar From eea74f5ddd1f2e5322c5f4781f747319e31e5c87 Mon Sep 17 00:00:00 2001 From: Radhika PC Date: Thu, 7 Feb 2013 11:44:33 +0530 Subject: [PATCH 14/85] CLOUDSTACK-1050:Documentation for adding load balancer rule --- docs/en-US/add-load-balancer-rule.xml | 30 +++++++++++-------- docs/en-US/load-balancer-rules.xml | 22 +++++++++----- .../sticky-session-policies-for-lb-rules.xml | 21 +++++++++---- 3 files changed, 48 insertions(+), 25 deletions(-) diff --git a/docs/en-US/add-load-balancer-rule.xml b/docs/en-US/add-load-balancer-rule.xml index 8cd0da4b7da..2d911feaf75 100644 --- a/docs/en-US/add-load-balancer-rule.xml +++ b/docs/en-US/add-load-balancer-rule.xml @@ -4,19 +4,19 @@ %BOOK_ENTITIES; ]>
Adding a Load Balancer Rule @@ -70,6 +70,10 @@ the algorithm for the stickiness policy. See Sticky Session Policies for Load Balancer Rules. + + AutoScale: Click Configure and complete the + AutoScale configuration as explained in . + diff --git a/docs/en-US/load-balancer-rules.xml b/docs/en-US/load-balancer-rules.xml index 1ce5cd09c5d..77739001966 100644 --- a/docs/en-US/load-balancer-rules.xml +++ b/docs/en-US/load-balancer-rules.xml @@ -22,11 +22,19 @@ under the License. -->
- Load Balancer Rules - A &PRODUCT; user or administrator may create load balancing rules that balance traffic received at a public IP to one or more VMs. A user creates a rule, specifies an algorithm, and assigns the rule to a set of VMs. - If you create load balancing rules while using a network service offering that includes an external load balancer device such as NetScaler, and later change the network service offering to one that uses the &PRODUCT; virtual router, you must create a firewall rule on the virtual router for each of your existing load balancing rules so that they continue to function. - - - - + Load Balancer Rules + A &PRODUCT; user or administrator may create load balancing rules that balance traffic + received at a public IP to one or more VMs. A user creates a rule, specifies an algorithm, and + assigns the rule to a set of VMs. + + If you create load balancing rules while using a network service offering that includes an + external load balancer device such as NetScaler, and later change the network service offering + to one that uses the &PRODUCT; virtual router, you must create a firewall rule on the virtual + router for each of your existing load balancing rules so that they continue to + function. + + + +
diff --git a/docs/en-US/sticky-session-policies-for-lb-rules.xml b/docs/en-US/sticky-session-policies-for-lb-rules.xml index a8acfa087d2..09780855f7e 100644 --- a/docs/en-US/sticky-session-policies-for-lb-rules.xml +++ b/docs/en-US/sticky-session-policies-for-lb-rules.xml @@ -21,10 +21,21 @@ specific language governing permissions and limitations under the License. --> -
- Sticky Session Policies for Load Balancer Rules - Sticky sessions are used in Web-based applications to ensure continued availability of information across the multiple requests in a user's session. For example, if a shopper is filling a cart, you need to remember what has been purchased so far. The concept of "stickiness" is also referred to as persistence or maintaining state. - Any load balancer rule defined in &PRODUCT; can have a stickiness policy. The policy consists of a name, stickiness method, and parameters. The parameters are name-value pairs or flags, which are defined by the load balancer vendor. The stickiness method could be load balancer-generated cookie, application-generated cookie, or source-based. In the source-based method, the source IP address is used to identify the user and locate the user’s stored data. In the other methods, cookies are used. The cookie generated by the load balancer or application is included in request and response URLs to create persistence. The cookie name can be specified by the administrator or automatically generated. A variety of options are provided to control the exact behavior of cookies, such as how they are generated and whether they are cached. - For the most up to date list of available stickiness methods, see the &PRODUCT; UI or call listNetworks and check the SupportedStickinessMethods capability. + Sticky Session Policies for Load Balancer Rules + Sticky sessions are used in Web-based applications to ensure continued availability of + information across the multiple requests in a user's session. For example, if a shopper is + filling a cart, you need to remember what has been purchased so far. The concept of "stickiness" + is also referred to as persistence or maintaining state. + Any load balancer rule defined in &PRODUCT; can have a stickiness policy. The policy + consists of a name, stickiness method, and parameters. The parameters are name-value pairs or + flags, which are defined by the load balancer vendor. The stickiness method could be load + balancer-generated cookie, application-generated cookie, or source-based. In the source-based + method, the source IP address is used to identify the user and locate the user’s stored data. In + the other methods, cookies are used. The cookie generated by the load balancer or application is + included in request and response URLs to create persistence. The cookie name can be specified by + the administrator or automatically generated. A variety of options are provided to control the + exact behavior of cookies, such as how they are generated and whether they are cached. + For the most up to date list of available stickiness methods, see the &PRODUCT; UI or call + listNetworks and check the SupportedStickinessMethods capability.
From a71fb83c779248f3065a16b3a82bd940e6930496 Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Thu, 7 Feb 2013 11:28:42 +0530 Subject: [PATCH 15/85] CLOUDSTACK-1178:DB Commit warning logged for every Deploy VM request removing the regression that introduced premature transaction commit --- server/src/com/cloud/vm/UserVmManagerImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 390a2a2f077..662dab39bf9 100644 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -3358,9 +3358,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use _vmDao.persist(vm); _vmDao.saveDetails(vm); - txn.commit(); - s_logger.debug("Allocating in the DB for vm"); DataCenterDeployment plan = new DataCenterDeployment(zone.getId()); @@ -3395,7 +3393,9 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use _resourceLimitMgr.incrementResourceCount(accountId, ResourceType.user_vm); + txn.commit(); + // Assign instance to the group try { if (group != null) { From d72e5ffc0f3e05ef5b46c73dc9382584cc601ece Mon Sep 17 00:00:00 2001 From: Pranav Saxena Date: Thu, 7 Feb 2013 14:05:36 +0530 Subject: [PATCH 16/85] CLOUDSTACK-1184 Localization - Add Korean label to all locales --- client/WEB-INF/classes/resources/messages.properties | 3 ++- client/WEB-INF/classes/resources/messages_fr_FR.properties | 3 ++- client/WEB-INF/classes/resources/messages_ja.properties | 3 ++- client/WEB-INF/classes/resources/messages_ko_KR.properties | 1 + client/WEB-INF/classes/resources/messages_pt_BR.properties | 3 ++- client/WEB-INF/classes/resources/messages_ru_RU.properties | 1 + client/WEB-INF/classes/resources/messages_zh_CN.properties | 3 ++- 7 files changed, 12 insertions(+), 5 deletions(-) diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties index bb845d8e8e4..9c4fcb35554 100644 --- a/client/WEB-INF/classes/resources/messages.properties +++ b/client/WEB-INF/classes/resources/messages.properties @@ -1139,6 +1139,7 @@ label.lang.chinese=Chinese (Simplified) label.lang.english=English label.lang.japanese=Japanese label.lang.spanish=Spanish +label.lang.korean=Korean label.lang.russian=Russian label.lang.french=French label.lang.brportugese=Brazilian Portugese @@ -1550,4 +1551,4 @@ label.resize.new.size=New Size(GB) label.action.resize.volume=Resize Volume label.action.resize.volume.processing=Resizing Volume.... label.resize.new.offering.id=New Offering -label.resize.shrink.ok=Shrink OK \ No newline at end of file +label.resize.shrink.ok=Shrink OK diff --git a/client/WEB-INF/classes/resources/messages_fr_FR.properties b/client/WEB-INF/classes/resources/messages_fr_FR.properties index 51bf95fe349..e29d61b51ea 100644 --- a/client/WEB-INF/classes/resources/messages_fr_FR.properties +++ b/client/WEB-INF/classes/resources/messages_fr_FR.properties @@ -1114,6 +1114,7 @@ label.keep=Conserver label.lang.chinese=Chinois (simplifi) label.lang.english=Anglais label.lang.japanese=Japonais +label.lang.korean=Coren label.lang.spanish=Espagnol label.last.disconnected=Dernire Dconnexion label.last.name=Nom de famille @@ -1515,4 +1516,4 @@ label.resize.new.size=New Size(GB) label.action.resize.volume=Resize Volume label.action.resize.volume.processing=Resizing Volume.... label.resize.new.offering.id=New Offering -label.resize.shrink.ok=Shrink OK \ No newline at end of file +label.resize.shrink.ok=Shrink OK diff --git a/client/WEB-INF/classes/resources/messages_ja.properties b/client/WEB-INF/classes/resources/messages_ja.properties index 8397a8dc59d..977c0109f7b 100644 --- a/client/WEB-INF/classes/resources/messages_ja.properties +++ b/client/WEB-INF/classes/resources/messages_ja.properties @@ -1116,6 +1116,7 @@ label.keep=維持 label.lang.chinese=簡体字中国語 label.lang.english=英語 label.lang.japanese=日本語 +label.lang.korean=韓国語 label.lang.spanish=スペイン語 label.last.disconnected=最終切断日時 label.last.name=姓 @@ -1515,4 +1516,4 @@ label.resize.new.size=New Size(GB) label.action.resize.volume=Resize Volume label.action.resize.volume.processing=Resizing Volume.... label.resize.new.offering.id=New Offering -label.resize.shrink.ok=Shrink OK \ No newline at end of file +label.resize.shrink.ok=Shrink OK diff --git a/client/WEB-INF/classes/resources/messages_ko_KR.properties b/client/WEB-INF/classes/resources/messages_ko_KR.properties index dc65d7001c2..a7b534aa3cd 100644 --- a/client/WEB-INF/classes/resources/messages_ko_KR.properties +++ b/client/WEB-INF/classes/resources/messages_ko_KR.properties @@ -1111,6 +1111,7 @@ label.keep=유지 label.lang.chinese=중국어(간체) label.lang.english=영어 label.lang.japanese=일본어 +label.lang.korean=한국어 label.lang.spanish=스페인어 label.last.disconnected=마지막 종료 시점 label.last.name=성 diff --git a/client/WEB-INF/classes/resources/messages_pt_BR.properties b/client/WEB-INF/classes/resources/messages_pt_BR.properties index 23ba5b9402d..5202f562cba 100644 --- a/client/WEB-INF/classes/resources/messages_pt_BR.properties +++ b/client/WEB-INF/classes/resources/messages_pt_BR.properties @@ -1114,6 +1114,7 @@ label.keep=Manter label.lang.chinese=Chinese (Simplified) label.lang.english=English label.lang.japanese=Japanese +label.lang.korean=Coreano label.lang.spanish=Spanish label.last.disconnected=Last Disconnected label.last.name=\u009altimo Nome @@ -1515,4 +1516,4 @@ label.resize.new.size=New Size(GB) label.action.resize.volume=Resize Volume label.action.resize.volume.processing=Resizing Volume.... label.resize.new.offering.id=New Offering -label.resize.shrink.ok=Shrink OK \ No newline at end of file +label.resize.shrink.ok=Shrink OK diff --git a/client/WEB-INF/classes/resources/messages_ru_RU.properties b/client/WEB-INF/classes/resources/messages_ru_RU.properties index 024b552df7c..c6631192085 100644 --- a/client/WEB-INF/classes/resources/messages_ru_RU.properties +++ b/client/WEB-INF/classes/resources/messages_ru_RU.properties @@ -1114,6 +1114,7 @@ label.keep=Хранить label.lang.chinese=Китайский (упрощённый) label.lang.english=Английский label.lang.japanese=Японский +label.lang.korean=корейский label.lang.spanish=Испанский label.last.disconnected=Последнее соединение label.last.name=Последнее имя diff --git a/client/WEB-INF/classes/resources/messages_zh_CN.properties b/client/WEB-INF/classes/resources/messages_zh_CN.properties index 2e2e725d190..d49cefacff5 100644 --- a/client/WEB-INF/classes/resources/messages_zh_CN.properties +++ b/client/WEB-INF/classes/resources/messages_zh_CN.properties @@ -1116,6 +1116,7 @@ label.keep=保留 label.lang.chinese=简体中文 label.lang.english=英语 label.lang.japanese=日语 +label.lang.korean=韩国语 label.lang.spanish=西班牙语 label.last.disconnected=上次断开连接时间 label.last.name=姓氏 @@ -1516,4 +1517,4 @@ label.resize.new.size=New Size(GB) label.action.resize.volume=Resize Volume label.action.resize.volume.processing=Resizing Volume.... label.resize.new.offering.id=New Offering -label.resize.shrink.ok=Shrink OK \ No newline at end of file +label.resize.shrink.ok=Shrink OK From 1fd0563137075a8b405bdd5f17d0b821442c4f58 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 7 Feb 2013 16:00:22 +0530 Subject: [PATCH 17/85] CLOUDSTACK-1037: Implement fuzzy parameter completion Signed-off-by: Rohit Yadav --- tools/cli/cloudmonkey/cachemaker.py | 4 ++-- tools/cli/cloudmonkey/cloudmonkey.py | 36 ++++++++++++++++++++++------ tools/cli/cloudmonkey/config.py | 3 ++- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/tools/cli/cloudmonkey/cachemaker.py b/tools/cli/cloudmonkey/cachemaker.py index 8827f2984c0..42a077ad928 100644 --- a/tools/cli/cloudmonkey/cachemaker.py +++ b/tools/cli/cloudmonkey/cachemaker.py @@ -56,8 +56,8 @@ def savecache(apicache, json_file): """ Saves apicache dictionary as json_file, returns dictionary as indented str """ - if isinstance(type(apicache), types.NoneType) or apicache is None or apicache is {}: - return "" + if apicache is None or apicache is {}: + return "" apicachestr = json.dumps(apicache, indent=2) with open(json_file, 'w') as cache_file: cache_file.write(apicachestr) diff --git a/tools/cli/cloudmonkey/cloudmonkey.py b/tools/cli/cloudmonkey/cloudmonkey.py index 53f73bd3e72..b5b185f2d6c 100644 --- a/tools/cli/cloudmonkey/cloudmonkey.py +++ b/tools/cli/cloudmonkey/cloudmonkey.py @@ -246,13 +246,13 @@ class CloudMonkeyShell(cmd.Cmd, object): map(lambda x: x.strip(), args_dict.pop('filter').split(','))) - missing_args = [] + missing = [] if verb in self.apicache and subject in self.apicache[verb]: - missing_args = filter(lambda x: x not in args_dict.keys(), - self.apicache[verb][subject]['requiredparams']) + missing = filter(lambda x: x not in args_dict.keys(), + self.apicache[verb][subject]['requiredparams']) - if len(missing_args) > 0: - self.monkeyprint("Missing arguments: ", ' '.join(missing_args)) + if len(missing) > 0: + self.monkeyprint("Missing arguments: ", ' '.join(missing)) return isasync = False @@ -293,12 +293,33 @@ class CloudMonkeyShell(cmd.Cmd, object): map(lambda x: x['name'], self.apicache[verb][subject]['params'])) search_string = text + if self.paramcompletion == 'true': + param = line.split(" ")[-1] + idx = param.find("=") + value = param[idx + 1:] + param = param[:idx] + if len(value) < 36 and idx != -1: + params = self.apicache[verb][subject]['params'] + related = filter(lambda x: x['name'] == param, + params)[0]['related'] + api = min(filter(lambda x: 'list' in x, related), key=len) + response = self.make_request(api, args={'listall': 'true'}) + responsekey = filter(lambda x: 'response' in x, + response.keys())[0] + result = response[responsekey] + uuids = [] + for key in result.keys(): + if isinstance(result[key], list): + for element in result[key]: + if 'id' in element.keys(): + uuids.append(element['id']) + autocompletions = uuids + search_string = value if self.tabularize == "true" and subject != "": autocompletions.append("filter=") return [s for s in autocompletions if s.startswith(search_string)] - def do_sync(self, args): """ Asks cloudmonkey to discovery and sync apis available on user specified @@ -396,7 +417,8 @@ class CloudMonkeyShell(cmd.Cmd, object): helpdoc += "\nRequired params are %s" % ' '.join(required) helpdoc += "\nParameters\n" + "=" * 10 for param in api['params']: - helpdoc += "\n%s = (%s) %s" % (param['name'], param['type'], param['description']) + helpdoc += "\n%s = (%s) %s" % (param['name'], + param['type'], param['description']) self.monkeyprint(helpdoc) else: self.monkeyprint("Error: no such api (%s) on %s" % diff --git a/tools/cli/cloudmonkey/config.py b/tools/cli/cloudmonkey/config.py index 8b718c2d8a3..5dfe09bf85d 100644 --- a/tools/cli/cloudmonkey/config.py +++ b/tools/cli/cloudmonkey/config.py @@ -42,6 +42,8 @@ cache_file = expanduser(config_dir + '/cache') config_fields = {'core': {}, 'ui': {}, 'server': {}, 'user': {}} # core +config_fields['core']['asyncblock'] = 'true' +config_fields['core']['paramcompletion'] = 'false' config_fields['core']['history_file'] = expanduser(config_dir + '/history') config_fields['core']['log_file'] = expanduser(config_dir + '/log') @@ -51,7 +53,6 @@ config_fields['ui']['prompt'] = '> ' config_fields['ui']['tabularize'] = 'false' # server -config_fields['server']['asyncblock'] = 'true' config_fields['server']['host'] = 'localhost' config_fields['server']['path'] = '/client/api' config_fields['server']['port'] = '8080' From 04d51c9e4dfccafcd54cd6581434c0db16ef8f85 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 7 Feb 2013 17:41:07 +0530 Subject: [PATCH 18/85] CLOUDSTACK-1066: Fix only one postinstall script, install packages etc. - Remove different scripts, just use postinstall.sh that runs after basic appliance is built using veewee - Port package installation method from old script - Time the installation/build process Signed-off-by: Rohit Yadav --- .../definitions/systemvmtemplate/base.sh | 42 ----- .../definitions/systemvmtemplate/cleanup.sh | 34 ---- .../systemvmtemplate/definition.rb | 4 +- .../systemvmtemplate/postinstall.sh | 147 ++++++++++++++++++ .../definitions/systemvmtemplate/zerodisk.sh | 20 --- 5 files changed, 148 insertions(+), 99 deletions(-) delete mode 100644 tools/appliance/definitions/systemvmtemplate/base.sh delete mode 100644 tools/appliance/definitions/systemvmtemplate/cleanup.sh create mode 100644 tools/appliance/definitions/systemvmtemplate/postinstall.sh delete mode 100644 tools/appliance/definitions/systemvmtemplate/zerodisk.sh diff --git a/tools/appliance/definitions/systemvmtemplate/base.sh b/tools/appliance/definitions/systemvmtemplate/base.sh deleted file mode 100644 index acd72c3d0c7..00000000000 --- a/tools/appliance/definitions/systemvmtemplate/base.sh +++ /dev/null @@ -1,42 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# Update the box -apt-get -y update -apt-get -y install linux-headers-$(uname -r) build-essential -apt-get -y install zlib1g-dev libssl-dev libreadline-gplv2-dev -apt-get -y install curl unzip -apt-get clean - -# Set up sudo -echo 'vagrant ALL=NOPASSWD:ALL' > /etc/sudoers.d/vagrant - -# Tweak sshd to prevent DNS resolution (speed up logins) -echo 'UseDNS no' >> /etc/ssh/sshd_config - -# Remove 5s grub timeout to speed up booting -echo < /etc/default/grub -# If you change this file, run 'update-grub' afterwards to update -# /boot/grub/grub.cfg. - -GRUB_DEFAULT=0 -GRUB_TIMEOUT=0 -GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` -GRUB_CMDLINE_LINUX_DEFAULT="quiet" -GRUB_CMDLINE_LINUX="debian-installer=en_US" -EOF - -update-grub diff --git a/tools/appliance/definitions/systemvmtemplate/cleanup.sh b/tools/appliance/definitions/systemvmtemplate/cleanup.sh deleted file mode 100644 index 4aab193a3af..00000000000 --- a/tools/appliance/definitions/systemvmtemplate/cleanup.sh +++ /dev/null @@ -1,34 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# Clean up -apt-get -y remove linux-headers-$(uname -r) build-essential -apt-get -y autoremove - -# Removing leftover leases and persistent rules -echo "cleaning up dhcp leases" -rm /var/lib/dhcp/* - -# Make sure Udev doesn't block our network -echo "cleaning up udev rules" -rm /etc/udev/rules.d/70-persistent-net.rules -mkdir /etc/udev/rules.d/70-persistent-net.rules -rm -rf /dev/.udev/ -rm /lib/udev/rules.d/75-persistent-net-generator.rules - -echo "Adding a 2 sec delay to the interface up, to make the dhclient happy" -echo "pre-up sleep 2" >> /etc/network/interfaces diff --git a/tools/appliance/definitions/systemvmtemplate/definition.rb b/tools/appliance/definitions/systemvmtemplate/definition.rb index de23bef451f..aebb4f24ff8 100644 --- a/tools/appliance/definitions/systemvmtemplate/definition.rb +++ b/tools/appliance/definitions/systemvmtemplate/definition.rb @@ -52,9 +52,7 @@ Veewee::Definition.declare({ :sudo_cmd => "echo '%p'|sudo -S sh '%f'", :shutdown_cmd => "halt -p", :postinstall_files => [ - "base.sh", - "cleanup.sh", - "zerodisk.sh" + "postinstall.sh", ], :postinstall_timeout => "10000" }) diff --git a/tools/appliance/definitions/systemvmtemplate/postinstall.sh b/tools/appliance/definitions/systemvmtemplate/postinstall.sh new file mode 100644 index 00000000000..4473bbfb5ca --- /dev/null +++ b/tools/appliance/definitions/systemvmtemplate/postinstall.sh @@ -0,0 +1,147 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +set -e +set -x + +IMAGENAME=systemvm +LOCATION=/var/lib/images/systemvm +PASSWORD=password +HOSTNAME=systemvm +SIZE=2048 +DEBIAN_MIRROR=ftp.us.debian.org/debian +MINIMIZE=true +CLOUDSTACK_RELEASE=4.1.0 + +init() { + # Update the box + apt-get -y update + apt-get -y install linux-headers-$(uname -r) build-essential + apt-get -y install zlib1g-dev libssl-dev libreadline-gplv2-dev + apt-get -y install curl unzip + apt-get clean + + # Set up sudo + echo 'vagrant ALL=NOPASSWD:ALL' > /etc/sudoers.d/vagrant + + # Tweak sshd to prevent DNS resolution (speed up logins) + echo 'UseDNS no' >> /etc/ssh/sshd_config + + # Remove 5s grub timeout to speed up booting + echo < /etc/default/grub +# If you change this file, run 'update-grub' afterwards to update +# /boot/grub/grub.cfg. + +GRUB_DEFAULT=0 +GRUB_TIMEOUT=0 +GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` +GRUB_CMDLINE_LINUX_DEFAULT="quiet" +GRUB_CMDLINE_LINUX="debian-installer=en_US" +EOF + + update-grub +} + +install_packages() { + DEBIAN_FRONTEND=noninteractive + DEBIAN_PRIORITY=critical + DEBCONF_DB_OVERRIDE=’File{/root/config.dat}’ + export DEBIAN_FRONTEND DEBIAN_PRIORITY DEBCONF_DB_OVERRIDE + + #basic stuff + chroot . apt-get --no-install-recommends -q -y --force-yes install rsyslog logrotate cron chkconfig insserv net-tools ifupdown vim-tiny netbase iptables openssh-server grub-legacy e2fsprogs dhcp3-client dnsmasq tcpdump socat wget python bzip2 sed gawk diff grep gzip less tar telnet ftp rsync traceroute psmisc lsof procps monit inetutils-ping iputils-arping httping dnsutils zip unzip ethtool uuid file iproute acpid iptables-persistent virt-what sudo + #fix hostname in openssh-server generated keys + sed -i "s/root@\(.*\)$/root@systemvm/g" etc/ssh/ssh_host_*.pub + + #sysstat + chroot . echo 'sysstat sysstat/enable boolean true' | chroot . debconf-set-selections + chroot . apt-get --no-install-recommends -q -y --force-yes install sysstat + #apache + chroot . apt-get --no-install-recommends -q -y --force-yes install apache2 ssl-cert + #haproxy + chroot . apt-get --no-install-recommends -q -y --force-yes install haproxy + #dnsmasq + chroot . apt-get --no-install-recommends -q -y --force-yes install dnsmasq + #nfs client + chroot . apt-get --no-install-recommends -q -y --force-yes install nfs-common + #vpn stuff + chroot . apt-get --no-install-recommends -q -y --force-yes install xl2tpd openswan bcrelay ppp ipsec-tools tdb-tools + #vmware tools + chroot . apt-get --no-install-recommends -q -y --force-yes install open-vm-tools + #xenstore utils + chroot . apt-get --no-install-recommends -q -y --force-yes install xenstore-utils libxenstore3.0 + #keepalived and conntrackd + chroot . apt-get --no-install-recommends -q -y --force-yes install keepalived conntrackd ipvsadm libnetfilter-conntrack3 libnl1 + #ipcalc + chroot . apt-get --no-install-recommends -q -y --force-yes install ipcalc + + echo "***** getting sun jre 6*********" + chroot . echo 'sun-java6-bin shared/accepted-sun-dlj-v1-1 boolean true + sun-java6-jre shared/accepted-sun-dlj-v1-1 boolean true + sun-java6-jre sun-java6-jre/stopthread boolean true + sun-java6-jre sun-java6-jre/jcepolicy note + sun-java6-bin shared/present-sun-dlj-v1-1 note + sun-java6-jre shared/present-sun-dlj-v1-1 note ' | chroot . debconf-set-selections + chroot . apt-get --no-install-recommends -q -y install sun-java6-jre +} + +cleanup() { + # Clean up + apt-get -y remove linux-headers-$(uname -r) build-essential + apt-get -y autoremove + + # Removing leftover leases and persistent rules + echo "cleaning up dhcp leases" + rm /var/lib/dhcp/* + + # Make sure Udev doesn't block our network + echo "cleaning up udev rules" + rm /etc/udev/rules.d/70-persistent-net.rules + mkdir /etc/udev/rules.d/70-persistent-net.rules + rm -rf /dev/.udev/ + rm /lib/udev/rules.d/75-persistent-net-generator.rules + + echo "Adding a 2 sec delay to the interface up, to make the dhclient happy" + echo "pre-up sleep 2" >> /etc/network/interfaces +} + +finalize() { + # Zero out the free space to save space in the final image: + dd if=/dev/zero of=/EMPTY bs=1M + rm -f /EMPTY +} + + +echo "*************STARTING POSTINST SCRIPT********************" +begin=$(date +%s) + +echo "*************INITIALIZING BASE SYSTEM********************" +init + +echo "*************INSTALLING PACKAGES********************" +install_packages + +echo "*************CLEANING UP********************" +cleanup + +echo "*************FINALIZING IMAGE********************" +finalize + +fin=$(date +%s) +t=$((fin-begin)) + +echo "Finished building systemvm appliance in $t seconds" diff --git a/tools/appliance/definitions/systemvmtemplate/zerodisk.sh b/tools/appliance/definitions/systemvmtemplate/zerodisk.sh deleted file mode 100644 index 81850921dba..00000000000 --- a/tools/appliance/definitions/systemvmtemplate/zerodisk.sh +++ /dev/null @@ -1,20 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# Zero out the free space to save space in the final image: -dd if=/dev/zero of=/EMPTY bs=1M -rm -f /EMPTY From db3b0d325613b02eaed40e89f7c80db89f0b87ee Mon Sep 17 00:00:00 2001 From: Hugo Trippaers Date: Thu, 7 Feb 2013 13:34:45 +0100 Subject: [PATCH 19/85] Summary: Fix path so the right files are removed from the install dir --- packaging/centos63/cloud.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/centos63/cloud.spec b/packaging/centos63/cloud.spec index fd5b2a5dba5..b2eb3527347 100644 --- a/packaging/centos63/cloud.spec +++ b/packaging/centos63/cloud.spec @@ -218,8 +218,8 @@ cp -r client/target/utilities/scripts/db/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}- cp -r client/target/cloud-client-ui-4.1.0-SNAPSHOT/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapps/client # Don't package the scripts in the management webapp -rm -rf {RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapps/WEB-INF/classes/scripts -rm -rf {RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapps/WEB-INF/classes/vms +rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapps/client/WEB-INF/classes/scripts +rm -rf ${RPM_BUILD_ROOT}%{_datadir}/%{name}-management/webapps/client/WEB-INF/classes/vms for name in db.properties log4j-cloud.xml tomcat6-nonssl.conf tomcat6-ssl.conf server-ssl.xml server-nonssl.xml \ catalina.policy catalina.properties db-enc.properties classpath.conf tomcat-users.xml web.xml ; do From a9955f155a062a131989bfb30708731e5eafd435 Mon Sep 17 00:00:00 2001 From: Pradeep Soundararajan Date: Thu, 7 Feb 2013 13:36:28 +0100 Subject: [PATCH 20/85] Summary: changed the path from cloud to cloudstack. The change in package script allowed us to create proper tar under rpmbuild/SOURCES directory The change in the path enabled us to launch the management server properly. Signed-off-by: Hugo Trippaers Committed-by: Hugo Trippaers --- packaging/centos63/package.sh | 6 +-- python/lib/cloudutils/serviceConfig.py | 22 +++++----- python/lib/cloudutils/serviceConfigServer.py | 43 ++++++++++---------- 3 files changed, 35 insertions(+), 36 deletions(-) diff --git a/packaging/centos63/package.sh b/packaging/centos63/package.sh index 83c0e5eda4c..5b1bab49b61 100644 --- a/packaging/centos63/package.sh +++ b/packaging/centos63/package.sh @@ -34,11 +34,11 @@ else fi mkdir -p $RPMDIR/SPECS -mkdir -p $RPMDIR/SOURCES/cloud-$VERSION +mkdir -p $RPMDIR/SOURCES/cloudstack-$VERSION -(cd ../../; tar -c --exclude .git --exclude dist . | tar -C $RPMDIR/SOURCES/cloud-$VERSION -x ) -(cd $RPMDIR/SOURCES/; tar -czf cloud-$VERSION.tgz cloud-$VERSION) +(cd ../../; tar -c --exclude .git --exclude dist . | tar -C $RPMDIR/SOURCES/cloudstack-$VERSION -x ) +(cd $RPMDIR/SOURCES/; tar -czf cloudstack-$VERSION.tgz cloudstack-$VERSION) cp cloud.spec $RPMDIR/SPECS diff --git a/python/lib/cloudutils/serviceConfig.py b/python/lib/cloudutils/serviceConfig.py index 6b211eb5074..1e32d0f3b0f 100755 --- a/python/lib/cloudutils/serviceConfig.py +++ b/python/lib/cloudutils/serviceConfig.py @@ -54,9 +54,9 @@ class serviceCfgBase(object): except: logging.debug(formatExceptionInfo()) if self.syscfg.env.mode == "Server": - raise CloudRuntimeException("Configure %s failed, Please check the /var/log/cloud/setupManagement.log for detail"%self.serviceName) + raise CloudRuntimeException("Configure %s failed, Please check the /var/log/cloudstack/setupManagement.log for detail"%self.serviceName) else: - raise CloudRuntimeException("Configure %s failed, Please check the /var/log/cloud/setupAgent.log for detail"%self.serviceName) + raise CloudRuntimeException("Configure %s failed, Please check the /var/log/cloudstack/setupAgent.log for detail"%self.serviceName) def backup(self): if self.status is None: @@ -386,7 +386,7 @@ class securityPolicyConfigUbuntu(serviceCfgBase): return True except: - raise CloudRuntimeException("Failed to configure apparmor, please see the /var/log/cloud/setupAgent.log for detail, \ + raise CloudRuntimeException("Failed to configure apparmor, please see the /var/log/cloudstack/setupAgent.log for detail, \ or you can manually disable it before starting myCloud") def restore(self): @@ -416,7 +416,7 @@ class securityPolicyConfigRedhat(serviceCfgBase): cfo.replace_line("SELINUX=", "SELINUX=permissive") return True except: - raise CloudRuntimeException("Failed to configure selinux, please see the /var/log/cloud/setupAgent.log for detail, \ + raise CloudRuntimeException("Failed to configure selinux, please see the /var/log/cloudstack/setupAgent.log for detail, \ or you can manually disable it before starting myCloud") else: return True @@ -602,7 +602,7 @@ class cloudAgentConfig(serviceCfgBase): def configMyCloud(self): try: - cfo = configFileOps("/etc/cloud/agent/agent.properties", self) + cfo = configFileOps("/etc/cloudstack/agent/agent.properties", self) cfo.addEntry("host", self.syscfg.env.mgtSvr) cfo.addEntry("zone", self.syscfg.env.zone) cfo.addEntry("port", "443") @@ -624,7 +624,7 @@ class cloudAgentConfig(serviceCfgBase): def configAgent(self): try: - cfo = configFileOps("/etc/cloud/agent/agent.properties", self) + cfo = configFileOps("/etc/cloudstack/agent/agent.properties", self) cfo.addEntry("host", self.syscfg.env.mgtSvr) cfo.addEntry("zone", self.syscfg.env.zone) cfo.addEntry("pod", self.syscfg.env.pod) @@ -639,16 +639,16 @@ class cloudAgentConfig(serviceCfgBase): cfo.addEntry("resource", "com.cloud.hypervisor.kvm.resource.LibvirtComputingResource") cfo.save() - self.syscfg.svo.stopService("cloud-agent") + self.syscfg.svo.stopService("cloudstack-agent") bash("sleep 30") - self.syscfg.svo.enableService("cloud-agent") + self.syscfg.svo.enableService("cloudstack-agent") return True except: raise def configConsole(self): try: - cfo = configFileOps("/etc/cloud/agent/agent.properties", self) + cfo = configFileOps("/etc/cloudstack/agent/agent.properties", self) cfo.addEntry("host", self.syscfg.env.mgtSvr) cfo.addEntry("zone", self.syscfg.env.zone) cfo.addEntry("pod", self.syscfg.env.pod) @@ -661,8 +661,8 @@ class cloudAgentConfig(serviceCfgBase): cfo.addEntry("resource", "com.cloud.agent.resource.computing.consoleProxyResource") cfo.save() - self.syscfg.svo.stopService("cloud-agent") - self.syscfg.svo.enableService("cloud-agent") + self.syscfg.svo.stopService("cloudstack-agent") + self.syscfg.svo.enableService("cloudstack-agent") return True except: raise diff --git a/python/lib/cloudutils/serviceConfigServer.py b/python/lib/cloudutils/serviceConfigServer.py index 3fb973986e4..66ec2d00a92 100644 --- a/python/lib/cloudutils/serviceConfigServer.py +++ b/python/lib/cloudutils/serviceConfigServer.py @@ -80,32 +80,32 @@ class cloudManagementConfig(serviceCfgBase): if not cmd.isSuccess(): raise CloudInternalException(cmd.getErrMsg()) - cfo = configFileOps("/etc/cloud/management/tomcat6.conf", self) + cfo = configFileOps("/etc/cloudstack/management/tomcat6.conf", self) cfo.add_lines("JAVA_OPTS+=\" -Djavax.net.ssl.trustStore=%s \""%keyPath) elif self.syscfg.env.svrMode == "HttpsServer": - if not os.path.exists("/etc/cloud/management/server-ssl.xml") or not os.path.exists("/etc/cloud/management/tomcat6-ssl.conf"): - raise CloudRuntimeException("Cannot find /etc/cloud/management/server-ssl.xml or /etc/cloud/management/tomcat6-ssl.conf, https enables failed") - if os.path.exists("/etc/cloud/management/server.xml"): - bash("rm -f /etc/cloud/management/server.xml") - if os.path.exists("/etc/cloud/management/tomcat6.conf"): - bash("rm -f /etc/cloud/management/tomcat6.conf") - bash("ln -s /etc/cloud/management/server-ssl.xml /etc/cloud/management/server.xml") - bash("ln -s /etc/cloud/management/tomcat6-ssl.conf /etc/cloud/management/tomcat6.conf") + if not os.path.exists("/etc/cloudstack/management/server-ssl.xml") or not os.path.exists("/etc/cloudstack/management/tomcat6-ssl.conf"): + raise CloudRuntimeException("Cannot find /etc/cloudstack/management/server-ssl.xml or /etc/cloudstack/management/tomcat6-ssl.conf, https enables failed") + if os.path.exists("/etc/cloudstack/management/server.xml"): + bash("rm -f /etc/cloudstack/management/server.xml") + if os.path.exists("/etc/cloudstack/management/tomcat6.conf"): + bash("rm -f /etc/cloudstack/management/tomcat6.conf") + bash("ln -s /etc/cloudstack/management/server-ssl.xml /etc/cloudstack/management/server.xml") + bash("ln -s /etc/cloudstack/management/tomcat6-ssl.conf /etc/cloudstack/management/tomcat6.conf") if not bash("iptables-save |grep PREROUTING | grep 6443").isSuccess(): bash("iptables -A PREROUTING -t nat -p tcp --dport 443 -j REDIRECT --to-port 6443") else: - if not os.path.exists("/etc/cloud/management/server-nonssl.xml") or not os.path.exists("/etc/cloud/management/tomcat6-nonssl.conf"): - raise CloudRuntimeException("Cannot find /etc/cloud/management/server-nonssl.xml or /etc/cloud/management/tomcat6-nonssl.conf, https enables failed") - if os.path.exists("/etc/cloud/management/server.xml"): - bash("rm -f /etc/cloud/management/server.xml") - if os.path.exists("/etc/cloud/management/tomcat6.conf"): - bash("rm -f /etc/cloud/management/tomcat6.conf") - bash("ln -s /etc/cloud/management/server-nonssl.xml /etc/cloud/management/server.xml") - bash("ln -s /etc/cloud/management/tomcat6-nonssl.conf /etc/cloud/management/tomcat6.conf") + if not os.path.exists("/etc/cloudstack/management/server-nonssl.xml") or not os.path.exists("/etc/cloudstack/management/tomcat6-nonssl.conf"): + raise CloudRuntimeException("Cannot find /etc/cloudstack/management/server-nonssl.xml or /etc/cloudstack/management/tomcat6-nonssl.conf, https enables failed") + if os.path.exists("/etc/cloudstack/management/server.xml"): + bash("rm -f /etc/cloudstack/management/server.xml") + if os.path.exists("/etc/cloudstack/management/tomcat6.conf"): + bash("rm -f /etc/cloudstack/management/tomcat6.conf") + bash("ln -s /etc/cloudstack/management/server-nonssl.xml /etc/cloudstack/management/server.xml") + bash("ln -s /etc/cloudstack/management/tomcat6-nonssl.conf /etc/cloudstack/management/tomcat6.conf") #distro like sl 6.1 needs this folder, or tomcat6 failed to start checkHostName() - bash("mkdir /var/log/cloud-management/") + bash("mkdir /var/log/cloudstack-management/") #set max process per account is unlimited if os.path.exists("/etc/security/limits.conf"): cfo = configFileOps("/etc/security/limits.conf") @@ -118,9 +118,8 @@ class cloudManagementConfig(serviceCfgBase): except: pass - self.syscfg.svo.stopService("cloud-management") - if self.syscfg.svo.enableService("cloud-management"): + self.syscfg.svo.stopService("cloudstack-management") + if self.syscfg.svo.enableService("cloudstack-management"): return True else: - raise CloudRuntimeException("Failed to configure %s, please see the /var/log/cloud/setupManagement.log for detail"%self.serviceName) - + raise CloudRuntimeException("Failed to configure %s, please see the /var/log/cloudstack/setupManagement.log for detail"%self.serviceName) From 9b691fc443cc27f1e2026ec239fc4aa11a4167aa Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 7 Feb 2013 18:23:05 +0530 Subject: [PATCH 21/85] CLOUDSTACK-1175: Fix NPE by making _store a static variable shared by objects Signed-off-by: Rohit Yadav --- .../apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java b/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java index a5726e1d2ac..5f38ccf6141 100644 --- a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java +++ b/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java @@ -56,7 +56,7 @@ public class ApiRateLimitServiceImpl extends AdapterBase implements APIChecker, */ private int maxAllowed = 30; - private LimitStore _store = null; + private static LimitStore _store = null; @Inject AccountService _accountService; From c9dd19097f3a4982677f5aa5e2497e7526530e35 Mon Sep 17 00:00:00 2001 From: Sebastien Goasguen Date: Thu, 7 Feb 2013 15:35:51 +0100 Subject: [PATCH 22/85] Docs: Adding documentation and translation chapter in dev guide --- docs/en-US/Developers_Guide.xml | 1 + docs/en-US/building-documentation.xml | 40 +++++++++ docs/en-US/building-translation.xml | 75 ++++++++++++++++ docs/en-US/installing-publican.xml | 46 ++++++++++ docs/en-US/translating-documentation.xml | 38 ++++++++ docs/en-US/working-with-documentation.xml | 32 +++++++ docs/en-US/writing-new-documentation.xml | 100 ++++++++++++++++++++++ 7 files changed, 332 insertions(+) create mode 100644 docs/en-US/building-documentation.xml create mode 100644 docs/en-US/building-translation.xml create mode 100644 docs/en-US/installing-publican.xml create mode 100644 docs/en-US/translating-documentation.xml create mode 100644 docs/en-US/working-with-documentation.xml create mode 100644 docs/en-US/writing-new-documentation.xml diff --git a/docs/en-US/Developers_Guide.xml b/docs/en-US/Developers_Guide.xml index 6c09354f6a8..e753f9bcb33 100644 --- a/docs/en-US/Developers_Guide.xml +++ b/docs/en-US/Developers_Guide.xml @@ -50,6 +50,7 @@ + diff --git a/docs/en-US/building-documentation.xml b/docs/en-US/building-documentation.xml new file mode 100644 index 00000000000..484826604fa --- /dev/null +++ b/docs/en-US/building-documentation.xml @@ -0,0 +1,40 @@ + + +%BOOK_ENTITIES; +]> + + + +
+ Building &PRODUCT; Documentation + To build a specific guide, go to the source tree of the documentation in /docs and identify the guide you want to build. + Currenlty there are four guides plus the release notes, all defined in publican configuration files: + + publican-adminguide.cfg + publican-devguide.cfg + publican-installation.cfg + publican-plugin-niciranvp.cfg + publican-release-notes.cfg + + To build the Developer guide for example, do the following: + publican build --config=publican-devguide.cfg --formats=pdf --langs=en-US + A pdf file will be created in tmp/en-US/pdf, you may choose to build the guide in a different format like html. In that case just replace the format value. + +
diff --git a/docs/en-US/building-translation.xml b/docs/en-US/building-translation.xml new file mode 100644 index 00000000000..659c55ffc5e --- /dev/null +++ b/docs/en-US/building-translation.xml @@ -0,0 +1,75 @@ + + +%BOOK_ENTITIES; +]> + + + +
+ Translating &PRODUCT; Documentation + Now that you know how to build the documentation with Publican, let's move on to building it in different languages. Publican helps us + build the documentation in various languages by using Portable Object Template (POT) files and Portable Objects (PO) files for each language. + + The POT files are generated by parsing all the DocBook files in the language of origin, en-US for us, and creating a long list of strings + for each file that needs to be translated. The translation can be done by hand directly in the PO files of each target language or via the + transifex service. + + + Transifex is a free service to help translate documents and organize distributed teams + of translators. Anyone interested in helping with the translation should get an account on Transifex + + + Three &PRODUCT; projects exist on Transifex. It is recommended to tour those projects to become familiar with Transifex: + + https://www.transifex.com/projects/p/ACS_DOCS/ + https://www.transifex.com/projects/p/ACS_Runbook/ + https://www.transifex.com/projects/p/CloudStackUI/ + + + + + The pot directory should already exist in the source tree. If you want to build an up to date translation, you might have to update it to include any pot file that was not previously generated. + To register new resources on transifex, you will need to be an admin of the transifex &PRODUCT; site. Send an email to the developer list if you want access. + + First we need to generate the .pot files for all the DocBook xml files needed for a particular guide. This is well explained at the publican website in a section on + how to prepare a document for translation. + The basic command to execute to build the pot files for the developer guide is: + publican update_pot --config=publican-devguide.cfg + This will create a pot directory with pot files in it, one for each corresponding xml files needed to build the guide. Once genereated, all pots files need to be configured for translation using transifex this is best done by using the transifex client that you can install with the following command (For RHEL and its derivatives): + yum install transifex-client + The transifex client is also available via PyPi and you can install it like this: + easy_install transifex-client + Once you have installed the transifex client you can run the settx.sh script in the docs directory. This will create the .tx/config file used by transifex to push and pull all translation strings. + All the resource files need to be uploaded to transifex, this is done with the transifex client like so: + tx push -s + Once the translators have completed translation of the documentation, the translated strings can be pulled from transifex like so: + tx pull -a + If you wish to push specific resource files or pull specific languages translation strings, you can do so with the transifex client. A complete documentation of + the client is available on the client website + When you pull new translation strings a directory will be created corresponding to the language of the translation. This directory will contain PO files that will be used by Publican to create the documentation in that specific language. For example assuming that you pull the French translation whose language code is fr-FR, you will build the documentation with publican: + publican build --config=publican-devguide.cfg --formats=html --langs=fr-FR + + + Some languages like Chinese or Japanese will not render well in pdf format and html should be used. + + + + +
diff --git a/docs/en-US/installing-publican.xml b/docs/en-US/installing-publican.xml new file mode 100644 index 00000000000..9f180aad375 --- /dev/null +++ b/docs/en-US/installing-publican.xml @@ -0,0 +1,46 @@ + + +%BOOK_ENTITIES; +]> + + + +
+ Installing Publican + &PRODUCT; documentation is built using publican. This section describes how to install publican on your own machine so that you can build the documentation guides. + + The &PRODUCT; documentation source code is located under /docs + Publican documentation itself is also very useful. + + On RHEL and RHEL derivatives, install publican with the following command: + yum install publican publican-doc + On Ubuntu, install publican with the following command: + apt-get install publican publican-doc + For other distribution refer to the publican documentation listed above. For latest versions of OSX you may have to install from source and tweak it to your own setup. + Once publican is installed, you need to setup the so-called &PRODUCT; brand defined in the docs/publican-&PRODUCT; directory. + To do so, enter the following commands: + + sudo cp -R publican-cloudstack /usr/share/publican/Common_Content/cloudstack + + If this fails or you later face errors related to the brand files, see the publican documentation. + With publican installed and the &PRODUCT; brand files in place, you should be able to build any documentation guide. + + +
diff --git a/docs/en-US/translating-documentation.xml b/docs/en-US/translating-documentation.xml new file mode 100644 index 00000000000..afe27658f1a --- /dev/null +++ b/docs/en-US/translating-documentation.xml @@ -0,0 +1,38 @@ + + +%BOOK_ENTITIES; +]> + + + +
+ Translating &PRODUCT; Documentation + + There are two ways to translate the documentation: + + + Directly using the Transifex website and using their user interface. + Using the Transifex client and pushing your translated strings to the website. + + + Once a translation is complete, a site admin will pull the translated strings within the &PRODUCT; repository, build the documenation and publish it. + For instructions on how to use the Transifex website see http://sebgoa.blogspot.ch/2012/11/translating-apache-cloudstack-docs-with.html + For instructions on how to use the Transifex client to translate from the command line see http://sebgoa.blogspot.ch/2012/12/using-transifex-client-to-translate.html +
diff --git a/docs/en-US/working-with-documentation.xml b/docs/en-US/working-with-documentation.xml new file mode 100644 index 00000000000..67748427299 --- /dev/null +++ b/docs/en-US/working-with-documentation.xml @@ -0,0 +1,32 @@ + + +%BOOK_ENTITIES; +]> + + + + + Preparing and Building &PRODUCT; Documentation + This chapter describes how to install publican, how to write new documentation and build a guide as well as how to build a translated version of the documentation using transifex + + + + + diff --git a/docs/en-US/writing-new-documentation.xml b/docs/en-US/writing-new-documentation.xml new file mode 100644 index 00000000000..340900e3c60 --- /dev/null +++ b/docs/en-US/writing-new-documentation.xml @@ -0,0 +1,100 @@ + + +%BOOK_ENTITIES; +]> + + + +
+ Writing &PRODUCT; Documentation + &PRODUCT; documentation is written in DocBook xml format. Each guide defined with a publican configuration file refers to a DocBook book. + These books are defined in xml files in docs/en-US, for instance if we look at the Developers guide, its configuration file contains: + + xml_lang: en-US + type: Book + docname: Developers_Guide + brand: cloudstack + chunk_first: 1 + chunk_section_depth: 1 + + The docname key gives you the basename of the DocBook file located in the en-US directory that contains the description of the book. + Looking closely at Developers_Guide.xml we see that it contains book tags and several references to other xml files. These are the chapters of the book, currently they are: + + + + + + + + + + + + + + ]]> + + All these xml files are written in DocBook format. + + DocBook format is well documented, refer to the documentation for any questions about DocBook tags + + When writing documentation, you therefore need to located the book,chapter and section of the content you want to write/correct. + Or create a new book,chapter,section. + You will then learn much more about DocBook tagging. In order to write this chapter about documentation, I added the working-with-documentation.xmlfile describing a chapter in the Developer book and I created several sections within that chapter like so: + + + Preparing and Building &PRODUCT; Documentation + This chapter describes how to install publican, how to write new documentation and build a guide as well as how to build a translated version of the documentation using transifex + + + + + + ]]> + + + Note the id witin the chapter tag, it represents the basename of the xml file describing the chapter. + For translation purposes it is important that this basename be less than 50 characters long. + + This chapter also refers to xml files which contains each section. While you could embed the sections directly in the chapter file and as a matter of fact also write the chapters within a single book file. Breaking things up in smaller files at the granularity of the section, allows us to re-use any section to build different books. + For completeness here is an example of a section: + + + Building &PRODUCT; Documentation + To build a specific guide, go to the source tree of the documentation in /docs and identify the guide you want to build. + Currenlty there are four guides plus the release notes, all defined in publican configuration files: + + publican-adminguide.cfg + publican-devguide.cfg + publican-installation.cfg + publican-plugin-niciranvp.cfg + publican-release-notes.cfg + + To build the Developer guide for example, do the following: + publican build --config=publican-devguide.cfg --formats=pdf --langs=en-US + A pdf file will be created in tmp/en-US/pdf, you may choose to build the guide in a different format like html. In that case just replace the format value. +
+ ]]> + + Happy Publicaning and DocBooking. +
From 5ce1f3b12801a947062bac7f8d68a3c037c5fef5 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Thu, 7 Feb 2013 17:04:30 +0100 Subject: [PATCH 23/85] CLOUDSTACK-1193 / docs: Fix typo in libvirt tcp_listen port The correct port is 16509, but this is clearly a typo. This fixes: CLOUDSTACK-1193 --- docs/en-US/hypervisor-host-install-libvirt.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en-US/hypervisor-host-install-libvirt.xml b/docs/en-US/hypervisor-host-install-libvirt.xml index 4649d8522db..d7dc47f8dbd 100644 --- a/docs/en-US/hypervisor-host-install-libvirt.xml +++ b/docs/en-US/hypervisor-host-install-libvirt.xml @@ -31,7 +31,7 @@ Set the following paramaters: listen_tls = 0 listen_tcp = 1 - tcp_port = "16059" + tcp_port = "16509" auth_tcp = "none" mdns_adv = 0
From a02c66594f3209409737a7c364ce65884a0f1f83 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Thu, 7 Feb 2013 13:17:45 -0800 Subject: [PATCH 24/85] CLOUDSTACK-537: cloudstack UI - Infrastructure menu - create network dialog - Advanced sg-enabled zone - (1) account-specific network doesn't work at backend. Therefore, remove "account" option from scope dropdown. (2) zone-wide network: list only sg network offerings. --- ui/scripts/system.js | 46 ++++++++++++++++++-------------------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/ui/scripts/system.js b/ui/scripts/system.js index 2ce7672a60f..cb09a851742 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -1144,8 +1144,7 @@ docID: 'helpGuestNetworkZoneScope', select: function(args) { var array1 = []; - if(args.context.zones[0].networktype == "Advanced" && args.context.zones[0].securitygroupsenabled == true) { - array1.push({id: 'account-specific', description: 'Account'}); + if(args.context.zones[0].networktype == "Advanced" && args.context.zones[0].securitygroupsenabled == true) { array1.push({id: 'zone-wide', description: 'All'}); } else { @@ -1312,38 +1311,31 @@ } var networkOfferingArray = []; + $.ajax({ url: createURL(apiCmd + array1.join("")), dataType: "json", async: false, - success: function(json) { + success: function(json) { networkOfferingObjs = json.listnetworkofferingsresponse.networkoffering; if (networkOfferingObjs != null && networkOfferingObjs.length > 0) { - for (var i = 0; i < networkOfferingObjs.length; i++) { - - if(args.scope=="account-specific" && args.context.zones[0].securitygroupsenabled == true) { //BUG - CLOUDSTACK-1063 - var serviceObjArray = networkOfferingObjs[i].name; - if(serviceObjArray == "DefaultSharedNetworkOfferingWithSGService"){ - continue; - } - } - - //comment out the following 12 lines because of CS-16718 - /* - if(args.scope == "account-specific" || args.scope == "project-specific") { //if args.scope == "account-specific" or "project-specific", exclude Isolated network offerings with SourceNat service (bug 12869) - var includingSourceNat = false; - var serviceObjArray = networkOfferingObjs[i].service; - for(var k = 0; k < serviceObjArray.length; k++) { - if(serviceObjArray[k].name == "SourceNat") { - includingSourceNat = true; - break; - } - } - if(includingSourceNat == true) - continue; //skip to next network offering + for (var i = 0; i < networkOfferingObjs.length; i++) { + //for zone-wide network in Advanced SG-enabled zone, list only SG network offerings + if(args.context.zones[0].networktype == 'Advanced' && args.context.zones[0].securitygroupsenabled == true) { + if(args.scope == "zone-wide") { + var includingSecurityGroup = false; + var serviceObjArray = networkOfferingObjs[i].service; + for(var k = 0; k < serviceObjArray.length; k++) { + if(serviceObjArray[k].name == "SecurityGroup") { + includingSecurityGroup = true; + break; + } + } + if(includingSecurityGroup == false) + continue; //skip to next network offering + } } - */ - + networkOfferingArray.push({id: networkOfferingObjs[i].id, description: networkOfferingObjs[i].displaytext}); } } From cc24bebcb6c6f3bddcdb7bd26d7f6a7556c16c07 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Thu, 7 Feb 2013 13:19:55 -0800 Subject: [PATCH 25/85] CLOUDSTACK-537: cloudstack UI - Advanced sg-enabled zone - VM Wizard - step 5 - select network screen - populate only sg networks (i.e. not show non-sg networks). --- ui/scripts/instanceWizard.js | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/ui/scripts/instanceWizard.js b/ui/scripts/instanceWizard.js index e5e2fb7bcbb..d9260b0b2de 100644 --- a/ui/scripts/instanceWizard.js +++ b/ui/scripts/instanceWizard.js @@ -360,14 +360,11 @@ canusefordeploy: true }; - // step5ContainerType of Advanced SG-enabled zone is 'select-security-group', so won't come into this block - /* if(selectedZoneObj.networktype == 'Advanced' && selectedZoneObj.securitygroupsenabled == true) { $.extend(networkData, { type: 'Shared' }); - } - */ + } if (!(cloudStack.context.projects && cloudStack.context.projects[0])) { networkData.domainid = g_domainid; @@ -386,22 +383,31 @@ } }); + var networkObjsToPopulate = []; $.ajax({ url: createURL('listNetworks'), data: networkData, async: false, success: function(json) { - networkObjs = json.listnetworksresponse.network ? json.listnetworksresponse.network : []; - + networkObjs = json.listnetworksresponse.network ? json.listnetworksresponse.network : []; if(networkObjs.length > 0) { for(var i = 0; i < networkObjs.length; i++) { var networkObj = networkObjs[i]; + var includingSecurityGroup = false; var serviceObjArray = networkObj.service; for(var k = 0; k < serviceObjArray.length; k++) { if(serviceObjArray[k].name == "SecurityGroup") { - networkObjs[i].type = networkObjs[i].type + ' (sg)'; + networkObjs[i].type = networkObjs[i].type + ' (sg)'; + includingSecurityGroup = true; + break; } - } + } + //for Advanced SG-enabled zone, list only SG network offerings + if(selectedZoneObj.networktype == 'Advanced' && selectedZoneObj.securitygroupsenabled == true) { + if(includingSecurityGroup == false) + continue; //skip to next network offering + } + networkObjsToPopulate.push(networkObj); } } } @@ -439,7 +445,7 @@ args.response.success({ type: 'select-network', data: { - networkObjs: networkObjs, + networkObjs: networkObjsToPopulate, securityGroups: [], networkOfferings: networkOfferingObjs, vpcs: vpcObjs From 2f44ed08201e1df9e7a4003058304b1444a522ec Mon Sep 17 00:00:00 2001 From: Hugo Trippaers Date: Thu, 7 Feb 2013 22:43:50 +0100 Subject: [PATCH 26/85] Include the compiled python module, so it will be removed as well when the package is removed --- packaging/centos63/cloud.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/packaging/centos63/cloud.spec b/packaging/centos63/cloud.spec index b2eb3527347..cc62acfaf74 100644 --- a/packaging/centos63/cloud.spec +++ b/packaging/centos63/cloud.spec @@ -382,6 +382,7 @@ fi %attr(0644, root, root) %{_datadir}/%{name}-common/vms/systemvm.iso %attr(0644, root, root) %{_datadir}/%{name}-common/vms/systemvm.zip %attr(0644,root,root) %{_libdir}/python2.6/site-packages/cloud_utils.py +%attr(0644,root,root) %{_libdir}/python2.6/site-packages/cloud_utils.pyc %attr(0644,root,root) %{_libdir}/python2.6/site-packages/cloudutils/* %doc LICENSE %doc NOTICE From f6c4b221395b08a809c3e05baca2b39ca162c778 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Thu, 7 Feb 2013 19:41:15 +0100 Subject: [PATCH 27/85] agent: Remove the main() method from LibvirtComputingResource Seems like very ancient code which is not needed. --- .../resource/LibvirtComputingResource.java | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index f320a66b487..4acd0832750 100755 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -1064,28 +1064,6 @@ ServerResource { return true; } - public static void main(String[] args) { - s_logger.addAppender(new org.apache.log4j.ConsoleAppender( - new org.apache.log4j.PatternLayout(), "System.out")); - LibvirtComputingResource test = new LibvirtComputingResource(); - Map params = new HashMap(); - try { - test.configure("test", params); - } catch (ConfigurationException e) { - System.out.println(e.getMessage()); - e.printStackTrace(); - } - String result = null; - // String result = test.startDomainRouter("domr1", - // "/var/lib/images/centos.5-4.x86-64/centos-small.img", 128, "0064", - // "02:00:30:00:01:01", "00:16:3e:77:e2:a1", "02:00:30:00:64:01"); - boolean created = (result == null); - s_logger.info("Domain " + (created ? " " : " not ") + " created"); - - s_logger.info("Rule " + (created ? " " : " not ") + " created"); - test.stop(); - } - @Override public Answer executeRequest(Command cmd) { From 5dfcd309f10e5bd6a918f7fdff3f44a3dff2374a Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Thu, 7 Feb 2013 22:58:20 +0100 Subject: [PATCH 28/85] agent: Do not define domains persistent in libvirt We used to define domains persistent in libvirt, which caused XML definitions to stay there after a reboot of the hypervisor. We however don't do anything with those already defined domains, actually, we wipe all defined domains when starting the agent. Some users however reported that libvirt started these domains after a reboot before the CloudStack agent was started. By starting domains from the XML description and not defining them we prevent them from ever being stored in libvirt. --- .../resource/LibvirtComputingResource.java | 100 +++--------------- 1 file changed, 13 insertions(+), 87 deletions(-) diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 4acd0832750..49d2f0b03a3 100755 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -368,10 +368,6 @@ ServerResource { NATIVE, OPENVSWITCH } - protected enum defineOps { - UNDEFINE_VM, DEFINE_VM - } - protected BridgeType _bridgeType; private String getEndIpFromStartIp(String startIp, int numIps) { @@ -981,75 +977,22 @@ ServerResource { protected String startDomain(Connect conn, String vmName, String domainXML) throws LibvirtException, InternalErrorException { - /* No duplicated vm, we will success, or failed */ - boolean failed = false; Domain dm = null; try { - dm = conn.domainDefineXML(domainXML); + /* + We create a transient domain here. When this method gets + called we receive a full XML specification of the guest, + so no need to define it persistent. + + This also makes sure we never have any old "garbage" defined + in libvirt which might haunt us. + */ + dm = conn.domainCreateXML(domainXML, 0); } catch (final LibvirtException e) { - /* Duplicated defined vm */ - s_logger.warn("Failed to define domain " + vmName + ": " + s_logger.warn("Failed to start domain " + vmName + ": " + e.getMessage()); - failed = true; - } finally { - try { - if (dm != null) { - dm.free(); - } - } catch (final LibvirtException e) { - - } } - /* If failed, undefine the vm */ - Domain dmOld = null; - Domain dmNew = null; - try { - if (failed) { - dmOld = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName - .getBytes())); - dmOld.undefine(); - dmNew = conn.domainDefineXML(domainXML); - } - } catch (final LibvirtException e) { - s_logger.warn("Failed to define domain (second time) " + vmName - + ": " + e.getMessage()); - throw e; - } catch (Exception e) { - s_logger.warn("Failed to define domain (second time) " + vmName - + ": " + e.getMessage()); - throw new InternalErrorException(e.toString()); - } finally { - try { - if (dmOld != null) { - dmOld.free(); - } - if (dmNew != null) { - dmNew.free(); - } - } catch (final LibvirtException e) { - - } - } - - /* Start the VM */ - try { - dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName - .getBytes())); - dm.create(); - } catch (LibvirtException e) { - s_logger.warn("Failed to start domain: " + vmName + ": " - + e.getMessage()); - throw e; - } finally { - try { - if (dm != null) { - dm.free(); - } - } catch (final LibvirtException e) { - - } - } return null; } @@ -2845,7 +2788,7 @@ ServerResource { List ifaces = getInterfaces(conn, vmName); destroy_network_rules_for_vm(conn, vmName); - String result = stopVM(conn, vmName, defineOps.UNDEFINE_VM); + String result = stopVM(conn, vmName); if (result == null) { for (DiskDef disk : disks) { if (disk.getDeviceType() == DiskDef.deviceType.CDROM @@ -3888,7 +3831,7 @@ ServerResource { .getBytes())); String vmDef = dm.getXMLDesc(0); s_logger.debug(vmDef); - msg = stopVM(conn, vmName, defineOps.UNDEFINE_VM); + msg = stopVM(conn, vmName); msg = startDomain(conn, vmName, vmDef); return null; } catch (LibvirtException e) { @@ -3910,7 +3853,7 @@ ServerResource { return msg; } - protected String stopVM(Connect conn, String vmName, defineOps df) { + protected String stopVM(Connect conn, String vmName) { DomainInfo.DomainState state = null; Domain dm = null; @@ -3960,23 +3903,6 @@ ServerResource { } } - if (df == defineOps.UNDEFINE_VM) { - try { - dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName - .getBytes())); - dm.undefine(); - } catch (LibvirtException e) { - - } finally { - try { - if (dm != null) { - dm.free(); - } - } catch (LibvirtException l) { - - } - } - } return null; } From a5f0be186f8d18f97d9114292cd56b4b2e5880d0 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Thu, 7 Feb 2013 23:02:03 +0100 Subject: [PATCH 29/85] agent: Rename startDomain to startVM The other methods are called stopVM and rebootVM, so it makes sence to use startVM. --- .../hypervisor/kvm/resource/LibvirtComputingResource.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 49d2f0b03a3..552afb1e665 100755 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -975,7 +975,7 @@ ServerResource { } } - protected String startDomain(Connect conn, String vmName, String domainXML) + protected String startVM(Connect conn, String vmName, String domainXML) throws LibvirtException, InternalErrorException { Domain dm = null; try { @@ -3006,7 +3006,7 @@ ServerResource { createVifs(vmSpec, vm); s_logger.debug("starting " + vmName + ": " + vm.toString()); - startDomain(conn, vmName, vm.toString()); + startVM(conn, vmName, vm.toString()); NicTO[] nics = vmSpec.getNics(); for (NicTO nic : nics) { @@ -3832,7 +3832,7 @@ ServerResource { String vmDef = dm.getXMLDesc(0); s_logger.debug(vmDef); msg = stopVM(conn, vmName); - msg = startDomain(conn, vmName, vmDef); + msg = startVM(conn, vmName, vmDef); return null; } catch (LibvirtException e) { s_logger.warn("Failed to create vm", e); From 3dea9a7be578cd5116e02d66a39e2e61f8aedd9a Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Thu, 7 Feb 2013 14:44:31 -0800 Subject: [PATCH 30/85] Summary: Remove superfluous chroot and change to use standard jre Detail: Since the script executes inside the running vm, the chroot is not necessary. Also the standard jre is used instead of sun jre. BUG-ID: CLOUDSTACK-1066 Signed-off-by: Chiradeep Vittal 1360277071 -0800 --- .../systemvmtemplate/postinstall.sh | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/tools/appliance/definitions/systemvmtemplate/postinstall.sh b/tools/appliance/definitions/systemvmtemplate/postinstall.sh index 4473bbfb5ca..40064325a2b 100644 --- a/tools/appliance/definitions/systemvmtemplate/postinstall.sh +++ b/tools/appliance/definitions/systemvmtemplate/postinstall.sh @@ -59,44 +59,46 @@ EOF install_packages() { DEBIAN_FRONTEND=noninteractive DEBIAN_PRIORITY=critical - DEBCONF_DB_OVERRIDE=’File{/root/config.dat}’ - export DEBIAN_FRONTEND DEBIAN_PRIORITY DEBCONF_DB_OVERRIDE #basic stuff - chroot . apt-get --no-install-recommends -q -y --force-yes install rsyslog logrotate cron chkconfig insserv net-tools ifupdown vim-tiny netbase iptables openssh-server grub-legacy e2fsprogs dhcp3-client dnsmasq tcpdump socat wget python bzip2 sed gawk diff grep gzip less tar telnet ftp rsync traceroute psmisc lsof procps monit inetutils-ping iputils-arping httping dnsutils zip unzip ethtool uuid file iproute acpid iptables-persistent virt-what sudo + apt-get --no-install-recommends -q -y --force-yes install rsyslog logrotate cron chkconfig insserv net-tools ifupdown vim-tiny netbase iptables openssh-server grub-legacy e2fsprogs dhcp3-client dnsmasq tcpdump socat wget python bzip2 sed gawk diff grep gzip less tar telnet ftp rsync traceroute psmisc lsof procps monit inetutils-ping iputils-arping httping dnsutils zip unzip ethtool uuid file iproute acpid iptables-persistent virt-what sudo #fix hostname in openssh-server generated keys sed -i "s/root@\(.*\)$/root@systemvm/g" etc/ssh/ssh_host_*.pub #sysstat - chroot . echo 'sysstat sysstat/enable boolean true' | chroot . debconf-set-selections - chroot . apt-get --no-install-recommends -q -y --force-yes install sysstat + echo 'sysstat sysstat/enable boolean true' | debconf-set-selections + apt-get --no-install-recommends -q -y --force-yes install sysstat #apache - chroot . apt-get --no-install-recommends -q -y --force-yes install apache2 ssl-cert + apt-get --no-install-recommends -q -y --force-yes install apache2 ssl-cert #haproxy - chroot . apt-get --no-install-recommends -q -y --force-yes install haproxy + apt-get --no-install-recommends -q -y --force-yes install haproxy #dnsmasq - chroot . apt-get --no-install-recommends -q -y --force-yes install dnsmasq + apt-get --no-install-recommends -q -y --force-yes install dnsmasq #nfs client - chroot . apt-get --no-install-recommends -q -y --force-yes install nfs-common + apt-get --no-install-recommends -q -y --force-yes install nfs-common #vpn stuff - chroot . apt-get --no-install-recommends -q -y --force-yes install xl2tpd openswan bcrelay ppp ipsec-tools tdb-tools + apt-get --no-install-recommends -q -y --force-yes install xl2tpd openswan bcrelay ppp ipsec-tools tdb-tools #vmware tools - chroot . apt-get --no-install-recommends -q -y --force-yes install open-vm-tools + apt-get --no-install-recommends -q -y --force-yes install open-vm-tools #xenstore utils - chroot . apt-get --no-install-recommends -q -y --force-yes install xenstore-utils libxenstore3.0 + apt-get --no-install-recommends -q -y --force-yes install xenstore-utils libxenstore3.0 #keepalived and conntrackd - chroot . apt-get --no-install-recommends -q -y --force-yes install keepalived conntrackd ipvsadm libnetfilter-conntrack3 libnl1 + apt-get --no-install-recommends -q -y --force-yes install keepalived conntrackd ipvsadm libnetfilter-conntrack3 libnl1 #ipcalc - chroot . apt-get --no-install-recommends -q -y --force-yes install ipcalc + apt-get --no-install-recommends -q -y --force-yes install ipcalc + #java + apt-get --no-install-recommends -q -y --force-yes install default-jre-headless + + # Setup sudo to allow no-password sudo for "admin" + groupadd -r admin + usermod -a -G admin cloud + echo "root:password" | chpasswd + sed -i -e '/Defaults\s\+env_reset/a Defaults\texempt_group=admin' /etc/sudoers + sed -i -e 's/%admin ALL=(ALL) ALL/%admin ALL=NOPASSWD:ALL/g' /etc/sudoers + + mkdir /home/cloud/.ssh + chmod 700 /home/cloud/.ssh - echo "***** getting sun jre 6*********" - chroot . echo 'sun-java6-bin shared/accepted-sun-dlj-v1-1 boolean true - sun-java6-jre shared/accepted-sun-dlj-v1-1 boolean true - sun-java6-jre sun-java6-jre/stopthread boolean true - sun-java6-jre sun-java6-jre/jcepolicy note - sun-java6-bin shared/present-sun-dlj-v1-1 note - sun-java6-jre shared/present-sun-dlj-v1-1 note ' | chroot . debconf-set-selections - chroot . apt-get --no-install-recommends -q -y install sun-java6-jre } cleanup() { From 4e4edc9e42f69b10314d0b09629546acc4db333a Mon Sep 17 00:00:00 2001 From: Prachi Damle Date: Thu, 7 Feb 2013 17:22:16 -0800 Subject: [PATCH 31/85] CLOUDSTACK-1116 [EC2 Query API] Support for ModifyImageAttribute and ResetImageAttribute https://reviews.apache.org/r/9213 Add support for EC2 ApiI's ModifyImageAttribute and ResetImageAttribute. Attributes supported are Description and LaunchPermission. --- .../cloud/bridge/service/EC2RestServlet.java | 107 +++++++++++++++--- .../bridge/service/EC2SoapServiceImpl.java | 30 ++--- .../bridge/service/core/ec2/EC2Engine.java | 71 ++++-------- .../core/ec2/EC2ImageLaunchPermission.java | 53 +++++++++ .../core/ec2/EC2ModifyImageAttribute.java | 39 ++----- 5 files changed, 193 insertions(+), 107 deletions(-) create mode 100644 awsapi/src/com/cloud/bridge/service/core/ec2/EC2ImageLaunchPermission.java diff --git a/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java index 57a32a48289..4612b60eef5 100644 --- a/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java +++ b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java @@ -87,6 +87,7 @@ import com.amazon.ec2.DetachVolumeResponse; import com.amazon.ec2.DisassociateAddressResponse; import com.amazon.ec2.GetPasswordDataResponse; import com.amazon.ec2.ImportKeyPairResponse; +import com.amazon.ec2.LaunchPermissionItemType; import com.amazon.ec2.ModifyImageAttributeResponse; import com.amazon.ec2.RebootInstancesResponse; import com.amazon.ec2.RegisterImageResponse; @@ -123,10 +124,13 @@ import com.cloud.bridge.service.core.ec2.EC2Engine; import com.cloud.bridge.service.core.ec2.EC2Filter; import com.cloud.bridge.service.core.ec2.EC2GroupFilterSet; import com.cloud.bridge.service.core.ec2.EC2Image; +import com.cloud.bridge.service.core.ec2.EC2ImageAttributes.ImageAttribute; +import com.cloud.bridge.service.core.ec2.EC2ImageLaunchPermission; import com.cloud.bridge.service.core.ec2.EC2ImportKeyPair; import com.cloud.bridge.service.core.ec2.EC2InstanceFilterSet; import com.cloud.bridge.service.core.ec2.EC2IpPermission; import com.cloud.bridge.service.core.ec2.EC2KeyPairFilterSet; +import com.cloud.bridge.service.core.ec2.EC2ModifyImageAttribute; import com.cloud.bridge.service.core.ec2.EC2RebootInstances; import com.cloud.bridge.service.core.ec2.EC2RegisterImage; import com.cloud.bridge.service.core.ec2.EC2ReleaseAddress; @@ -1021,38 +1025,105 @@ public class EC2RestServlet extends HttpServlet { serializeResponse(response, EC2response); } - private void modifyImageAttribute( HttpServletRequest request, HttpServletResponse response ) + private void modifyImageAttribute( HttpServletRequest request, HttpServletResponse response ) throws ADBException, XMLStreamException, IOException { - EC2Image image = new EC2Image(); + EC2ModifyImageAttribute ec2request = new EC2ModifyImageAttribute(); - // -> its interesting to note that the SOAP API docs has description but the REST API docs do not - String[] imageId = request.getParameterValues( "ImageId" ); - if ( null != imageId && 0 < imageId.length ) - image.setId( imageId[0] ); - else { response.sendError(530, "Missing ImageId parameter" ); return; } + String[] imageId = request.getParameterValues( "ImageId" ); + if ( imageId != null && imageId.length > 0 ) + ec2request.setImageId( imageId[0]); + else { + response.sendError(530, "Missing ImageId parameter" ); + return; + } - String[] description = request.getParameterValues( "Description" ); - if ( null != description && 0 < description.length ) - image.setDescription( description[0] ); - else { response.sendError(530, "Missing Description parameter" ); return; } + String[] description = request.getParameterValues( "Description.Value" ); + if ( description != null && description.length > 0 ) { + ec2request.setAttribute(ImageAttribute.description); + ec2request.setDescription(description[0]); + } else { + //add all launch permissions to ec2request + ec2request = addLaunchPermImageAttribute(request, ec2request); + if (ec2request.getLaunchPermissionSet().length > 0) + ec2request.setAttribute(ImageAttribute.launchPermission); + else { + response.sendError(530, "Missing Attribute parameter - Description/LaunchPermission should be provided" ); + return; + } + } // -> execute the request - ModifyImageAttributeResponse EC2response = EC2SoapServiceImpl.toModifyImageAttributeResponse( ServiceProvider.getInstance().getEC2Engine().modifyImageAttribute( image )); + ModifyImageAttributeResponse EC2response = EC2SoapServiceImpl.toModifyImageAttributeResponse( + ServiceProvider.getInstance().getEC2Engine().modifyImageAttribute( ec2request )); serializeResponse(response, EC2response); } + private EC2ModifyImageAttribute addLaunchPermImageAttribute(HttpServletRequest request, EC2ModifyImageAttribute ec2request) { + String[] users = {".UserId", ".Group"}; + String[] operations = {"LaunchPermission.Add.", "LaunchPermission.Remove."}; + int nCount = 1; + + for (int i = 0; i < 2; i++) { + for (int j = 0; j < 2; j++) { + List launchPermissionList = new ArrayList(); + do { + String[] launchPermissionAddGroup = request.getParameterValues( operations[j] + nCount + users[i] ); + if (launchPermissionAddGroup != null && launchPermissionAddGroup.length > 0) + launchPermissionList.add(launchPermissionAddGroup[0]); + else + break; + nCount++; + } while (true); + if (nCount != 1) { + EC2ImageLaunchPermission ec2LaunchPermission = new EC2ImageLaunchPermission(); + if (operations[j].contains("Add")) + ec2LaunchPermission.setLaunchPermOp(EC2ImageLaunchPermission.Operation.add); + else + ec2LaunchPermission.setLaunchPermOp(EC2ImageLaunchPermission.Operation.remove); + for (String launchPerm : launchPermissionList) { + ec2LaunchPermission.addLaunchPermission(launchPerm); + } + ec2request.addLaunchPermission(ec2LaunchPermission); + nCount = 1; + } + } + } + + return ec2request; + } + private void resetImageAttribute( HttpServletRequest request, HttpServletResponse response ) throws ADBException, XMLStreamException, IOException { - EC2Image image = new EC2Image(); + EC2ModifyImageAttribute ec2request = new EC2ModifyImageAttribute(); String[] imageId = request.getParameterValues( "ImageId" ); - if ( null != imageId && 0 < imageId.length ) - image.setId( imageId[0] ); - else { response.sendError(530, "Missing ImageId parameter" ); return; } + if ( imageId != null && imageId.length > 0) + ec2request.setImageId(imageId[0]); + else { + response.sendError(530, "Missing ImageId parameter" ); + return; + } + + String[] attribute = request.getParameterValues( "Attribute" ); + if ( attribute != null && attribute.length > 0 ) { + if (attribute[0].equalsIgnoreCase("launchPermission")) + ec2request.setAttribute(ImageAttribute.launchPermission); + else { + response.sendError(501, "Unsupported Attribute - only launchPermission supported" ); + return; + } + } else { + response.sendError(530, "Missing Attribute parameter" ); + return; + } + + EC2ImageLaunchPermission launchPermission = new EC2ImageLaunchPermission(); + launchPermission.setLaunchPermOp(EC2ImageLaunchPermission.Operation.reset); + ec2request.addLaunchPermission(launchPermission); // -> execute the request - image.setDescription( "" ); - ResetImageAttributeResponse EC2response = EC2SoapServiceImpl.toResetImageAttributeResponse( ServiceProvider.getInstance().getEC2Engine().modifyImageAttribute( image )); + ResetImageAttributeResponse EC2response = EC2SoapServiceImpl.toResetImageAttributeResponse( + ServiceProvider.getInstance().getEC2Engine().modifyImageAttribute( ec2request )); serializeResponse(response, EC2response); } diff --git a/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java b/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java index b2451c6a0cb..6fae480e222 100644 --- a/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java +++ b/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java @@ -47,6 +47,7 @@ import com.cloud.bridge.service.core.ec2.EC2DescribeInstances; import com.cloud.bridge.service.core.ec2.EC2DescribeInstancesResponse; import com.cloud.bridge.service.core.ec2.EC2DescribeKeyPairs; import com.cloud.bridge.service.core.ec2.EC2DescribeKeyPairsResponse; +import com.cloud.bridge.service.core.ec2.EC2ImageLaunchPermission; import com.cloud.bridge.service.core.ec2.EC2ResourceTag; import com.cloud.bridge.service.core.ec2.EC2DescribeSecurityGroups; import com.cloud.bridge.service.core.ec2.EC2DescribeSecurityGroupsResponse; @@ -595,31 +596,32 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { request.setImageId(miat.getImageId()); request.setAttribute(ImageAttribute.launchPermission); if(launchPermOp.getAdd() != null){ - request.setLaunchPermOperation(EC2ModifyImageAttribute.Operation.add); - setAccountOrGroupList(launchPermOp.getAdd().getItem(), request); + setAccountOrGroupList(launchPermOp.getAdd().getItem(), request, "add"); }else if(launchPermOp.getRemove() != null){ - request.setLaunchPermOperation(EC2ModifyImageAttribute.Operation.remove); - setAccountOrGroupList(launchPermOp.getRemove().getItem(), request); + setAccountOrGroupList(launchPermOp.getRemove().getItem(), request, "remove"); } return toModifyImageAttributeResponse( engine.modifyImageAttribute( request )); } throw new EC2ServiceException( ClientError.Unsupported, "Unsupported - can only modify image description or launchPermission"); } - private void setAccountOrGroupList(LaunchPermissionItemType[] items, EC2ModifyImageAttribute request){ - - List launchPermissionAccountsOrGroupList = new ArrayList(); - + private void setAccountOrGroupList(LaunchPermissionItemType[] items, EC2ModifyImageAttribute request, String operation){ + EC2ImageLaunchPermission launchPermission = new EC2ImageLaunchPermission(); + + if (operation.equalsIgnoreCase("add")) + launchPermission.setLaunchPermOp(EC2ImageLaunchPermission.Operation.add); + else + launchPermission.setLaunchPermOp(EC2ImageLaunchPermission.Operation.remove); + for (LaunchPermissionItemType lpItem : items) { if(lpItem.getGroup() != null){ - launchPermissionAccountsOrGroupList.add(lpItem.getGroup()); + launchPermission.addLaunchPermission(lpItem.getGroup()); }else if(lpItem.getUserId() != null){ - launchPermissionAccountsOrGroupList.add(lpItem.getUserId()); + launchPermission.addLaunchPermission(lpItem.getUserId()); } } - - request.setLaunchPermissionAccountsOrGroupList(launchPermissionAccountsOrGroupList); + request.addLaunchPermission(launchPermission); } /** * Did not find a matching service offering so for now we just return disabled @@ -702,7 +704,9 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { if(elementType != null){ request.setImageId( riat.getImageId()); request.setAttribute(ImageAttribute.launchPermission); - request.setLaunchPermOperation(EC2ModifyImageAttribute.Operation.reset); + EC2ImageLaunchPermission launchPermission = new EC2ImageLaunchPermission(); + launchPermission.setLaunchPermOp(EC2ImageLaunchPermission.Operation.reset); + request.addLaunchPermission(launchPermission); return toResetImageAttributeResponse( engine.modifyImageAttribute( request )); } throw new EC2ServiceException( ClientError.Unsupported, "Unsupported - can only reset image launchPermission" ); diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java index 8a5a733c4fb..2f45b03ae06 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java @@ -535,32 +535,6 @@ public class EC2Engine extends ManagerBase { } - /** REST API calls this method. - * Modify an existing template - * - * @param request - * @return - */ - public boolean modifyImageAttribute( EC2Image request ) - { - // TODO: This is incomplete - EC2DescribeImagesResponse images = new EC2DescribeImagesResponse(); - - try { - images = listTemplates( request.getId(), images ); - EC2Image[] imageSet = images.getImageSet(); - - CloudStackTemplate resp = getApi().updateTemplate(request.getId(), null, request.getDescription(), null, imageSet[0].getName(), null, null); - if (resp != null) { - return true; - } - return false; - } catch( Exception e ) { - logger.error( "EC2 ModifyImage - ", e); - throw new EC2ServiceException(ServerError.InternalError, e.getMessage()); - } - } - /** * Modify an existing template @@ -572,32 +546,35 @@ public class EC2Engine extends ManagerBase { { try { if(request.getAttribute().equals(ImageAttribute.launchPermission)){ - - String accounts = ""; - Boolean isPublic = null; - EC2ModifyImageAttribute.Operation operation = request.getLaunchPermOperation(); - - List accountOrGroupList = request.getLaunchPermissionAccountsList(); - if(accountOrGroupList != null && !accountOrGroupList.isEmpty()){ - boolean first = true; - for(String accountOrGroup : accountOrGroupList){ - if("all".equalsIgnoreCase(accountOrGroup)){ - if(operation.equals(EC2ModifyImageAttribute.Operation.add)){ - isPublic = true; + EC2ImageLaunchPermission[] launchPermissions = request.getLaunchPermissionSet(); + for (EC2ImageLaunchPermission launchPermission : launchPermissions) { + String accounts = ""; + Boolean isPublic = null; + EC2ImageLaunchPermission.Operation operation = launchPermission.getLaunchPermOp(); + List accountOrGroupList = launchPermission.getLaunchPermissionList(); + if(accountOrGroupList != null && !accountOrGroupList.isEmpty()){ + boolean first = true; + for(String accountOrGroup : accountOrGroupList){ + if("all".equalsIgnoreCase(accountOrGroup)){ + if(operation.equals(EC2ImageLaunchPermission.Operation.add)){ + isPublic = true; + }else{ + isPublic = false; + } }else{ - isPublic = false; + if(!first){ + accounts = accounts + ","; + } + accounts = accounts + accountOrGroup; + first = false; } - }else{ - if(!first){ - accounts = accounts + ","; - } - accounts = accounts + accountOrGroup; - first = false; } } + CloudStackInfoResponse resp = getApi().updateTemplatePermissions(request.getImageId(), accounts, null, null, isPublic, operation.toString()); + if (!resp.getSuccess()) + return false; } - CloudStackInfoResponse resp = getApi().updateTemplatePermissions(request.getImageId(), accounts, null, null, isPublic, operation.toString()); - return resp.getSuccess(); + return true; }else if(request.getAttribute().equals(ImageAttribute.description)){ CloudStackTemplate resp = getApi().updateTemplate(request.getImageId(), null, request.getDescription(), null, null, null, null); if (resp != null) { diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2ImageLaunchPermission.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2ImageLaunchPermission.java new file mode 100644 index 00000000000..552ffbe77d9 --- /dev/null +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2ImageLaunchPermission.java @@ -0,0 +1,53 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.bridge.service.core.ec2; + +import java.util.ArrayList; +import java.util.List; + +public class EC2ImageLaunchPermission { + + private Operation launchPermOperation; + public enum Operation{ + add, + remove, + reset; + } + + private List launchPermissionList = new ArrayList(); + + public EC2ImageLaunchPermission() { + launchPermOperation = null; + } + + public void addLaunchPermission(String launchPermission) { + launchPermissionList.add(launchPermission); + } + + public List getLaunchPermissionList() { + return launchPermissionList; + } + + public void setLaunchPermOp( Operation launchPermOperation ) { + this.launchPermOperation = launchPermOperation; + } + + public Operation getLaunchPermOp() { + return this.launchPermOperation; + } + +} diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2ModifyImageAttribute.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2ModifyImageAttribute.java index 16f5ef750c7..e88d2d191aa 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2ModifyImageAttribute.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2ModifyImageAttribute.java @@ -16,7 +16,7 @@ // under the License. package com.cloud.bridge.service.core.ec2; - +import java.util.ArrayList; import java.util.List; import com.cloud.bridge.service.core.ec2.EC2ImageAttributes.ImageAttribute; @@ -28,15 +28,7 @@ public class EC2ModifyImageAttribute { private String description; private Boolean isPublic = null; - private Operation launchPermOperation = null; - public enum Operation{ - add, - remove, - reset; - } - - private List launchPermissionAccountsOrGroupList; - + private List launchPermissionList = new ArrayList(); public EC2ModifyImageAttribute() { } @@ -65,31 +57,20 @@ public class EC2ModifyImageAttribute { return this.description; } - public void setLaunchPermissionAccountsOrGroupList(List launchPermissionAccountsOrGroupList) { - this.launchPermissionAccountsOrGroupList = launchPermissionAccountsOrGroupList; - } - - public List getLaunchPermissionAccountsList() { - return launchPermissionAccountsOrGroupList; - } - - public void setLaunchPermOperation( Operation launchPermOperation ) { - this.launchPermOperation = launchPermOperation; - } - - public Operation getLaunchPermOperation() { - return this.launchPermOperation; - } - - public void setIsPublic(Boolean isPublic) { this.isPublic = isPublic; } - public Boolean getIsPublic() { return isPublic; } - + + public void addLaunchPermission( EC2ImageLaunchPermission param ) { + launchPermissionList.add( param ); + } + + public EC2ImageLaunchPermission[] getLaunchPermissionSet() { + return launchPermissionList.toArray(new EC2ImageLaunchPermission[0]); + } } From 12ad296b6c323f017f2fdbeb1e9be79c81c8dca2 Mon Sep 17 00:00:00 2001 From: Likitha Shetty Date: Thu, 7 Feb 2013 17:52:48 -0800 Subject: [PATCH 32/85] CLOUDSTACK-1117 [EC2 Query API] DescribeImageAttribute fails EC2DescribeImageAttribute fails with 'Unsupported - only description supported' error. And this is observed for both the supported attributes 'Description' and 'LaunchPermission' --- .../cloud/bridge/service/EC2RestServlet.java | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java index 4612b60eef5..c3a86a00c69 100644 --- a/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java +++ b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java @@ -113,6 +113,7 @@ import com.cloud.bridge.service.core.ec2.EC2CreateVolume; import com.cloud.bridge.service.core.ec2.EC2DeleteKeyPair; import com.cloud.bridge.service.core.ec2.EC2DescribeAddresses; import com.cloud.bridge.service.core.ec2.EC2DescribeAvailabilityZones; +import com.cloud.bridge.service.core.ec2.EC2DescribeImageAttribute; import com.cloud.bridge.service.core.ec2.EC2DescribeImages; import com.cloud.bridge.service.core.ec2.EC2DescribeInstances; import com.cloud.bridge.service.core.ec2.EC2DescribeKeyPairs; @@ -1311,25 +1312,35 @@ public class EC2RestServlet extends HttpServlet { private void describeImageAttribute( HttpServletRequest request, HttpServletResponse response ) throws ADBException, XMLStreamException, IOException { - EC2DescribeImages EC2request = new EC2DescribeImages(); + EC2DescribeImageAttribute ec2request = new EC2DescribeImageAttribute(); - // -> only works for queries about descriptions - String[] descriptions = request.getParameterValues( "Description" ); - if ( null != descriptions && 0 < descriptions.length ) { - String[] value = request.getParameterValues( "ImageId" ); - EC2request.addImageSet( value[0] ); - } + String[] imageId = request.getParameterValues( "ImageId" ); + if (imageId != null && imageId.length > 0) + ec2request.setImageId(imageId[0]); else { - response.sendError(501, "Unsupported - only description supported" ); + response.sendError(530, "Missing ImageId parameter"); return; } - // -> execute the request - DescribeImageAttributeResponse EC2response = EC2SoapServiceImpl.toDescribeImageAttributeResponse( ServiceProvider.getInstance().getEC2Engine().describeImages( EC2request )); + String[] attribute = request.getParameterValues( "Attribute" ); + if (attribute != null && attribute.length > 0) { + if (attribute[0].equalsIgnoreCase("description")) + ec2request.setAttribute(ImageAttribute.description); + else if (attribute[0].equalsIgnoreCase("launchPermission")) + ec2request.setAttribute(ImageAttribute.launchPermission); + else { + response.sendError(501, "Unsupported Attribute - description and launchPermission supported" ); + return; + } + } else { + response.sendError(530, "Missing Attribute parameter"); + return; + } + + DescribeImageAttributeResponse EC2response = EC2SoapServiceImpl.toDescribeImageAttributeResponse( ServiceProvider.getInstance().getEC2Engine().describeImageAttribute( ec2request )); serializeResponse(response, EC2response); } - private void describeInstances( HttpServletRequest request, HttpServletResponse response ) throws ADBException, XMLStreamException, IOException { From b5e28038cbc85e4e39bfc2b71927e2935b1f1673 Mon Sep 17 00:00:00 2001 From: Likitha Shetty Date: Thu, 7 Feb 2013 18:00:25 -0800 Subject: [PATCH 33/85] [EC2 Query API] DescribeAvailabilityZones doesn't have any filter support. CLOUDSTACK-1118 Support will be available for filters - zone-name and message --- .../src/com/cloud/bridge/service/EC2RestServlet.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java index c3a86a00c69..8f364907595 100644 --- a/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java +++ b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java @@ -107,6 +107,7 @@ import com.cloud.bridge.persist.dao.UserCredentialsDaoImpl; import com.cloud.bridge.service.controller.s3.ServiceProvider; import com.cloud.bridge.service.core.ec2.EC2AssociateAddress; import com.cloud.bridge.service.core.ec2.EC2AuthorizeRevokeSecurityGroup; +import com.cloud.bridge.service.core.ec2.EC2AvailabilityZonesFilterSet; import com.cloud.bridge.service.core.ec2.EC2CreateImage; import com.cloud.bridge.service.core.ec2.EC2CreateKeyPair; import com.cloud.bridge.service.core.ec2.EC2CreateVolume; @@ -1286,6 +1287,17 @@ public class EC2RestServlet extends HttpServlet { if (null != value && 0 < value.length) EC2request.addZone( value[0] ); } } + + // add filters + EC2Filter[] filterSet = extractFilters( request ); + if ( filterSet != null ) { + EC2AvailabilityZonesFilterSet afs = new EC2AvailabilityZonesFilterSet(); + for( int i=0; i < filterSet.length; i++ ) { + afs.addFilter(filterSet[i]); + } + EC2request.setFilterSet( afs ); + } + // -> execute the request DescribeAvailabilityZonesResponse EC2response = EC2SoapServiceImpl.toDescribeAvailabilityZonesResponse( ServiceProvider.getInstance().getEC2Engine().handleRequest( EC2request )); serializeResponse(response, EC2response); From 2364ada4df2543c75d5a569de73a83f4a235afa8 Mon Sep 17 00:00:00 2001 From: Likitha Shetty Date: Thu, 7 Feb 2013 18:31:36 -0800 Subject: [PATCH 34/85] CLOUDSTACK-1119 [EC2 Query API] Add filter support for DecsribeAddresses EC2DescribeAddresses doesn't have filter support. Support will be available for filters -> instance-id and public-ip --- .../src/com/cloud/bridge/service/EC2RestServlet.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java index 8f364907595..0186db4ad08 100644 --- a/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java +++ b/awsapi/src/com/cloud/bridge/service/EC2RestServlet.java @@ -105,6 +105,7 @@ import com.cloud.bridge.persist.dao.CloudStackUserDaoImpl; import com.cloud.bridge.persist.dao.OfferingDaoImpl; import com.cloud.bridge.persist.dao.UserCredentialsDaoImpl; import com.cloud.bridge.service.controller.s3.ServiceProvider; +import com.cloud.bridge.service.core.ec2.EC2AddressFilterSet; import com.cloud.bridge.service.core.ec2.EC2AssociateAddress; import com.cloud.bridge.service.core.ec2.EC2AuthorizeRevokeSecurityGroup; import com.cloud.bridge.service.core.ec2.EC2AvailabilityZonesFilterSet; @@ -1397,6 +1398,15 @@ public class EC2RestServlet extends HttpServlet { if (null != value && 0 < value.length) ec2Request.addPublicIp( value[0] ); } } + + // add filters + EC2Filter[] filterSet = extractFilters( request ); + if ( filterSet != null ) { + EC2AddressFilterSet afs = new EC2AddressFilterSet(); + for ( int i=0; i < filterSet.length; i++ ) + afs.addFilter( filterSet[i] ); + ec2Request.setFilterSet( afs ); + } // -> execute the request EC2Engine engine = ServiceProvider.getInstance().getEC2Engine(); serializeResponse(response, EC2SoapServiceImpl.toDescribeAddressesResponse( engine.describeAddresses( ec2Request))); From 990d20b67b478ced23e5b2164bd0cff165a980e2 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Thu, 7 Feb 2013 18:47:46 -0800 Subject: [PATCH 35/85] CLOUDSTACK-1066 slim down the package by not choosing 'standard'. Allow root user to login (FIXME) otherwise veewee is unable to login --- tools/appliance/definitions/systemvmtemplate/preseed.cfg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/appliance/definitions/systemvmtemplate/preseed.cfg b/tools/appliance/definitions/systemvmtemplate/preseed.cfg index 2b956e11cdb..a21fd8a362f 100644 --- a/tools/appliance/definitions/systemvmtemplate/preseed.cfg +++ b/tools/appliance/definitions/systemvmtemplate/preseed.cfg @@ -187,7 +187,7 @@ d-i partman/confirm_nooverwrite boolean true ### Account setup # Skip creation of a root account (normal user account will be able to # use sudo). -d-i passwd/root-login boolean false +d-i passwd/root-login boolean true # Alternatively, to skip creation of a normal user account. #d-i passwd/make-user boolean false @@ -233,7 +233,7 @@ d-i passwd/user-default-groups string audio cdrom video admin #d-i debian-installer/allow_unauthenticated string true ### Package selection -tasksel tasksel/first multiselect standard +tasksel tasksel/first multiselect ssh-server # If the desktop task is selected, install the kde and xfce desktops # instead of the default gnome desktop. #tasksel tasksel/desktop multiselect kde, xfce @@ -265,7 +265,7 @@ d-i grub-installer/only_debian boolean true # This one makes grub-installer install to the MBR if it also finds some other # OS, which is less safe as it might not be able to boot that other OS. -d-i grub-installer/with_other_os boolean true +#d-i grub-installer/with_other_os boolean true # Alternatively, if you want to install to a location other than the mbr, # uncomment and edit these lines: From ee9baefe3f3336cf57cb9feada252f0d9ce3ce17 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Thu, 7 Feb 2013 18:51:14 -0800 Subject: [PATCH 36/85] CLOUDSTACK-1066: restore modularity in config files by splitting postinstall tasks Add config.dat to ensure that openswan install does not hang asking for user input --- .../definitions/systemvmtemplate/base.sh | 27 + .../definitions/systemvmtemplate/cleanup.sh | 17 + .../systemvmtemplate/cloudstack-packages.sh | 86 ++ .../definitions/systemvmtemplate/config.dat | 878 ++++++++++++++++++ .../systemvmtemplate/definition.rb | 10 +- .../definitions/systemvmtemplate/zerodisk.sh | 3 + 6 files changed, 1018 insertions(+), 3 deletions(-) create mode 100644 tools/appliance/definitions/systemvmtemplate/base.sh create mode 100644 tools/appliance/definitions/systemvmtemplate/cleanup.sh create mode 100644 tools/appliance/definitions/systemvmtemplate/cloudstack-packages.sh create mode 100644 tools/appliance/definitions/systemvmtemplate/config.dat create mode 100644 tools/appliance/definitions/systemvmtemplate/zerodisk.sh diff --git a/tools/appliance/definitions/systemvmtemplate/base.sh b/tools/appliance/definitions/systemvmtemplate/base.sh new file mode 100644 index 00000000000..6b44e0aac3a --- /dev/null +++ b/tools/appliance/definitions/systemvmtemplate/base.sh @@ -0,0 +1,27 @@ +# Update the box +apt-get -y update +#below are needed for ruby perhaps +apt-get -y install linux-headers-$(uname -r) build-essential +apt-get -y install zlib1g-dev libssl-dev libreadline-gplv2-dev +apt-get -y install curl unzip +apt-get clean + +# Set up sudo +echo 'vagrant ALL=NOPASSWD:ALL' > /etc/sudoers.d/vagrant + +# Tweak sshd to prevent DNS resolution (speed up logins) +echo 'UseDNS no' >> /etc/ssh/sshd_config + +# Remove 5s grub timeout to speed up booting +echo < /etc/default/grub +# If you change this file, run 'update-grub' afterwards to update +# /boot/grub/grub.cfg. + +GRUB_DEFAULT=0 +GRUB_TIMEOUT=0 +GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` +GRUB_CMDLINE_LINUX_DEFAULT="quiet" +GRUB_CMDLINE_LINUX="debian-installer=en_US" +EOF + +update-grub diff --git a/tools/appliance/definitions/systemvmtemplate/cleanup.sh b/tools/appliance/definitions/systemvmtemplate/cleanup.sh new file mode 100644 index 00000000000..bf8a6192e53 --- /dev/null +++ b/tools/appliance/definitions/systemvmtemplate/cleanup.sh @@ -0,0 +1,17 @@ +# Clean up +apt-get -y remove linux-headers-$(uname -r) build-essential +apt-get -y autoremove + +# Removing leftover leases and persistent rules +echo "cleaning up dhcp leases" +rm /var/lib/dhcp/* + +# Make sure Udev doesn't block our network +echo "cleaning up udev rules" +rm /etc/udev/rules.d/70-persistent-net.rules +mkdir /etc/udev/rules.d/70-persistent-net.rules +rm -rf /dev/.udev/ +rm /lib/udev/rules.d/75-persistent-net-generator.rules + +echo "Adding a 2 sec delay to the interface up, to make the dhclient happy" +echo "pre-up sleep 2" >> /etc/network/interfaces diff --git a/tools/appliance/definitions/systemvmtemplate/cloudstack-packages.sh b/tools/appliance/definitions/systemvmtemplate/cloudstack-packages.sh new file mode 100644 index 00000000000..426cd033b55 --- /dev/null +++ b/tools/appliance/definitions/systemvmtemplate/cloudstack-packages.sh @@ -0,0 +1,86 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + + +ROOTPW=password +CLOUDSTACK_RELEASE=4.2.0 + + +install_packages() { + DEBIAN_FRONTEND=noninteractive + DEBIAN_PRIORITY=critical + + #basic stuff + apt-get --no-install-recommends -q -y --force-yes install rsyslog logrotate cron chkconfig insserv net-tools ifupdown vim-tiny netbase iptables openssh-server grub-legacy e2fsprogs dhcp3-client dnsmasq tcpdump socat wget python bzip2 sed gawk diff grep gzip less tar telnet ftp rsync traceroute psmisc lsof procps monit inetutils-ping iputils-arping httping dnsutils zip unzip ethtool uuid file iproute acpid iptables-persistent virt-what sudo + + #sysstat + echo 'sysstat sysstat/enable boolean true' | debconf-set-selections + apt-get --no-install-recommends -q -y --force-yes install sysstat + #apache + apt-get --no-install-recommends -q -y --force-yes install apache2 ssl-cert + #haproxy + apt-get --no-install-recommends -q -y --force-yes install haproxy + #dnsmasq + apt-get --no-install-recommends -q -y --force-yes install dnsmasq + #nfs client + apt-get --no-install-recommends -q -y --force-yes install nfs-common + #vpn stuff + apt-get --no-install-recommends -q -y --force-yes install xl2tpd openswan bcrelay ppp ipsec-tools tdb-tools + #vmware tools + apt-get --no-install-recommends -q -y --force-yes install open-vm-tools + #xenstore utils + apt-get --no-install-recommends -q -y --force-yes install xenstore-utils libxenstore3.0 + #keepalived and conntrackd + apt-get --no-install-recommends -q -y --force-yes install keepalived conntrackd ipvsadm libnetfilter-conntrack3 libnl1 + #ipcalc + apt-get --no-install-recommends -q -y --force-yes install ipcalc + #java + apt-get --no-install-recommends -q -y --force-yes install default-jre-headless + +} + +accounts() { + # Setup sudo to allow no-password sudo for "admin" + groupadd -r admin + #create a 'cloud' user + usermod -a -G admin cloud + echo "root:password" | chpasswd + echo "cloud:password" | chpasswd + sed -i -e '/Defaults\s\+env_reset/a Defaults\texempt_group=admin' /etc/sudoers + sed -i -e 's/%admin ALL=(ALL) ALL/%admin ALL=NOPASSWD:ALL/g' /etc/sudoers + + mkdir -p /home/cloud/.ssh + chmod 700 /home/cloud/.ssh + +} + +do_fixes() { + #fix hostname in openssh-server generated keys + sed -i "s/root@\(.*\)$/root@systemvm/g" etc/ssh/ssh_host_*.pub +} + +signature() { + touch /var/cache/cloud/cloud-scripts-signature + echo "Cloudstack Release $CLOUDSTACK_RELEASE $(date)" > /etc/cloudstack-release +} + +echo "*************INSTALLING PACKAGES********************" +install_packages +echo "*************DONE INSTALLING PACKAGES********************" +accounts +do_fixes +signature diff --git a/tools/appliance/definitions/systemvmtemplate/config.dat b/tools/appliance/definitions/systemvmtemplate/config.dat new file mode 100644 index 00000000000..bc71fb981db --- /dev/null +++ b/tools/appliance/definitions/systemvmtemplate/config.dat @@ -0,0 +1,878 @@ +Name: adduser/homedir-permission +Template: adduser/homedir-permission +Value: true +Owners: adduser + +Name: adduser/title +Template: adduser/title +Owners: adduser + +Name: apt-listchanges/confirm +Template: apt-listchanges/confirm +Value: false +Owners: apt-listchanges + +Name: apt-listchanges/email-address +Template: apt-listchanges/email-address +Value: root +Owners: apt-listchanges + +Name: apt-listchanges/frontend +Template: apt-listchanges/frontend +Value: pager +Owners: apt-listchanges + +Name: apt-listchanges/save-seen +Template: apt-listchanges/save-seen +Value: true +Owners: apt-listchanges + +Name: apt-listchanges/which +Template: apt-listchanges/which +Value: news +Owners: apt-listchanges + +Name: ca-certificates/enable_crts +Template: ca-certificates/enable_crts +Value: cacert.org/cacert.org.crt, debconf.org/ca.crt, mozilla/ACEDICOM_Root.crt, mozilla/AC_Raíz_Certicámara_S.A..crt, mozilla/Actalis_Authentication_Root_CA.crt, mozilla/AddTrust_External_Root.crt, mozilla/AddTrust_Low-Value_Services_Root.crt, mozilla/AddTrust_Public_Services_Root.crt, mozilla/AddTrust_Qualified_Certificates_Root.crt, mozilla/AffirmTrust_Commercial.crt, mozilla/AffirmTrust_Networking.crt, mozilla/AffirmTrust_Premium.crt, mozilla/AffirmTrust_Premium_ECC.crt, mozilla/America_Online_Root_Certification_Authority_1.crt, mozilla/America_Online_Root_Certification_Authority_2.crt, mozilla/ApplicationCA_-_Japanese_Government.crt, mozilla/A-Trust-nQual-03.crt, mozilla/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt, mozilla/Baltimore_CyberTrust_Root.crt, mozilla/Buypass_Class_2_CA_1.crt, mozilla/Buypass_Class_2_Root_CA.crt, mozilla/Buypass_Class_3_CA_1.crt, mozilla/Buypass_Class_3_Root_CA.crt, mozilla/CA_Disig.crt, mozilla/Camerfirma_Chambers_of_Commerce_Root.crt, mozilla/Camerfirma_Global_Chambersign_Root.crt, mozilla/Certigna.crt, mozilla/Certinomis_-_Autorité_Racine.crt, mozilla/Certplus_Class_2_Primary_CA.crt, mozilla/certSIGN_ROOT_CA.crt, mozilla/Certum_Root_CA.crt, mozilla/Certum_Trusted_Network_CA.crt, mozilla/Chambers_of_Commerce_Root_-_2008.crt, mozilla/CNNIC_ROOT.crt, mozilla/Comodo_AAA_Services_root.crt, mozilla/COMODO_Certification_Authority.crt, mozilla/COMODO_ECC_Certification_Authority.crt, mozilla/Comodo_Secure_Services_root.crt, mozilla/Comodo_Trusted_Services_root.crt, mozilla/ComSign_CA.crt, mozilla/ComSign_Secured_CA.crt, mozilla/Cybertrust_Global_Root.crt, mozilla/Deutsche_Telekom_Root_CA_2.crt, mozilla/DigiCert_Assured_ID_Root_CA.crt, mozilla/DigiCert_Global_Root_CA.crt, mozilla/DigiCert_High_Assurance_EV_Root_CA.crt, mozilla/Digital_Signature_Trust_Co._Global_CA_1.crt, mozilla/Digital_Signature_Trust_Co._Global_CA_3.crt, mozilla/DST_ACES_CA_X6.crt, mozilla/DST_Root_CA_X3.crt, mozilla/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.crt, mozilla/EC-ACC.crt, mozilla/EE_Certification_Centre_Root_CA.crt, mozilla/E-Guven_Kok_Elektronik_Sertifika_Hizmet_Saglayicisi.crt, mozilla/Entrust.net_Premium_2048_Secure_Server_CA.crt, mozilla/Entrust.net_Secure_Server_CA.crt, mozilla/Entrust_Root_Certification_Authority.crt, mozilla/ePKI_Root_Certification_Authority.crt, mozilla/Equifax_Secure_CA.crt, mozilla/Equifax_Secure_eBusiness_CA_1.crt, mozilla/Equifax_Secure_eBusiness_CA_2.crt, mozilla/Equifax_Secure_Global_eBusiness_CA.crt, mozilla/Firmaprofesional_Root_CA.crt, mozilla/GeoTrust_Global_CA_2.crt, mozilla/GeoTrust_Global_CA.crt, mozilla/GeoTrust_Primary_Certification_Authority.crt, mozilla/GeoTrust_Primary_Certification_Authority_-_G2.crt, mozilla/GeoTrust_Primary_Certification_Authority_-_G3.crt, mozilla/GeoTrust_Universal_CA_2.crt, mozilla/GeoTrust_Universal_CA.crt, mozilla/Global_Chambersign_Root_-_2008.crt, mozilla/GlobalSign_Root_CA.crt, mozilla/GlobalSign_Root_CA_-_R2.crt, mozilla/GlobalSign_Root_CA_-_R3.crt, mozilla/Go_Daddy_Class_2_CA.crt, mozilla/Go_Daddy_Root_Certificate_Authority_-_G2.crt, mozilla/GTE_CyberTrust_Global_Root.crt, mozilla/Hellenic_Academic_and_Research_Institutions_RootCA_2011.crt, mozilla/Hongkong_Post_Root_CA_1.crt, mozilla/IGC_A.crt, mozilla/Izenpe.com.crt, mozilla/Juur-SK.crt, mozilla/Microsec_e-Szigno_Root_CA_2009.crt, mozilla/Microsec_e-Szigno_Root_CA.crt, mozilla/NetLock_Arany_=Class_Gold=_Főtanúsítvány.crt, mozilla/NetLock_Business_=Class_B=_Root.crt, mozilla/NetLock_Express_=Class_C=_Root.crt, mozilla/NetLock_Notary_=Class_A=_Root.crt, mozilla/NetLock_Qualified_=Class_QA=_Root.crt, mozilla/Network_Solutions_Certificate_Authority.crt, mozilla/OISTE_WISeKey_Global_Root_GA_CA.crt, mozilla/QuoVadis_Root_CA_2.crt, mozilla/QuoVadis_Root_CA_3.crt, mozilla/QuoVadis_Root_CA.crt, mozilla/Root_CA_Generalitat_Valenciana.crt, mozilla/RSA_Root_Certificate_1.crt, mozilla/RSA_Security_2048_v3.crt, mozilla/Secure_Global_CA.crt, mozilla/SecureSign_RootCA11.crt, mozilla/SecureTrust_CA.crt, mozilla/Security_Communication_EV_RootCA1.crt, mozilla/Security_Communication_RootCA2.crt, mozilla/Security_Communication_Root_CA.crt, mozilla/Sonera_Class_1_Root_CA.crt, mozilla/Sonera_Class_2_Root_CA.crt, mozilla/Staat_der_Nederlanden_Root_CA.crt, mozilla/Staat_der_Nederlanden_Root_CA_-_G2.crt, mozilla/Starfield_Class_2_CA.crt, mozilla/Starfield_Root_Certificate_Authority_-_G2.crt, mozilla/Starfield_Services_Root_Certificate_Authority_-_G2.crt, mozilla/StartCom_Certification_Authority.crt, mozilla/StartCom_Certification_Authority_G2.crt, mozilla/S-TRUST_Authentication_and_Encryption_Root_CA_2005_PN.crt, mozilla/Swisscom_Root_CA_1.crt, mozilla/SwissSign_Gold_CA_-_G2.crt, mozilla/SwissSign_Platinum_CA_-_G2.crt, mozilla/SwissSign_Silver_CA_-_G2.crt, mozilla/TÜBİTAK_UEKAE_Kök_Sertifika_Hizmet_Sağlayıcısı_-_Sürüm_3.crt, mozilla/Taiwan_GRCA.crt, mozilla/TC_TrustCenter_Class_2_CA_II.crt, mozilla/TC_TrustCenter_Class_3_CA_II.crt, mozilla/TC_TrustCenter_Universal_CA_I.crt, mozilla/TC_TrustCenter_Universal_CA_III.crt, mozilla/TDC_Internet_Root_CA.crt, mozilla/TDC_OCES_Root_CA.crt, mozilla/Thawte_Premium_Server_CA.crt, mozilla/thawte_Primary_Root_CA.crt, mozilla/thawte_Primary_Root_CA_-_G2.crt, mozilla/thawte_Primary_Root_CA_-_G3.crt, mozilla/Thawte_Server_CA.crt, mozilla/Trustis_FPS_Root_CA.crt, mozilla/T-TeleSec_GlobalRoot_Class_3.crt, mozilla/TURKTRUST_Certificate_Services_Provider_Root_1.crt, mozilla/TURKTRUST_Certificate_Services_Provider_Root_2.crt, mozilla/TWCA_Root_Certification_Authority.crt, mozilla/UTN_DATACorp_SGC_Root_CA.crt, mozilla/UTN_USERFirst_Email_Root_CA.crt, mozilla/UTN_USERFirst_Hardware_Root_CA.crt, mozilla/ValiCert_Class_1_VA.crt, mozilla/ValiCert_Class_2_VA.crt, mozilla/Verisign_Class_1_Public_Primary_Certification_Authority.crt, mozilla/Verisign_Class_1_Public_Primary_Certification_Authority_-_G2.crt, mozilla/Verisign_Class_1_Public_Primary_Certification_Authority_-_G3.crt, mozilla/Verisign_Class_2_Public_Primary_Certification_Authority_-_G2.crt, mozilla/Verisign_Class_2_Public_Primary_Certification_Authority_-_G3.crt, mozilla/Verisign_Class_3_Public_Primary_Certification_Authority.crt, mozilla/Verisign_Class_3_Public_Primary_Certification_Authority_-_G2.crt, mozilla/Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.crt, mozilla/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G4.crt, mozilla/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.crt, mozilla/Verisign_Class_4_Public_Primary_Certification_Authority_-_G3.crt, mozilla/VeriSign_Universal_Root_Certification_Authority.crt, mozilla/Visa_eCommerce_Root.crt, mozilla/Wells_Fargo_Root_CA.crt, mozilla/WellsSecure_Public_Root_Certificate_Authority.crt, mozilla/XRamp_Global_CA_Root.crt, spi-inc.org/spi-ca-2003.crt, spi-inc.org/spi-cacert-2008.crt +Owners: ca-certificates +Variables: + enable_crts = cacert.org/cacert.org.crt, debconf.org/ca.crt, mozilla/ACEDICOM_Root.crt, mozilla/AC_Raíz_Certicámara_S.A..crt, mozilla/Actalis_Authentication_Root_CA.crt, mozilla/AddTrust_External_Root.crt, mozilla/AddTrust_Low-Value_Services_Root.crt, mozilla/AddTrust_Public_Services_Root.crt, mozilla/AddTrust_Qualified_Certificates_Root.crt, mozilla/AffirmTrust_Commercial.crt, mozilla/AffirmTrust_Networking.crt, mozilla/AffirmTrust_Premium.crt, mozilla/AffirmTrust_Premium_ECC.crt, mozilla/America_Online_Root_Certification_Authority_1.crt, mozilla/America_Online_Root_Certification_Authority_2.crt, mozilla/ApplicationCA_-_Japanese_Government.crt, mozilla/A-Trust-nQual-03.crt, mozilla/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt, mozilla/Baltimore_CyberTrust_Root.crt, mozilla/Buypass_Class_2_CA_1.crt, mozilla/Buypass_Class_2_Root_CA.crt, mozilla/Buypass_Class_3_CA_1.crt, mozilla/Buypass_Class_3_Root_CA.crt, mozilla/CA_Disig.crt, mozilla/Camerfirma_Chambers_of_Commerce_Root.crt, mozilla/Camerfirma_Global_Chambersign_Root.crt, mozilla/Certigna.crt, mozilla/Certinomis_-_Autorité_Racine.crt, mozilla/Certplus_Class_2_Primary_CA.crt, mozilla/certSIGN_ROOT_CA.crt, mozilla/Certum_Root_CA.crt, mozilla/Certum_Trusted_Network_CA.crt, mozilla/Chambers_of_Commerce_Root_-_2008.crt, mozilla/CNNIC_ROOT.crt, mozilla/Comodo_AAA_Services_root.crt, mozilla/COMODO_Certification_Authority.crt, mozilla/COMODO_ECC_Certification_Authority.crt, mozilla/Comodo_Secure_Services_root.crt, mozilla/Comodo_Trusted_Services_root.crt, mozilla/ComSign_CA.crt, mozilla/ComSign_Secured_CA.crt, mozilla/Cybertrust_Global_Root.crt, mozilla/Deutsche_Telekom_Root_CA_2.crt, mozilla/DigiCert_Assured_ID_Root_CA.crt, mozilla/DigiCert_Global_Root_CA.crt, mozilla/DigiCert_High_Assurance_EV_Root_CA.crt, mozilla/Digital_Signature_Trust_Co._Global_CA_1.crt, mozilla/Digital_Signature_Trust_Co._Global_CA_3.crt, mozilla/DST_ACES_CA_X6.crt, mozilla/DST_Root_CA_X3.crt, mozilla/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.crt, mozilla/EC-ACC.crt, mozilla/EE_Certification_Centre_Root_CA.crt, mozilla/E-Guven_Kok_Elektronik_Sertifika_Hizmet_Saglayicisi.crt, mozilla/Entrust.net_Premium_2048_Secure_Server_CA.crt, mozilla/Entrust.net_Secure_Server_CA.crt, mozilla/Entrust_Root_Certification_Authority.crt, mozilla/ePKI_Root_Certification_Authority.crt, mozilla/Equifax_Secure_CA.crt, mozilla/Equifax_Secure_eBusiness_CA_1.crt, mozilla/Equifax_Secure_eBusiness_CA_2.crt, mozilla/Equifax_Secure_Global_eBusiness_CA.crt, mozilla/Firmaprofesional_Root_CA.crt, mozilla/GeoTrust_Global_CA_2.crt, mozilla/GeoTrust_Global_CA.crt, mozilla/GeoTrust_Primary_Certification_Authority.crt, mozilla/GeoTrust_Primary_Certification_Authority_-_G2.crt, mozilla/GeoTrust_Primary_Certification_Authority_-_G3.crt, mozilla/GeoTrust_Universal_CA_2.crt, mozilla/GeoTrust_Universal_CA.crt, mozilla/Global_Chambersign_Root_-_2008.crt, mozilla/GlobalSign_Root_CA.crt, mozilla/GlobalSign_Root_CA_-_R2.crt, mozilla/GlobalSign_Root_CA_-_R3.crt, mozilla/Go_Daddy_Class_2_CA.crt, mozilla/Go_Daddy_Root_Certificate_Authority_-_G2.crt, mozilla/GTE_CyberTrust_Global_Root.crt, mozilla/Hellenic_Academic_and_Research_Institutions_RootCA_2011.crt, mozilla/Hongkong_Post_Root_CA_1.crt, mozilla/IGC_A.crt, mozilla/Izenpe.com.crt, mozilla/Juur-SK.crt, mozilla/Microsec_e-Szigno_Root_CA_2009.crt, mozilla/Microsec_e-Szigno_Root_CA.crt, mozilla/NetLock_Arany_=Class_Gold=_Főtanúsítvány.crt, mozilla/NetLock_Business_=Class_B=_Root.crt, mozilla/NetLock_Express_=Class_C=_Root.crt, mozilla/NetLock_Notary_=Class_A=_Root.crt, mozilla/NetLock_Qualified_=Class_QA=_Root.crt, mozilla/Network_Solutions_Certificate_Authority.crt, mozilla/OISTE_WISeKey_Global_Root_GA_CA.crt, mozilla/QuoVadis_Root_CA_2.crt, mozilla/QuoVadis_Root_CA_3.crt, mozilla/QuoVadis_Root_CA.crt, mozilla/Root_CA_Generalitat_Valenciana.crt, mozilla/RSA_Root_Certificate_1.crt, mozilla/RSA_Security_2048_v3.crt, mozilla/Secure_Global_CA.crt, mozilla/SecureSign_RootCA11.crt, mozilla/SecureTrust_CA.crt, mozilla/Security_Communication_EV_RootCA1.crt, mozilla/Security_Communication_RootCA2.crt, mozilla/Security_Communication_Root_CA.crt, mozilla/Sonera_Class_1_Root_CA.crt, mozilla/Sonera_Class_2_Root_CA.crt, mozilla/Staat_der_Nederlanden_Root_CA.crt, mozilla/Staat_der_Nederlanden_Root_CA_-_G2.crt, mozilla/Starfield_Class_2_CA.crt, mozilla/Starfield_Root_Certificate_Authority_-_G2.crt, mozilla/Starfield_Services_Root_Certificate_Authority_-_G2.crt, mozilla/StartCom_Certification_Authority.crt, mozilla/StartCom_Certification_Authority_G2.crt, mozilla/S-TRUST_Authentication_and_Encryption_Root_CA_2005_PN.crt, mozilla/Swisscom_Root_CA_1.crt, mozilla/SwissSign_Gold_CA_-_G2.crt, mozilla/SwissSign_Platinum_CA_-_G2.crt, mozilla/SwissSign_Silver_CA_-_G2.crt, mozilla/TÜBİTAK_UEKAE_Kök_Sertifika_Hizmet_Sağlayıcısı_-_Sürüm_3.crt, mozilla/Taiwan_GRCA.crt, mozilla/TC_TrustCenter_Class_2_CA_II.crt, mozilla/TC_TrustCenter_Class_3_CA_II.crt, mozilla/TC_TrustCenter_Universal_CA_I.crt, mozilla/TC_TrustCenter_Universal_CA_III.crt, mozilla/TDC_Internet_Root_CA.crt, mozilla/TDC_OCES_Root_CA.crt, mozilla/Thawte_Premium_Server_CA.crt, mozilla/thawte_Primary_Root_CA.crt, mozilla/thawte_Primary_Root_CA_-_G2.crt, mozilla/thawte_Primary_Root_CA_-_G3.crt, mozilla/Thawte_Server_CA.crt, mozilla/Trustis_FPS_Root_CA.crt, mozilla/T-TeleSec_GlobalRoot_Class_3.crt, mozilla/TURKTRUST_Certificate_Services_Provider_Root_1.crt, mozilla/TURKTRUST_Certificate_Services_Provider_Root_2.crt, mozilla/TWCA_Root_Certification_Authority.crt, mozilla/UTN_DATACorp_SGC_Root_CA.crt, mozilla/UTN_USERFirst_Email_Root_CA.crt, mozilla/UTN_USERFirst_Hardware_Root_CA.crt, mozilla/ValiCert_Class_1_VA.crt, mozilla/ValiCert_Class_2_VA.crt, mozilla/Verisign_Class_1_Public_Primary_Certification_Authority.crt, mozilla/Verisign_Class_1_Public_Primary_Certification_Authority_-_G2.crt, mozilla/Verisign_Class_1_Public_Primary_Certification_Authority_-_G3.crt, mozilla/Verisign_Class_2_Public_Primary_Certification_Authority_-_G2.crt, mozilla/Verisign_Class_2_Public_Primary_Certification_Authority_-_G3.crt, mozilla/Verisign_Class_3_Public_Primary_Certification_Authority.crt, mozilla/Verisign_Class_3_Public_Primary_Certification_Authority_-_G2.crt, mozilla/Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.crt, mozilla/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G4.crt, mozilla/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.crt, mozilla/Verisign_Class_4_Public_Primary_Certification_Authority_-_G3.crt, mozilla/VeriSign_Universal_Root_Certification_Authority.crt, mozilla/Visa_eCommerce_Root.crt, mozilla/Wells_Fargo_Root_CA.crt, mozilla/WellsSecure_Public_Root_Certificate_Authority.crt, mozilla/XRamp_Global_CA_Root.crt, spi-inc.org/spi-ca-2003.crt, spi-inc.org/spi-cacert-2008.crt + +Name: ca-certificates/new_crts +Template: ca-certificates/new_crts +Owners: ca-certificates +Variables: + new_crts = + +Name: ca-certificates/title +Template: ca-certificates/title +Owners: ca-certificates + +Name: ca-certificates/trust_new_crts +Template: ca-certificates/trust_new_crts +Value: yes +Owners: ca-certificates + +Name: console-setup/charmap47 +Template: console-setup/charmap47 +Value: ISO-8859-1 +Owners: console-setup +Variables: + CHOICES = ARMSCII-8, CP1251, CP1255, CP1256, GEORGIAN-ACADEMY, GEORGIAN-PS, IBM1133, ISIRI-3342, ISO-8859-1, ISO-8859-10, ISO-8859-11, ISO-8859-13, ISO-8859-14, ISO-8859-15, ISO-8859-16, ISO-8859-2, ISO-8859-3, ISO-8859-4, ISO-8859-5, ISO-8859-6, ISO-8859-7, ISO-8859-8, ISO-8859-9, KOI8-R, KOI8-U, TIS-620, UTF-8, VISCII + +Name: console-setup/codeset47 +Template: console-setup/codeset47 +Value: # Latin1 and Latin5 - western Europe and Turkic languages +Owners: console-setup + +Name: console-setup/codesetcode +Template: console-setup/codesetcode +Value: Lat15 +Owners: console-setup + +Name: console-setup/fontface47 +Template: console-setup/fontface47 +Value: Fixed +Owners: console-setup +Variables: + CHOICES = Fixed, Terminus, TerminusBold, TerminusBoldVGA, VGA, Do not change the boot/kernel font, Let the system select a suitable font + +Name: console-setup/fontsize +Template: console-setup/fontsize +Value: 8x16 +Owners: console-setup + +Name: console-setup/fontsize-fb47 +Template: console-setup/fontsize-fb47 +Value: 8x16 +Owners: console-setup +Variables: + CHOICES = 8x13, 8x14, 8x15, 8x16, 8x18 + +Name: console-setup/fontsize-text47 +Template: console-setup/fontsize-text47 +Value: 8x16 +Owners: console-setup + +Name: console-setup/framebuffer_only +Template: console-setup/framebuffer_only +Owners: console-setup + +Name: console-setup/guess_font +Template: console-setup/guess_font +Owners: console-setup + +Name: console-setup/store_defaults_in_debconf_db +Template: console-setup/store_defaults_in_debconf_db +Value: true +Owners: console-setup + +Name: console-setup/use_system_font +Template: console-setup/use_system_font +Owners: console-setup + +Name: dash/sh +Template: dash/sh +Value: true +Owners: dash +Flags: seen + +Name: debconf-apt-progress/info +Template: debconf-apt-progress/info +Owners: debconf + +Name: debconf-apt-progress/media-change +Template: debconf-apt-progress/media-change +Owners: debconf + +Name: debconf-apt-progress/preparing +Template: debconf-apt-progress/preparing +Owners: debconf + +Name: debconf-apt-progress/title +Template: debconf-apt-progress/title +Owners: debconf + +Name: debconf/frontend +Template: debconf/frontend +Value: Dialog +Owners: debconf + +Name: debconf/priority +Template: debconf/priority +Value: high +Owners: debconf + +Name: debian-installer/console-setup-udeb/title +Template: debian-installer/console-setup-udeb/title +Owners: keyboard-configuration + +Name: debian-installer/country +Template: debian-installer/country +Value: US +Owners: d-i + +Name: debian-installer/language +Template: debian-installer/language +Value: en +Owners: d-i + +Name: dictionaries-common/default-ispell +Template: dictionaries-common/default-ispell +Value: american (American English) +Owners: dictionaries-common +Flags: seen +Variables: + choices = american (American English), british (British English) + echoices = american (American English), british (British English) + +Name: dictionaries-common/default-wordlist +Template: dictionaries-common/default-wordlist +Value: american (American English) +Owners: dictionaries-common +Flags: seen +Variables: + choices = american (American English) + echoices = american (American English) + +Name: dictionaries-common/invalid_debconf_value +Template: dictionaries-common/invalid_debconf_value +Owners: dictionaries-common + +Name: dictionaries-common/ispell-autobuildhash-message +Template: dictionaries-common/ispell-autobuildhash-message +Owners: dictionaries-common + +Name: dictionaries-common/move_old_usr_dict +Template: dictionaries-common/move_old_usr_dict +Owners: dictionaries-common + +Name: dictionaries-common/old_wordlist_link +Template: dictionaries-common/old_wordlist_link +Owners: dictionaries-common + +Name: dictionaries-common/remove_old_usr_dict_link +Template: dictionaries-common/remove_old_usr_dict_link +Value: false +Owners: dictionaries-common + +Name: dictionaries-common/selecting_ispell_wordlist_default +Template: dictionaries-common/selecting_ispell_wordlist_default +Owners: dictionaries-common + +Name: discover/install_hw_packages +Template: discover/install_hw_packages +Owners: discover + +Name: exim4-base/drec +Template: exim4-base/drec +Owners: exim4-base + +Name: exim4-daemon-light/drec +Template: exim4-daemon-light/drec +Owners: exim4-daemon-light + +Name: exim4/dc_eximconfig_configtype +Template: exim4/dc_eximconfig_configtype +Value: local delivery only; not on a network +Owners: exim4-config + +Name: exim4/dc_local_interfaces +Template: exim4/dc_local_interfaces +Value: 127.0.0.1 ; ::1 +Owners: exim4-config + +Name: exim4/dc_localdelivery +Template: exim4/dc_localdelivery +Value: mbox format in /var/mail/ +Owners: exim4-config + +Name: exim4/dc_minimaldns +Template: exim4/dc_minimaldns +Value: false +Owners: exim4-config + +Name: exim4/dc_other_hostnames +Template: exim4/dc_other_hostnames +Value: ahha.citrite.net +Owners: exim4-config +Flags: mailname +Variables: + fqdn = ahha.citrite.net + +Name: exim4/dc_postmaster +Template: exim4/dc_postmaster +Value: vagrant +Owners: exim4-config + +Name: exim4/dc_readhost +Template: exim4/dc_readhost +Owners: exim4-config + +Name: exim4/dc_relay_domains +Template: exim4/dc_relay_domains +Owners: exim4-config + +Name: exim4/dc_relay_nets +Template: exim4/dc_relay_nets +Owners: exim4-config + +Name: exim4/dc_smarthost +Template: exim4/dc_smarthost +Owners: exim4-config + +Name: exim4/drec +Template: exim4/drec +Owners: exim4 + +Name: exim4/exim4-config-title +Template: exim4/exim4-config-title +Owners: exim4-config + +Name: exim4/hide_mailname +Template: exim4/hide_mailname +Owners: exim4-config + +Name: exim4/mailname +Template: exim4/mailname +Value: ahha.citrite.net +Owners: exim4-config + +Name: exim4/no_config +Template: exim4/no_config +Owners: exim4-config + +Name: exim4/purge_spool +Template: exim4/purge_spool +Owners: exim4-base + +Name: exim4/use_split_config +Template: exim4/use_split_config +Value: false +Owners: exim4-config + +Name: glibc/disable-screensaver +Template: glibc/disable-screensaver +Owners: libc6, libc6:i386 + +Name: glibc/restart-failed +Template: glibc/restart-failed +Owners: libc6, libc6:i386 + +Name: glibc/restart-services +Template: glibc/restart-services +Owners: libc6, libc6:i386 + +Name: glibc/upgrade +Template: glibc/upgrade +Owners: libc6, libc6:i386 + +Name: grub-pc/chainload_from_menu.lst +Template: grub-pc/chainload_from_menu.lst +Owners: grub-pc + +Name: grub-pc/disk_description +Template: grub-pc/disk_description +Owners: grub-pc +Variables: + DEVICE = /dev/mapper/ahha-root + MODEL = ahha-root + SIZE = 1753 + +Name: grub-pc/install_devices +Template: grub-pc/install_devices +Value: /dev/disk/by-id/ata-VBOX_HARDDISK_VBe38481e3-55a686f1 +Owners: grub-pc +Flags: seen +Variables: + CHOICES = /dev/sda (2147 MB; VBOX_HARDDISK), - /dev/sda1 (254 MB; /boot), /dev/mapper/ahha-root (1753 MB; ahha-root) + RAW_CHOICES = /dev/disk/by-id/ata-VBOX_HARDDISK_VBe38481e3-55a686f1, /dev/disk/by-id/ata-VBOX_HARDDISK_VBe38481e3-55a686f1-part1, /dev/mapper/ahha-root + +Name: grub-pc/install_devices_disks_changed +Template: grub-pc/install_devices_disks_changed +Owners: grub-pc + +Name: grub-pc/install_devices_empty +Template: grub-pc/install_devices_empty +Value: false +Owners: grub-pc + +Name: grub-pc/install_devices_failed +Template: grub-pc/install_devices_failed +Owners: grub-pc + +Name: grub-pc/install_devices_failed_upgrade +Template: grub-pc/install_devices_failed_upgrade +Owners: grub-pc + +Name: grub-pc/kopt_extracted +Template: grub-pc/kopt_extracted +Owners: grub-pc + +Name: grub-pc/mixed_legacy_and_grub2 +Template: grub-pc/mixed_legacy_and_grub2 +Owners: grub-pc + +Name: grub-pc/partition_description +Template: grub-pc/partition_description +Owners: grub-pc +Variables: + DEVICE = /dev/sda1 + PATH = /boot + SIZE = 254 + +Name: grub-pc/postrm_purge_boot_grub +Template: grub-pc/postrm_purge_boot_grub +Owners: grub-pc + +Name: grub2/device_map_regenerated +Template: grub2/device_map_regenerated +Owners: grub-pc + +Name: grub2/kfreebsd_cmdline +Template: grub2/kfreebsd_cmdline +Owners: grub-pc + +Name: grub2/kfreebsd_cmdline_default +Template: grub2/kfreebsd_cmdline_default +Owners: grub-pc + +Name: grub2/linux_cmdline +Template: grub2/linux_cmdline +Value: debian-installer=en_US +Owners: grub-pc +Flags: seen + +Name: grub2/linux_cmdline_default +Template: grub2/linux_cmdline_default +Value: quiet +Owners: grub-pc +Flags: seen + +Name: iamerican/languages +Template: iamerican/languages +Owners: iamerican + +Name: ibritish/languages +Template: ibritish/languages +Owners: ibritish + +Name: keyboard-configuration/altgr +Template: keyboard-configuration/altgr +Value: The default for the keyboard layout +Owners: d-i, keyboard-configuration +Flags: seen + +Name: keyboard-configuration/compose +Template: keyboard-configuration/compose +Value: No compose key +Owners: d-i, keyboard-configuration +Flags: seen + +Name: keyboard-configuration/ctrl_alt_bksp +Template: keyboard-configuration/ctrl_alt_bksp +Value: false +Owners: d-i, keyboard-configuration + +Name: keyboard-configuration/layout +Template: keyboard-configuration/layout +Owners: d-i, keyboard-configuration +Flags: seen + +Name: keyboard-configuration/layoutcode +Template: keyboard-configuration/layoutcode +Value: us +Owners: d-i, keyboard-configuration +Flags: seen + +Name: keyboard-configuration/model +Template: keyboard-configuration/model +Value: Generic 105-key (Intl) PC +Owners: d-i, keyboard-configuration +Flags: seen +Variables: + CHOICES = A4Tech KB-21, A4Tech KBS-8, A4Tech Wireless Desktop RFKB-23, Acer AirKey V, Acer C300, Acer Ferrari 4000, Acer Laptop, Advance Scorpius KI, Amiga, Apple, Apple Aluminium Keyboard (ANSI), Apple Aluminium Keyboard (ISO), Apple Aluminium Keyboard (JIS), Apple Laptop, Asus Laptop, Atari TT, Azona RF2300 wireless Internet Keyboard, BenQ X-Touch, BenQ X-Touch 730, BenQ X-Touch 800, Brother Internet Keyboard, BTC 5090, BTC 5113RF Multimedia, BTC 5126T, BTC 6301URF, BTC 9000, BTC 9000A, BTC 9001AH, BTC 9019U, BTC 9116U Mini Wireless Internet and Gaming, Cherry Blue Line CyBo@rd, Cherry Blue Line CyBo@rd (alternate option), Cherry B.UNLIMITED, Cherry CyBo@rd USB-Hub, Cherry CyMotion Expert, Cherry CyMotion Master Linux, Cherry CyMotion Master XPress, Chicony Internet Keyboard, Chicony KB-9885, Chicony KU-0108, Chicony KU-0420, Classmate PC, Compaq Easy Access Keyboard, Compaq Internet Keyboard (13 keys), Compaq Internet Keyboard (18 keys), Compaq Internet Keyboard (7 keys), Compaq iPaq Keyboard, Creative Desktop Wireless 7000, Dell, Dell 101-key PC, Dell Laptop/notebook Inspiron 6xxx/8xxx, Dell Laptop/notebook Precision M series, Dell Latitude series laptop, Dell Precision M65, Dell SK-8125, Dell SK-8135, Dell USB Multimedia Keyboard, Dexxa Wireless Desktop Keyboard, Diamond 9801 / 9802 series, DTK2000, Ennyah DKB-1008, Everex STEPnote, FL90, Fujitsu-Siemens Computers AMILO laptop, Generic 101-key PC, Generic 102-key (Intl) PC, Generic 104-key PC, Generic 105-key (Intl) PC, Genius Comfy KB-12e, Genius Comfy KB-16M / Genius MM Keyboard KWD-910, Genius Comfy KB-21e-Scroll, Genius KB-19e NB, Genius KKB-2050HS, Gyration, Happy Hacking Keyboard, Happy Hacking Keyboard for Mac, Hewlett-Packard Internet Keyboard, Hewlett-Packard Mini 110 Notebook, Hewlett-Packard nx9020, Hewlett-Packard Omnibook 500 FA, Hewlett-Packard Omnibook 5xx, Hewlett-Packard Omnibook 6000/6100, Hewlett-Packard Omnibook XE3 GC, Hewlett-Packard Omnibook XE3 GF, Hewlett-Packard Omnibook XT1000, Hewlett-Packard Pavilion dv5, Hewlett-Packard Pavilion ZT11xx, Hewlett-Packard SK-250x Multimedia Keyboard, Honeywell Euroboard, HTC Dream, Htc Dream phone, IBM Rapid Access, IBM Rapid Access II, IBM Space Saver, IBM ThinkPad 560Z/600/600E/A22E, IBM ThinkPad R60/T60/R61/T61, IBM ThinkPad Z60m/Z60t/Z61m/Z61t, Keytronic FlexPro, Kinesis, Laptop/notebook Compaq (eg. Armada) Laptop Keyboard, Laptop/notebook Compaq (eg. Presario) Internet Keyboard, Laptop/notebook eMachines m68xx, Logitech Access Keyboard, Logitech Cordless Desktop, Logitech Cordless Desktop (alternate option), Logitech Cordless Desktop EX110, Logitech Cordless Desktop iTouch, Logitech Cordless Desktop LX-300, Logitech Cordless Desktop Navigator, Logitech Cordless Desktop Optical, Logitech Cordless Desktop Pro (alternate option 2), Logitech Cordless Freedom/Desktop Navigator, Logitech diNovo Edge Keyboard, Logitech diNovo Keyboard, Logitech G15 extra keys via G15daemon, Logitech Generic Keyboard, Logitech Internet 350 Keyboard, Logitech Internet Keyboard, Logitech Internet Navigator Keyboard, Logitech iTouch, Logitech iTouch Cordless Keyboard (model Y-RB6), Logitech iTouch Internet Navigator Keyboard SE, Logitech iTouch Internet Navigator Keyboard SE (USB), Logitech Media Elite Keyboard, Logitech Ultra-X Cordless Media Desktop Keyboard, Logitech Ultra-X Keyboard, MacBook/MacBook Pro, MacBook/MacBook Pro (Intl), Macintosh, Macintosh Old, Memorex MX1998, Memorex MX2500 EZ-Access Keyboard, Memorex MX2750, Microsoft Comfort Curve Keyboard 2000, Microsoft Internet Keyboard, Microsoft Internet Keyboard Pro\, Swedish, Microsoft Natural, Microsoft Natural Keyboard Elite, Microsoft Natural Keyboard Pro OEM, Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro, Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro, Microsoft Natural Wireless Ergonomic Keyboard 4000, Microsoft Natural Wireless Ergonomic Keyboard 7000, Microsoft Office Keyboard, Microsoft Wireless Multimedia Keyboard 1.0A, Northgate OmniKey 101, OLPC, Ortek MCK-800 MM/Internet keyboard, PC-98xx Series, Propeller Voyager (KTEZ-1000), QTronix Scorpius 98N+, Samsung SDM 4500P, Samsung SDM 4510P, Sanwa Supply SKB-KG3, SILVERCREST Multimedia Wireless Keyboard, SK-1300, SK-2500, SK-6200, SK-7100, Sun Type 4, Sun Type 5, Sun Type 5/6, Super Power Multimedia Keyboard, SVEN Ergonomic 2500, SVEN Slim 303, Symplon PaceBook (tablet PC), Targa Visionary 811, Toshiba Satellite S3000, Trust Direct Access Keyboard, Trust Slimline, Trust Wireless Keyboard Classic, TypeMatrix EZ-Reach 2020, TypeMatrix EZ-Reach 2030 PS2, TypeMatrix EZ-Reach 2030 USB, TypeMatrix EZ-Reach 2030 USB (102/105:EU mode), TypeMatrix EZ-Reach 2030 USB (106:JP mode), Unitek KB-1925, ViewSonic KU-306 Internet Keyboard, Winbook Model XP5, Yahoo! Internet Keyboard + +Name: keyboard-configuration/modelcode +Template: keyboard-configuration/modelcode +Value: pc105 +Owners: d-i, keyboard-configuration +Flags: seen + +Name: keyboard-configuration/optionscode +Template: keyboard-configuration/optionscode +Value: +Owners: d-i, keyboard-configuration +Flags: seen + +Name: keyboard-configuration/other +Template: keyboard-configuration/other +Owners: d-i, keyboard-configuration +Flags: seen + +Name: keyboard-configuration/store_defaults_in_debconf_db +Template: keyboard-configuration/store_defaults_in_debconf_db +Value: true +Owners: d-i, keyboard-configuration +Flags: seen + +Name: keyboard-configuration/switch +Template: keyboard-configuration/switch +Value: No temporary switch +Owners: d-i, keyboard-configuration +Flags: seen + +Name: keyboard-configuration/toggle +Template: keyboard-configuration/toggle +Value: No toggling +Owners: d-i, keyboard-configuration +Flags: seen + +Name: keyboard-configuration/unsupported_config_layout +Template: keyboard-configuration/unsupported_config_layout +Value: true +Owners: d-i, keyboard-configuration + +Name: keyboard-configuration/unsupported_config_options +Template: keyboard-configuration/unsupported_config_options +Value: true +Owners: d-i, keyboard-configuration + +Name: keyboard-configuration/unsupported_layout +Template: keyboard-configuration/unsupported_layout +Value: true +Owners: d-i, keyboard-configuration + +Name: keyboard-configuration/unsupported_options +Template: keyboard-configuration/unsupported_options +Value: true +Owners: d-i, keyboard-configuration + +Name: keyboard-configuration/variant +Template: keyboard-configuration/variant +Value: English (US) +Owners: d-i, keyboard-configuration +Flags: seen +Variables: + CHOICES = English (US), English (US) - Cherokee, English (US) - English (classic Dvorak), English (US) - English (Colemak), English (US) - English (Dvorak), English (US) - English (Dvorak alternative international no dead keys), English (US) - English (Dvorak international with dead keys), English (US) - English (international AltGr dead keys), English (US) - English (layout toggle on multiply/divide key), English (US) - English (left handed Dvorak), English (US) - English (Macintosh), English (US) - English (programmer Dvorak), English (US) - English (right handed Dvorak), English (US) - English (US\, alternative international), English (US) - English (US\, international with dead keys), English (US) - English (US\, with euro on 5), English (US) - Russian (US\, phonetic), English (US) - Serbo-Croatian (US), Other + +Name: keyboard-configuration/variantcode +Template: keyboard-configuration/variantcode +Value: +Owners: d-i, keyboard-configuration +Flags: seen + +Name: keyboard-configuration/xkb-keymap +Template: keyboard-configuration/xkb-keymap +Value: us +Owners: d-i, keyboard-configuration +Flags: seen + +Name: libpam-modules/disable-screensaver +Template: libpam-modules/disable-screensaver +Owners: libpam-modules + +Name: libpam-runtime/conflicts +Template: libpam-runtime/conflicts +Owners: libpam-runtime + +Name: libpam-runtime/no_profiles_chosen +Template: libpam-runtime/no_profiles_chosen +Owners: libpam-runtime + +Name: libpam-runtime/override +Template: libpam-runtime/override +Value: false +Owners: libpam-runtime + +Name: libpam-runtime/profiles +Template: libpam-runtime/profiles +Value: unix +Owners: libpam-runtime +Variables: + profile_names = unix + profiles = Unix authentication + +Name: libpam-runtime/title +Template: libpam-runtime/title +Owners: libpam-runtime + +Name: libpam0g/restart-failed +Template: libpam0g/restart-failed +Owners: libpam0g:i386 + +Name: libpam0g/restart-services +Template: libpam0g/restart-services +Owners: libpam0g:i386 + +Name: libpam0g/xdm-needs-restart +Template: libpam0g/xdm-needs-restart +Owners: libpam0g:i386 + +Name: libraries/restart-without-asking +Template: libraries/restart-without-asking +Owners: libc6, libc6:i386, libpam0g:i386 + +Name: libssl1.0.0/restart-failed +Template: libssl1.0.0/restart-failed +Owners: libssl1.0.0:i386 + +Name: libssl1.0.0/restart-services +Template: libssl1.0.0/restart-services +Owners: libssl1.0.0:i386 + +Name: linux-base/disk-id-convert-auto +Template: linux-base/disk-id-convert-auto +Owners: linux-base + +Name: linux-base/disk-id-convert-plan +Template: linux-base/disk-id-convert-plan +Owners: linux-base + +Name: linux-base/disk-id-convert-plan-no-relabel +Template: linux-base/disk-id-convert-plan-no-relabel +Owners: linux-base + +Name: linux-base/disk-id-manual +Template: linux-base/disk-id-manual +Owners: linux-base + +Name: linux-base/disk-id-manual-boot-loader +Template: linux-base/disk-id-manual-boot-loader +Owners: linux-base + +Name: linux-base/disk-id-update-failed +Template: linux-base/disk-id-update-failed +Owners: linux-base + +Name: linux-base/do-bootloader-default-changed +Template: linux-base/do-bootloader-default-changed +Owners: linux-base + +Name: linux-image-3.2.0-4-686-pae/postinst/depmod-error-initrd-3.2.0-4-686-pae +Template: linux-image-3.2.0-4-686-pae/postinst/depmod-error-initrd-3.2.0-4-686-pae +Owners: linux-image-3.2.0-4-686-pae + +Name: linux-image-3.2.0-4-686-pae/postinst/ignoring-ramdisk +Template: linux-image-3.2.0-4-686-pae/postinst/ignoring-ramdisk +Owners: linux-image-3.2.0-4-686-pae + +Name: linux-image-3.2.0-4-686-pae/postinst/missing-firmware-3.2.0-4-686-pae +Template: linux-image-3.2.0-4-686-pae/postinst/missing-firmware-3.2.0-4-686-pae +Owners: linux-image-3.2.0-4-686-pae + +Name: linux-image-3.2.0-4-686-pae/prerm/removing-running-kernel-3.2.0-4-686-pae +Template: linux-image-3.2.0-4-686-pae/prerm/removing-running-kernel-3.2.0-4-686-pae +Owners: linux-image-3.2.0-4-686-pae + +Name: locales/default_environment_locale +Template: locales/default_environment_locale +Owners: locales + +Name: locales/locales_to_be_generated +Template: locales/locales_to_be_generated +Value: +Owners: locales +Variables: + locales = aa_DJ ISO-8859-1, aa_DJ.UTF-8 UTF-8, aa_ER UTF-8, aa_ER@saaho UTF-8, aa_ET UTF-8, af_ZA ISO-8859-1, af_ZA.UTF-8 UTF-8, am_ET UTF-8, an_ES ISO-8859-15, an_ES.UTF-8 UTF-8, ar_AE ISO-8859-6, ar_AE.UTF-8 UTF-8, ar_BH ISO-8859-6, ar_BH.UTF-8 UTF-8, ar_DZ ISO-8859-6, ar_DZ.UTF-8 UTF-8, ar_EG ISO-8859-6, ar_EG.UTF-8 UTF-8, ar_IN UTF-8, ar_IQ ISO-8859-6, ar_IQ.UTF-8 UTF-8, ar_JO ISO-8859-6, ar_JO.UTF-8 UTF-8, ar_KW ISO-8859-6, ar_KW.UTF-8 UTF-8, ar_LB ISO-8859-6, ar_LB.UTF-8 UTF-8, ar_LY ISO-8859-6, ar_LY.UTF-8 UTF-8, ar_MA ISO-8859-6, ar_MA.UTF-8 UTF-8, ar_OM ISO-8859-6, ar_OM.UTF-8 UTF-8, ar_QA ISO-8859-6, ar_QA.UTF-8 UTF-8, ar_SA ISO-8859-6, ar_SA.UTF-8 UTF-8, ar_SD ISO-8859-6, ar_SD.UTF-8 UTF-8, ar_SY ISO-8859-6, ar_SY.UTF-8 UTF-8, ar_TN ISO-8859-6, ar_TN.UTF-8 UTF-8, ar_YE ISO-8859-6, ar_YE.UTF-8 UTF-8, as_IN.UTF-8 UTF-8, ast_ES ISO-8859-15, ast_ES.UTF-8 UTF-8, az_AZ.UTF-8 UTF-8, be_BY CP1251, be_BY.UTF-8 UTF-8, be_BY@latin UTF-8, bem_ZM UTF-8, ber_DZ UTF-8, ber_MA UTF-8, bg_BG CP1251, bg_BG.UTF-8 UTF-8, bn_BD UTF-8, bn_IN UTF-8, bo_CN UTF-8, bo_IN UTF-8, br_FR ISO-8859-1, br_FR.UTF-8 UTF-8, br_FR@euro ISO-8859-15, bs_BA ISO-8859-2, bs_BA.UTF-8 UTF-8, byn_ER UTF-8, ca_AD ISO-8859-15, ca_AD.UTF-8 UTF-8, ca_ES ISO-8859-1, ca_ES.UTF-8 UTF-8, ca_ES.UTF-8@valencia UTF-8, ca_ES@euro ISO-8859-15, ca_ES@valencia ISO-8859-15, ca_FR ISO-8859-15, ca_FR.UTF-8 UTF-8, ca_IT ISO-8859-15, ca_IT.UTF-8 UTF-8, crh_UA UTF-8, cs_CZ ISO-8859-2, cs_CZ.UTF-8 UTF-8, csb_PL UTF-8, cv_RU UTF-8, cy_GB ISO-8859-14, cy_GB.UTF-8 UTF-8, da_DK ISO-8859-1, da_DK.UTF-8 UTF-8, de_AT ISO-8859-1, de_AT.UTF-8 UTF-8, de_AT@euro ISO-8859-15, de_BE ISO-8859-1, de_BE.UTF-8 UTF-8, de_BE@euro ISO-8859-15, de_CH ISO-8859-1, de_CH.UTF-8 UTF-8, de_DE ISO-8859-1, de_DE.UTF-8 UTF-8, de_DE@euro ISO-8859-15, de_LI.UTF-8 UTF-8, de_LU ISO-8859-1, de_LU.UTF-8 UTF-8, de_LU@euro ISO-8859-15, dv_MV UTF-8, dz_BT UTF-8, el_CY ISO-8859-7, el_CY.UTF-8 UTF-8, el_GR ISO-8859-7, el_GR.UTF-8 UTF-8, en_AG UTF-8, en_AU ISO-8859-1, en_AU.UTF-8 UTF-8, en_BW ISO-8859-1, en_BW.UTF-8 UTF-8, en_CA ISO-8859-1, en_CA.UTF-8 UTF-8, en_DK ISO-8859-1, en_DK.ISO-8859-15 ISO-8859-15, en_DK.UTF-8 UTF-8, en_GB ISO-8859-1, en_GB.ISO-8859-15 ISO-8859-15, en_GB.UTF-8 UTF-8, en_HK ISO-8859-1, en_HK.UTF-8 UTF-8, en_IE ISO-8859-1, en_IE.UTF-8 UTF-8, en_IE@euro ISO-8859-15, en_IN UTF-8, en_NG UTF-8, en_NZ ISO-8859-1, en_NZ.UTF-8 UTF-8, en_PH ISO-8859-1, en_PH.UTF-8 UTF-8, en_SG ISO-8859-1, en_SG.UTF-8 UTF-8, en_US ISO-8859-1, en_US.ISO-8859-15 ISO-8859-15, en_US.UTF-8 UTF-8, en_ZA ISO-8859-1, en_ZA.UTF-8 UTF-8, en_ZM UTF-8, en_ZW ISO-8859-1, en_ZW.UTF-8 UTF-8, eo ISO-8859-3, eo.UTF-8 UTF-8, es_AR ISO-8859-1, es_AR.UTF-8 UTF-8, es_BO ISO-8859-1, es_BO.UTF-8 UTF-8, es_CL ISO-8859-1, es_CL.UTF-8 UTF-8, es_CO ISO-8859-1, es_CO.UTF-8 UTF-8, es_CR ISO-8859-1, es_CR.UTF-8 UTF-8, es_DO ISO-8859-1, es_DO.UTF-8 UTF-8, es_EC ISO-8859-1, es_EC.UTF-8 UTF-8, es_ES ISO-8859-1, es_ES.UTF-8 UTF-8, es_ES@euro ISO-8859-15, es_GT ISO-8859-1, es_GT.UTF-8 UTF-8, es_HN ISO-8859-1, es_HN.UTF-8 UTF-8, es_MX ISO-8859-1, es_MX.UTF-8 UTF-8, es_NI ISO-8859-1, es_NI.UTF-8 UTF-8, es_PA ISO-8859-1, es_PA.UTF-8 UTF-8, es_PE ISO-8859-1, es_PE.UTF-8 UTF-8, es_PR ISO-8859-1, es_PR.UTF-8 UTF-8, es_PY ISO-8859-1, es_PY.UTF-8 UTF-8, es_SV ISO-8859-1, es_SV.UTF-8 UTF-8, es_US ISO-8859-1, es_US.UTF-8 UTF-8, es_UY ISO-8859-1, es_UY.UTF-8 UTF-8, es_VE ISO-8859-1, es_VE.UTF-8 UTF-8, et_EE ISO-8859-1, et_EE.ISO-8859-15 ISO-8859-15, et_EE.UTF-8 UTF-8, eu_ES ISO-8859-1, eu_ES.UTF-8 UTF-8, eu_ES@euro ISO-8859-15, eu_FR ISO-8859-1, eu_FR.UTF-8 UTF-8, eu_FR@euro ISO-8859-15, fa_IR UTF-8, ff_SN UTF-8, fi_FI ISO-8859-1, fi_FI.UTF-8 UTF-8, fi_FI@euro ISO-8859-15, fil_PH UTF-8, fo_FO ISO-8859-1, fo_FO.UTF-8 UTF-8, fr_BE ISO-8859-1, fr_BE.UTF-8 UTF-8, fr_BE@euro ISO-8859-15, fr_CA ISO-8859-1, fr_CA.UTF-8 UTF-8, fr_CH ISO-8859-1, fr_CH.UTF-8 UTF-8, fr_FR ISO-8859-1, fr_FR.UTF-8 UTF-8, fr_FR@euro ISO-8859-15, fr_LU ISO-8859-1, fr_LU.UTF-8 UTF-8, fr_LU@euro ISO-8859-15, fur_IT UTF-8, fy_DE UTF-8, fy_NL UTF-8, ga_IE ISO-8859-1, ga_IE.UTF-8 UTF-8, ga_IE@euro ISO-8859-15, gd_GB ISO-8859-15, gd_GB.UTF-8 UTF-8, gez_ER UTF-8, gez_ER@abegede UTF-8, gez_ET UTF-8, gez_ET@abegede UTF-8, gl_ES ISO-8859-1, gl_ES.UTF-8 UTF-8, gl_ES@euro ISO-8859-15, gu_IN UTF-8, gv_GB ISO-8859-1, gv_GB.UTF-8 UTF-8, ha_NG UTF-8, he_IL ISO-8859-8, he_IL.UTF-8 UTF-8, hi_IN UTF-8, hne_IN UTF-8, hr_HR ISO-8859-2, hr_HR.UTF-8 UTF-8, hsb_DE ISO-8859-2, hsb_DE.UTF-8 UTF-8, ht_HT UTF-8, hu_HU ISO-8859-2, hu_HU.UTF-8 UTF-8, hy_AM UTF-8, hy_AM.ARMSCII-8 ARMSCII-8, ia UTF-8, id_ID ISO-8859-1, id_ID.UTF-8 UTF-8, ig_NG UTF-8, ik_CA UTF-8, is_IS ISO-8859-1, is_IS.UTF-8 UTF-8, it_CH ISO-8859-1, it_CH.UTF-8 UTF-8, it_IT ISO-8859-1, it_IT.UTF-8 UTF-8, it_IT@euro ISO-8859-15, iu_CA UTF-8, iw_IL ISO-8859-8, iw_IL.UTF-8 UTF-8, ja_JP.EUC-JP EUC-JP, ja_JP.UTF-8 UTF-8, ka_GE GEORGIAN-PS, ka_GE.UTF-8 UTF-8, kk_KZ PT154, kk_KZ RK1048, kk_KZ.UTF-8 UTF-8, kl_GL ISO-8859-1, kl_GL.UTF-8 UTF-8, km_KH UTF-8, kn_IN UTF-8, ko_KR.EUC-KR EUC-KR, ko_KR.UTF-8 UTF-8, kok_IN UTF-8, ks_IN UTF-8, ks_IN@devanagari UTF-8, ku_TR ISO-8859-9, ku_TR.UTF-8 UTF-8, kw_GB ISO-8859-1, kw_GB.UTF-8 UTF-8, ky_KG UTF-8, lg_UG ISO-8859-10, lg_UG.UTF-8 UTF-8, li_BE UTF-8, li_NL UTF-8, lo_LA UTF-8, lt_LT ISO-8859-13, lt_LT.UTF-8 UTF-8, lv_LV ISO-8859-13, lv_LV.UTF-8 UTF-8, mai_IN UTF-8, mg_MG ISO-8859-15, mg_MG.UTF-8 UTF-8, mi_NZ ISO-8859-13, mi_NZ.UTF-8 UTF-8, mk_MK ISO-8859-5, mk_MK.UTF-8 UTF-8, ml_IN UTF-8, mn_MN UTF-8, mr_IN UTF-8, ms_MY ISO-8859-1, ms_MY.UTF-8 UTF-8, mt_MT ISO-8859-3, mt_MT.UTF-8 UTF-8, my_MM UTF-8, nan_TW@latin UTF-8, nb_NO ISO-8859-1, nb_NO.UTF-8 UTF-8, nds_DE UTF-8, nds_NL UTF-8, ne_NP UTF-8, nl_AW UTF-8, nl_BE ISO-8859-1, nl_BE.UTF-8 UTF-8, nl_BE@euro ISO-8859-15, nl_NL ISO-8859-1, nl_NL.UTF-8 UTF-8, nl_NL@euro ISO-8859-15, nn_NO ISO-8859-1, nn_NO.UTF-8 UTF-8, nr_ZA UTF-8, nso_ZA UTF-8, oc_FR ISO-8859-1, oc_FR.UTF-8 UTF-8, om_ET UTF-8, om_KE ISO-8859-1, om_KE.UTF-8 UTF-8, or_IN UTF-8, os_RU UTF-8, pa_IN UTF-8, pa_PK UTF-8, pap_AN UTF-8, pl_PL ISO-8859-2, pl_PL.UTF-8 UTF-8, ps_AF UTF-8, pt_BR ISO-8859-1, pt_BR.UTF-8 UTF-8, pt_PT ISO-8859-1, pt_PT.UTF-8 UTF-8, pt_PT@euro ISO-8859-15, ro_RO ISO-8859-2, ro_RO.UTF-8 UTF-8, ru_RU ISO-8859-5, ru_RU.CP1251 CP1251, ru_RU.KOI8-R KOI8-R, ru_RU.UTF-8 UTF-8, ru_UA KOI8-U, ru_UA.UTF-8 UTF-8, rw_RW UTF-8, sa_IN UTF-8, sc_IT UTF-8, sd_IN UTF-8, sd_IN@devanagari UTF-8, se_NO UTF-8, shs_CA UTF-8, si_LK UTF-8, sid_ET UTF-8, sk_SK ISO-8859-2, sk_SK.UTF-8 UTF-8, sl_SI ISO-8859-2, sl_SI.UTF-8 UTF-8, so_DJ ISO-8859-1, so_DJ.UTF-8 UTF-8, so_ET UTF-8, so_KE ISO-8859-1, so_KE.UTF-8 UTF-8, so_SO ISO-8859-1, so_SO.UTF-8 UTF-8, sq_AL ISO-8859-1, sq_AL.UTF-8 UTF-8, sq_MK UTF-8, sr_ME UTF-8, sr_RS UTF-8, sr_RS@latin UTF-8, ss_ZA UTF-8, st_ZA ISO-8859-1, st_ZA.UTF-8 UTF-8, sv_FI ISO-8859-1, sv_FI.UTF-8 UTF-8, sv_FI@euro ISO-8859-15, sv_SE ISO-8859-1, sv_SE.ISO-8859-15 ISO-8859-15, sv_SE.UTF-8 UTF-8, sw_KE UTF-8, sw_TZ UTF-8, ta_IN UTF-8, te_IN UTF-8, tg_TJ KOI8-T, tg_TJ.UTF-8 UTF-8, th_TH TIS-620, th_TH.UTF-8 UTF-8, ti_ER UTF-8, ti_ET UTF-8, tig_ER UTF-8, tk_TM UTF-8, tl_PH ISO-8859-1, tl_PH.UTF-8 UTF-8, tn_ZA UTF-8, tr_CY ISO-8859-9, tr_CY.UTF-8 UTF-8, tr_TR ISO-8859-9, tr_TR.UTF-8 UTF-8, ts_ZA UTF-8, tt_RU.UTF-8 UTF-8, tt_RU.UTF-8@iqtelif UTF-8, ug_CN UTF-8, uk_UA KOI8-U, uk_UA.UTF-8 UTF-8, ur_PK UTF-8, uz_UZ ISO-8859-1, uz_UZ.UTF-8 UTF-8, uz_UZ@cyrillic UTF-8, ve_ZA UTF-8, vi_VN UTF-8, vi_VN.TCVN TCVN5712-1, wa_BE ISO-8859-1, wa_BE.UTF-8 UTF-8, wa_BE@euro ISO-8859-15, wo_SN UTF-8, xh_ZA ISO-8859-1, xh_ZA.UTF-8 UTF-8, yi_US CP1255, yi_US.UTF-8 UTF-8, yo_NG UTF-8, zh_CN GB2312, zh_CN.GB18030 GB18030, zh_CN.GBK GBK, zh_CN.UTF-8 UTF-8, zh_HK BIG5-HKSCS, zh_HK.UTF-8 UTF-8, zh_SG GB2312, zh_SG.GBK GBK, zh_SG.UTF-8 UTF-8, zh_TW BIG5, zh_TW.EUC-TW EUC-TW, zh_TW.UTF-8 UTF-8, zu_ZA ISO-8859-1, zu_ZA.UTF-8 UTF-8 + +Name: make-ssl-cert/altname +Template: make-ssl-cert/altname +Owners: ssl-cert + +Name: make-ssl-cert/hostname +Template: make-ssl-cert/hostname +Owners: ssl-cert + +Name: make-ssl-cert/title +Template: make-ssl-cert/title +Owners: ssl-cert + +Name: make-ssl-cert/vulnerable_prng +Template: make-ssl-cert/vulnerable_prng +Owners: ssl-cert + +Name: man-db/auto-update +Template: man-db/auto-update +Owners: man-db + +Name: man-db/install-setuid +Template: man-db/install-setuid +Value: false +Owners: man-db + +Name: openswan/existing_x509_certificate_filename +Template: openswan/existing_x509_certificate_filename +Owners: openswan + +Name: openswan/existing_x509_key_filename +Template: openswan/existing_x509_key_filename +Owners: openswan + +Name: openswan/existing_x509_rootca_filename +Template: openswan/existing_x509_rootca_filename +Owners: openswan + +Name: openswan/how_to_get_x509_certificate +Template: openswan/how_to_get_x509_certificate +Owners: openswan + +Name: openswan/install_x509_certificate +Template: openswan/install_x509_certificate +Value: false +Owners: openswan +Flags: seen + +Name: openswan/no-oe_include_file +Template: openswan/no-oe_include_file +Owners: openswan + +Name: openswan/restart +Template: openswan/restart +Value: true +Owners: openswan + +Name: openswan/rsa_key_length +Template: openswan/rsa_key_length +Owners: openswan + +Name: openswan/runlevel_changes +Template: openswan/runlevel_changes +Owners: openswan + +Name: openswan/x509_common_name +Template: openswan/x509_common_name +Owners: openswan + +Name: openswan/x509_country_code +Template: openswan/x509_country_code +Owners: openswan + +Name: openswan/x509_email_address +Template: openswan/x509_email_address +Owners: openswan + +Name: openswan/x509_locality_name +Template: openswan/x509_locality_name +Owners: openswan + +Name: openswan/x509_organization_name +Template: openswan/x509_organization_name +Owners: openswan + +Name: openswan/x509_organizational_unit +Template: openswan/x509_organizational_unit +Owners: openswan + +Name: openswan/x509_self_signed +Template: openswan/x509_self_signed +Owners: openswan + +Name: openswan/x509_state_name +Template: openswan/x509_state_name +Owners: openswan + +Name: passwd/username +Template: passwd/username +Value: vagrant +Owners: user-setup-udeb +Flags: seen + +Name: shared/packages-ispell +Template: shared/packages-ispell +Owners: iamerican, ibritish + +Name: shared/packages-wordlist +Template: shared/packages-wordlist +Owners: wamerican + +Name: ssh/disable_cr_auth +Template: ssh/disable_cr_auth +Owners: openssh-server + +Name: ssh/encrypted_host_key_but_no_keygen +Template: ssh/encrypted_host_key_but_no_keygen +Owners: openssh-server + +Name: ssh/use_old_init_script +Template: ssh/use_old_init_script +Value: true +Owners: openssh-server +Flags: seen + +Name: ssh/vulnerable_host_keys +Template: ssh/vulnerable_host_keys +Owners: openssh-server + +Name: sysstat/enable +Template: sysstat/enable +Value: true +Owners: sysstat +Flags: seen + +Name: sysstat/remove_files +Template: sysstat/remove_files +Value: true +Owners: sysstat + +Name: tasksel/desktop +Template: tasksel/desktop +Owners: tasksel + +Name: tasksel/first +Template: tasksel/first +Value: ssh-server +Owners: tasksel +Variables: + CHOICES = Debian desktop environment, Web server, Print server, SQL database, DNS Server, File server, Mail server, SSH server, Laptop, Standard system utilities + CHOICES_C = desktop, web-server, print-server, database-server, dns-server, file-server, mail-server, ssh-server, laptop, standard + +Name: tasksel/tasks +Template: tasksel/tasks +Owners: tasksel + +Name: tasksel/title +Template: tasksel/title +Owners: tasksel + +Name: tzdata/Areas +Template: tzdata/Areas +Value: Etc +Owners: tzdata +Flags: seen + +Name: tzdata/Zones/Africa +Template: tzdata/Zones/Africa +Owners: tzdata + +Name: tzdata/Zones/America +Template: tzdata/Zones/America +Owners: tzdata + +Name: tzdata/Zones/Antarctica +Template: tzdata/Zones/Antarctica +Owners: tzdata + +Name: tzdata/Zones/Arctic +Template: tzdata/Zones/Arctic +Owners: tzdata + +Name: tzdata/Zones/Asia +Template: tzdata/Zones/Asia +Owners: tzdata + +Name: tzdata/Zones/Atlantic +Template: tzdata/Zones/Atlantic +Owners: tzdata + +Name: tzdata/Zones/Australia +Template: tzdata/Zones/Australia +Owners: tzdata + +Name: tzdata/Zones/Etc +Template: tzdata/Zones/Etc +Value: UTC +Owners: tzdata +Flags: seen + +Name: tzdata/Zones/Europe +Template: tzdata/Zones/Europe +Owners: tzdata + +Name: tzdata/Zones/Indian +Template: tzdata/Zones/Indian +Owners: tzdata + +Name: tzdata/Zones/Pacific +Template: tzdata/Zones/Pacific +Owners: tzdata + +Name: tzdata/Zones/SystemV +Template: tzdata/Zones/SystemV +Owners: tzdata + +Name: tzdata/Zones/US +Template: tzdata/Zones/US +Owners: tzdata + +Name: ucf/changeprompt +Template: ucf/changeprompt +Owners: ucf + +Name: ucf/changeprompt_threeway +Template: ucf/changeprompt_threeway +Owners: ucf + +Name: ucf/conflicts_found +Template: ucf/conflicts_found +Owners: ucf + +Name: ucf/show_diff +Template: ucf/show_diff +Owners: ucf + +Name: ucf/title +Template: ucf/title +Owners: ucf + +Name: udev/new_kernel_needed +Template: udev/new_kernel_needed +Owners: udev + +Name: udev/reboot_needed +Template: udev/reboot_needed +Owners: udev + +Name: udev/sysfs_deprecated_incompatibility +Template: udev/sysfs_deprecated_incompatibility +Owners: udev + +Name: udev/title/upgrade +Template: udev/title/upgrade +Owners: udev + +Name: wamerican/languages +Template: wamerican/languages +Owners: wamerican + diff --git a/tools/appliance/definitions/systemvmtemplate/definition.rb b/tools/appliance/definitions/systemvmtemplate/definition.rb index aebb4f24ff8..cc2f972bdf0 100644 --- a/tools/appliance/definitions/systemvmtemplate/definition.rb +++ b/tools/appliance/definitions/systemvmtemplate/definition.rb @@ -38,6 +38,7 @@ Veewee::Definition.declare({ 'debconf/frontend=noninteractive ', 'console-setup/ask_detect=false ', 'console-keymaps-at/keymap=us ', + 'keyboard-configuration/xkb-keymap=us ', '' ], :kickstart_port => "7122", @@ -45,14 +46,17 @@ Veewee::Definition.declare({ :kickstart_file => "preseed.cfg", :ssh_login_timeout => "10000", :ssh_user => "root", - :ssh_password => "password", + :ssh_password => "vagrant", :ssh_key => "", :ssh_host_port => "7222", :ssh_guest_port => "22", :sudo_cmd => "echo '%p'|sudo -S sh '%f'", :shutdown_cmd => "halt -p", :postinstall_files => [ - "postinstall.sh", + "base.sh", + "cloudstack-packages.sh", + "cleanup.sh", + "zerodisk.sh" ], - :postinstall_timeout => "10000" + :postinstall_timeout => "100000" }) diff --git a/tools/appliance/definitions/systemvmtemplate/zerodisk.sh b/tools/appliance/definitions/systemvmtemplate/zerodisk.sh new file mode 100644 index 00000000000..938075a31e6 --- /dev/null +++ b/tools/appliance/definitions/systemvmtemplate/zerodisk.sh @@ -0,0 +1,3 @@ +# Zero out the free space to save space in the final image: +dd if=/dev/zero of=/EMPTY bs=1M +rm -f /EMPTY From 97833c9f939ad02ec96f2adb8c563de5988b99e3 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Thu, 7 Feb 2013 19:02:09 -0800 Subject: [PATCH 37/85] CLOUDSTACK-1066: bug fixes to cloudstack package script --- .../definitions/systemvmtemplate/cloudstack-packages.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/appliance/definitions/systemvmtemplate/cloudstack-packages.sh b/tools/appliance/definitions/systemvmtemplate/cloudstack-packages.sh index 426cd033b55..070122ddaab 100644 --- a/tools/appliance/definitions/systemvmtemplate/cloudstack-packages.sh +++ b/tools/appliance/definitions/systemvmtemplate/cloudstack-packages.sh @@ -57,7 +57,7 @@ accounts() { # Setup sudo to allow no-password sudo for "admin" groupadd -r admin #create a 'cloud' user - usermod -a -G admin cloud + useradd -G admin cloud echo "root:password" | chpasswd echo "cloud:password" | chpasswd sed -i -e '/Defaults\s\+env_reset/a Defaults\texempt_group=admin' /etc/sudoers @@ -70,7 +70,7 @@ accounts() { do_fixes() { #fix hostname in openssh-server generated keys - sed -i "s/root@\(.*\)$/root@systemvm/g" etc/ssh/ssh_host_*.pub + sed -i "s/root@\(.*\)$/root@systemvm/g" /etc/ssh/ssh_host_*.pub } signature() { From eaaf880dcf231a23c7c26920e05d057f0e8d18f9 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Thu, 7 Feb 2013 19:06:47 -0800 Subject: [PATCH 38/85] CLOUDSTACK-1066: add license and attribution --- .../definitions/systemvmtemplate/LICENSE | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 tools/appliance/definitions/systemvmtemplate/LICENSE diff --git a/tools/appliance/definitions/systemvmtemplate/LICENSE b/tools/appliance/definitions/systemvmtemplate/LICENSE new file mode 100644 index 00000000000..c33c3bba2ae --- /dev/null +++ b/tools/appliance/definitions/systemvmtemplate/LICENSE @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2010-2012 Patrick Debois + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. From d71cfc1aec58a7e43591e228546ae773847d2d46 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Thu, 7 Feb 2013 21:49:37 -0800 Subject: [PATCH 39/85] Revert "CLOUDSTACK-1175: Fix NPE by making _store a static variable shared by objects" This reverts commit 9b691fc443cc27f1e2026ec239fc4aa11a4167aa. --- .../apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java b/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java index 5f38ccf6141..a5726e1d2ac 100644 --- a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java +++ b/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java @@ -56,7 +56,7 @@ public class ApiRateLimitServiceImpl extends AdapterBase implements APIChecker, */ private int maxAllowed = 30; - private static LimitStore _store = null; + private LimitStore _store = null; @Inject AccountService _accountService; From 12cbaad69147edb9c91e4025fe19d1ed6275a198 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Thu, 7 Feb 2013 21:42:30 -0800 Subject: [PATCH 40/85] Remove duplicate bean for ApiRateLimitServiceImpl to make sure that only one ApiChecker instance is injected in ApiServer. --- client/tomcatconf/componentContext.xml.in | 7 ++----- client/tomcatconf/nonossComponentContext.xml.in | 7 ++----- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/client/tomcatconf/componentContext.xml.in b/client/tomcatconf/componentContext.xml.in index de013de60de..43d31fb4b95 100644 --- a/client/tomcatconf/componentContext.xml.in +++ b/client/tomcatconf/componentContext.xml.in @@ -52,9 +52,8 @@ - - - + + @@ -125,8 +124,6 @@ - - From 6d952a15ab80480e147359f92c922fa3c5ab150b Mon Sep 17 00:00:00 2001 From: Hugo Trippaers Date: Fri, 8 Feb 2013 08:16:14 +0100 Subject: [PATCH 41/85] Compileall does not compile single files --- packaging/centos63/cloud.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/centos63/cloud.spec b/packaging/centos63/cloud.spec index cc62acfaf74..d8143214b6b 100644 --- a/packaging/centos63/cloud.spec +++ b/packaging/centos63/cloud.spec @@ -185,7 +185,7 @@ install -D console-proxy/dist/systemvm.iso ${RPM_BUILD_ROOT}%{_datadir}/%{name}- install -D console-proxy/dist/systemvm.zip ${RPM_BUILD_ROOT}%{_datadir}/%{name}-common/vms/systemvm.zip install python/lib/cloud_utils.py ${RPM_BUILD_ROOT}%{_libdir}/python2.6/site-packages/cloud_utils.py cp -r python/lib/cloudutils ${RPM_BUILD_ROOT}%{_libdir}/python2.6/site-packages/ -python -m compileall ${RPM_BUILD_ROOT}%{_libdir}/python2.6/site-packages/cloud_utils.py +python -m py_compile ${RPM_BUILD_ROOT}%{_libdir}/python2.6/site-packages/cloud_utils.py python -m compileall ${RPM_BUILD_ROOT}%{_libdir}/python2.6/site-packages/cloudutils # Management From 0b1e3a4af0d1cfc3968fe1361bddd829397e366c Mon Sep 17 00:00:00 2001 From: Min Chen Date: Thu, 7 Feb 2013 23:48:15 -0800 Subject: [PATCH 42/85] Move Api rate limit configurations from xml file to global configuration, and also modify listCapabilitiesCmd to also return api limit interval and max for UI consumption. --- .../user/config/ListCapabilitiesCmd.java | 2 ++ .../api/response/CapabilitiesResponse.java | 15 +++++++++++++ .../ratelimit/ApiRateLimitServiceImpl.java | 21 +++++++++++-------- .../ratelimit/ApiRateLimitTest.java | 8 +++++++ .../src/com/cloud/configuration/Config.java | 8 +++++-- .../cloud/server/ManagementServerImpl.java | 16 +++++++++----- setup/db/db/schema-40to410.sql | 4 ++++ 7 files changed, 58 insertions(+), 16 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java index 85011175536..eb862e62f47 100644 --- a/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/config/ListCapabilitiesCmd.java @@ -52,6 +52,8 @@ public class ListCapabilitiesCmd extends BaseCmd { response.setProjectInviteRequired((Boolean)capabilities.get("projectInviteRequired")); response.setAllowUsersCreateProjects((Boolean)capabilities.get("allowusercreateprojects")); response.setDiskOffMaxSize((Long)capabilities.get("customDiskOffMaxSize")); + response.setApiLimitInterval((Integer)capabilities.get("apiLimitInterval")); + response.setApiLimitMax((Integer)capabilities.get("apiLimitMax")); response.setObjectName("capability"); response.setResponseName(getCommandName()); this.setResponseObject(response); diff --git a/api/src/org/apache/cloudstack/api/response/CapabilitiesResponse.java b/api/src/org/apache/cloudstack/api/response/CapabilitiesResponse.java index 4afa604577f..c2996f0aa0a 100644 --- a/api/src/org/apache/cloudstack/api/response/CapabilitiesResponse.java +++ b/api/src/org/apache/cloudstack/api/response/CapabilitiesResponse.java @@ -46,6 +46,12 @@ public class CapabilitiesResponse extends BaseResponse { "create disk from disk offering with custom size") private Long diskOffMaxSize; + @SerializedName("apilimitinterval") @Param(description="time interval (in seconds) to reset api count") + private Integer apiLimitInterval; + + @SerializedName("apilimitmax") @Param(description="Max allowed number of api requests within the specified interval") + private Integer apiLimitMax; + public void setSecurityGroupsEnabled(boolean securityGroupsEnabled) { this.securityGroupsEnabled = securityGroupsEnabled; @@ -75,4 +81,13 @@ public class CapabilitiesResponse extends BaseResponse { this.diskOffMaxSize = diskOffMaxSize; } + public void setApiLimitInterval(Integer apiLimitInterval) { + this.apiLimitInterval = apiLimitInterval; + } + + public void setApiLimitMax(Integer apiLimitMax) { + this.apiLimitMax = apiLimitMax; + } + + } diff --git a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java b/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java index a5726e1d2ac..1f84ca18bbb 100644 --- a/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java +++ b/plugins/api/rate-limit/src/org/apache/cloudstack/ratelimit/ApiRateLimitServiceImpl.java @@ -29,10 +29,13 @@ import net.sf.ehcache.CacheManager; import org.apache.log4j.Logger; import org.apache.cloudstack.acl.APIChecker; +import org.apache.cloudstack.api.ApiConstants.LDAPParams; import org.apache.cloudstack.api.command.admin.ratelimit.ResetApiLimitCmd; import org.apache.cloudstack.api.command.user.ratelimit.GetApiLimitCmd; import org.apache.cloudstack.api.response.ApiLimitResponse; +import com.cloud.configuration.Config; +import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.RequestLimitException; import com.cloud.user.Account; @@ -61,29 +64,29 @@ public class ApiRateLimitServiceImpl extends AdapterBase implements APIChecker, @Inject AccountService _accountService; + @Inject + ConfigurationDao _configDao; + @Override public boolean configure(String name, Map params) throws ConfigurationException { super.configure(name, params); if (_store == null) { - // not configured yet, note that since this class is both adapter - // and pluggableService, so this method - // may be invoked twice in ComponentLocator. // get global configured duration and max values - Object duration = params.get("api.throttling.interval"); + String duration = _configDao.getValue(Config.ApiLimitInterval.key()); if (duration != null) { - timeToLive = Integer.parseInt((String) duration); + timeToLive = Integer.parseInt(duration); } - Object maxReqs = params.get("api.throttling.max"); + String maxReqs = _configDao.getValue(Config.ApiLimitMax.key()); if (maxReqs != null) { - maxAllowed = Integer.parseInt((String) maxReqs); + maxAllowed = Integer.parseInt(maxReqs); } // create limit store EhcacheLimitStore cacheStore = new EhcacheLimitStore(); int maxElements = 10000; - Object cachesize = params.get("api.throttling.cachesize"); + String cachesize = _configDao.getValue(Config.ApiLimitCacheSize.key()); if ( cachesize != null ){ - maxElements = Integer.parseInt((String)cachesize); + maxElements = Integer.parseInt(cachesize); } CacheManager cm = CacheManager.create(); Cache cache = new Cache("api-limit-cache", maxElements, false, false, timeToLive, timeToLive); diff --git a/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/ApiRateLimitTest.java b/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/ApiRateLimitTest.java index 502b15cf316..1a77a4ef3a6 100644 --- a/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/ApiRateLimitTest.java +++ b/plugins/api/rate-limit/test/org/apache/cloudstack/ratelimit/ApiRateLimitTest.java @@ -29,6 +29,8 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; +import com.cloud.configuration.Config; +import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.exception.RequestLimitException; import com.cloud.user.Account; import com.cloud.user.AccountService; @@ -43,12 +45,18 @@ public class ApiRateLimitTest { static ApiRateLimitServiceImpl _limitService = new ApiRateLimitServiceImpl(); static AccountService _accountService = mock(AccountService.class); + static ConfigurationDao _configDao = mock(ConfigurationDao.class); private static long acctIdSeq = 5L; private static Account testAccount; @BeforeClass public static void setUp() throws ConfigurationException { + when(_configDao.getValue(Config.ApiLimitInterval.key())).thenReturn(null); + when(_configDao.getValue(Config.ApiLimitMax.key())).thenReturn(null); + when(_configDao.getValue(Config.ApiLimitCacheSize.key())).thenReturn(null); + _limitService._configDao = _configDao; + _limitService.configure("ApiRateLimitTest", Collections. emptyMap()); _limitService._accountService = _accountService; diff --git a/server/src/com/cloud/configuration/Config.java b/server/src/com/cloud/configuration/Config.java index 7592b6bdfca..cbd5b013699 100755 --- a/server/src/com/cloud/configuration/Config.java +++ b/server/src/com/cloud/configuration/Config.java @@ -358,12 +358,16 @@ public enum Config { ConcurrentSnapshotsThresholdPerHost("Advanced", ManagementServer.class, Long.class, "concurrent.snapshots.threshold.perhost", null, "Limits number of snapshots that can be handled by the host concurrently; default is NULL - unlimited", null), NetworkIPv6SearchRetryMax("Network", ManagementServer.class, Integer.class, "network.ipv6.search.retry.max", "10000", "The maximum number of retrying times to search for an available IPv6 address in the table", null), - + ExternalBaremetalSystemUrl("Advanced", ManagementServer.class, String.class, "external.baremetal.system.url", null, "url of external baremetal system that CloudStack will talk to", null), ExternalBaremetalResourceClassName("Advanced", ManagementServer.class, String.class, "external,baremetal.resource.classname", null, "class name for handling external baremetal resource", null), EnableBaremetalSecurityGroupAgentEcho("Advanced", ManagementServer.class, Boolean.class, "enable.baremetal.securitygroup.agent.echo", "false", "After starting provision process, periodcially echo security agent installed in the template. Treat provisioning as success only if echo successfully", null), IntervalToEchoBaremetalSecurityGroupAgent("Advanced", ManagementServer.class, Integer.class, "interval.baremetal.securitygroup.agent.echo", "10", "Interval to echo baremetal security group agent, in seconds", null), - TimeoutToEchoBaremetalSecurityGroupAgent("Advanced", ManagementServer.class, Integer.class, "timeout.baremetal.securitygroup.agent.echo", "3600", "Timeout to echo baremetal security group agent, in seconds, the provisioning process will be treated as a failure", null); + TimeoutToEchoBaremetalSecurityGroupAgent("Advanced", ManagementServer.class, Integer.class, "timeout.baremetal.securitygroup.agent.echo", "3600", "Timeout to echo baremetal security group agent, in seconds, the provisioning process will be treated as a failure", null), + + ApiLimitInterval("Advanced", ManagementServer.class, Integer.class, "api.throttling.interval", "1", "Time interval (in seconds) to reset API count", null), + ApiLimitMax("Advanced", ManagementServer.class, Integer.class, "api.throttling.max", "25", "Max allowed number of APIs within fixed interval", null), + ApiLimitCacheSize("Advanced", ManagementServer.class, Integer.class, "api.throttling.cachesize", "50000", "Account based API count cache size", null); private final String _category; private final Class _componentClass; diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 5306bc0928d..fd6c8766639 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -5,7 +5,7 @@ // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, @@ -375,7 +375,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe @Inject S3Manager _s3Mgr; -/* +/* @Inject ComponentContext _forceContextRef; // create a dependency to ComponentContext so that it can be loaded beforehead @@ -417,14 +417,14 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe for (String id : availableIds) { _availableIdsMap.put(id, true); } - + return true; } - + @Override public boolean start() { s_logger.info("Startup CloudStack management server..."); - + enableAdminUser("password"); return true; } @@ -2187,6 +2187,10 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe String userPublicTemplateEnabled = _configs.get(Config.AllowPublicUserTemplates.key()); + // add some parameters UI needs to handle API throttling + Integer apiLimitInterval = Integer.valueOf(_configDao.getValue(Config.ApiLimitInterval.key())); + Integer apiLimitMax = Integer.valueOf(_configDao.getValue(Config.ApiLimitMax.key())); + capabilities.put("securityGroupsEnabled", securityGroupsEnabled); capabilities .put("userPublicTemplateEnabled", (userPublicTemplateEnabled == null || userPublicTemplateEnabled.equals("false") ? false : true)); @@ -2195,6 +2199,8 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe capabilities.put("projectInviteRequired", _projectMgr.projectInviteRequired()); capabilities.put("allowusercreateprojects", _projectMgr.allowUserToCreateProject()); capabilities.put("customDiskOffMaxSize", diskOffMaxSize); + capabilities.put("apiLimitInterval", apiLimitInterval); + capabilities.put("apiLimitMax", apiLimitMax); return capabilities; } diff --git a/setup/db/db/schema-40to410.sql b/setup/db/db/schema-40to410.sql index 6d5b2621dbc..d771a150f10 100644 --- a/setup/db/db/schema-40to410.sql +++ b/setup/db/db/schema-40to410.sql @@ -146,6 +146,10 @@ UPDATE `cloud`.`counter` set uuid=id WHERE uuid is NULL; UPDATE `cloud`.`conditions` set uuid=id WHERE uuid is NULL; INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'management-server', '"detail.batch.query.size"', '2000', 'Default entity detail batch query size for listing'); +INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'management-server', '"api.throttling.interval"', '1', 'Time interval (in seconds) to reset API count'); +INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'management-server', '"api.throttling.max"', '25', 'Max allowed number of APIs within fixed interval'); +INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'management-server', '"api.throttling.cachesize"', '50000', 'Account based API count cache size'); + -- DB views for list api From 31f0c6a3bdedc7f1af605f36e2a036ea4233e5c2 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 8 Feb 2013 13:52:40 +0530 Subject: [PATCH 43/85] INSTALL.md: Update port info with better summary and fix building section Signed-off-by: Rohit Yadav --- INSTALL.md | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 00c724b11b4..a2137fdf69d 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -51,19 +51,21 @@ Apache CloudStack uses some ports, make sure at least those used by the manageme server are available and not blocked by any local firewall. Following ports are used by Apache CloudStack and its entities: - 8787: Apache CloudStack (Tomcat) debug socket - 9090, 8250, 8080: Apache CloudStack Management Server, User/Client API - 8096: User/Client to CloudStack Management Server (unauthenticated) - 7080: AWS API Server - 3306: MySQL Server - 3922, 8250, 80/443, 111/2049, 53: Secondary Storage VM - 3922, 8250, 53: Console Proxy VM - 3922, 8250, 53: Virtual Router + 8080: API Server (authenticated), browser or CLI client to management server + 8096: API Server (unauthenticated), browser or CLI client to management server + 8787: Remote java debug debugging port, from IDE to management server + 9090: Management server to management server (cluster) + 7080: AWS API Server to which an AWS client can connect + 80/443: HTTP client to Secondary Storage VM (template download) + 111/2049: Secondary Storage to NFS server + 3922: Port used to ssh/scp into system vms (SSVM, CPVM, VR) + 8250: Agent (SSVM, CPVM, VR) to management server 22, 80, 443: XenServer, XAPI 22: KVM 443: vCenter - DNS: 53 - NFS: 111/2049 + 53: DNS + 111/2049: NFS + 3306: MySQL Server to which the management server connects ### Configuring MySQL Server @@ -93,8 +95,7 @@ For example, for master: Clean and build: - $ mvn clean - $ mvn install + $ mvn clean install -P systemvm,developer In case you want support for VMWare, SRX and other non-Apache (referred to as nonoss) compliant libs, you may download the following jar artifacts from respective vendors: @@ -112,9 +113,9 @@ Install them to ~/.m2 so maven can get them as dependencies: $ cd deps $ ./install-non-oss.sh -And build them with the nonoss flag: +To build with nonoss components, use the build command with the nonoss flag: - $ mvn install -Dnonoss + $ mvn clean install -P systemvm,developer -Dnonoss Clear old database (if any) and deploy the database schema: @@ -122,7 +123,7 @@ Clear old database (if any) and deploy the database schema: Export the following variable if you need to run and debug the management server: - $ export MAVEN_OPTS="-Xmx1024m -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n" + $ export MAVEN_OPTS="-Xmx1024m -XX:MaxPermSize=500m -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n" Start the management server: From e4b2fe42e0305c57f87cf8e77b75d9c02dfb0163 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Fri, 8 Feb 2013 10:50:48 +0100 Subject: [PATCH 44/85] CLOUDSTACK-1206: Change path from /etc/cloud to /etc/cloudstack Reported-by: Pradeep Soundararajan --- .../storage/secondary/cloud-install-sys-tmplt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/scripts/storage/secondary/cloud-install-sys-tmplt b/scripts/storage/secondary/cloud-install-sys-tmplt index 63a04d8cb07..2172b287848 100755 --- a/scripts/storage/secondary/cloud-install-sys-tmplt +++ b/scripts/storage/secondary/cloud-install-sys-tmplt @@ -20,7 +20,7 @@ usage() { - printf "Usage: %s: -m -f [-h ] [ -s ][-u ] [-F ] [-e