From e91dd3e653a23a357c9d1932eba94b11879b717e Mon Sep 17 00:00:00 2001 From: Pranav Saxena Date: Tue, 10 Jul 2012 04:43:01 +0530 Subject: [PATCH 01/31] CS-12739:DeployvM wizard when choosing to Add a new network if user does not provide the network name then clicking on Next does nothing --- ui/index.jsp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/index.jsp b/ui/index.jsp index fb3327f5466..af05f4a652d 100644 --- a/ui/index.jsp +++ b/ui/index.jsp @@ -257,7 +257,7 @@
-
+
*
From 9eebdd808d6b48e9b8d573cd4c337a3c55f17d8c Mon Sep 17 00:00:00 2001 From: Pranav Saxena Date: Tue, 10 Jul 2012 15:40:14 +0530 Subject: [PATCH 02/31] CS-15475:Not showing Add GuestNetwork Tab in Network in multi zone setup of advanced and basic zones together --- ui/scripts/network.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ui/scripts/network.js b/ui/scripts/network.js index 150ade27846..baeb9722b5a 100644 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -197,7 +197,7 @@ label: 'label.add.guest.network', preFilter: function(args) { - var basicZoneExists = false; + var basicZoneExists = true; //Modifying the logic behind displaying the tabs depending on the networktype $.ajax({ url: createURL("listZones"), dataType: "json", @@ -206,8 +206,8 @@ if(json.listzonesresponse.zone != null && json.listzonesresponse.zone.length > 0) { zoneObjs = json.listzonesresponse.zone; $(zoneObjs).each(function() { - if(this.networktype == "Basic") { - basicZoneExists = true; + if(this.networktype == "Advanced") { + basicZoneExists = false; // For any occurence of an Advanced zone with any combination of basic zone , the add guest network tab will be displayed return false; //break each loop } }); From 374be31b63f6ea0f835495933730358380745a56 Mon Sep 17 00:00:00 2001 From: Pranav Saxena Date: Fri, 13 Jul 2012 12:32:38 +0530 Subject: [PATCH 03/31] CS-15572 : StartIndex handled incorrectly when switching between the various Filter by options while listing ISOs in the UI --- ui/scripts/ui/widgets/listView.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ui/scripts/ui/widgets/listView.js b/ui/scripts/ui/widgets/listView.js index b01d01e18b0..60f701bcec9 100644 --- a/ui/scripts/ui/widgets/listView.js +++ b/ui/scripts/ui/widgets/listView.js @@ -1261,6 +1261,10 @@ return true; }); + $listView.find('#filterBy').bind('click',function(event) { + page = 1; //Handling the case to display more than 20 entities on a page while switching between panels + return page; + }); var search = function() { loadBody( $table, From dade14aab13b7f308ad2f6f739f9b400a42f9570 Mon Sep 17 00:00:00 2001 From: Pranav Saxena Date: Tue, 24 Jul 2012 01:25:05 +0530 Subject: [PATCH 04/31] CS-15540: Shared Networks IPs in Advanced Zone appear as 'Direct IP' in System-Wide-Capacity Dashboard --- client/WEB-INF/classes/resources/messages.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties index 35fe56849d9..0ce3d4442c4 100644 --- a/client/WEB-INF/classes/resources/messages.properties +++ b/client/WEB-INF/classes/resources/messages.properties @@ -320,7 +320,7 @@ state.Ready=Ready label.vm.display.name=VM display name label.select-view=Select view label.local.storage=Local Storage -label.direct.ips=Direct IPs +label.direct.ips=Shared Network IPs label.view.all=View all label.zone.details=Zone details message.alert.state.detected=Alert state detected From 4421cd9dee68f54e11256b5de33c51d7c3c7c6fe Mon Sep 17 00:00:00 2001 From: David Nalley Date: Tue, 24 Jul 2012 10:47:03 -0400 Subject: [PATCH 05/31] fixing a few more license headers --- .../commands/AddExternalLoadBalancerCmd.java | 31 +++++++++++-------- .../api/commands/AddF5LoadBalancerCmd.java | 31 +++++++++++-------- .../commands/ConfigureF5LoadBalancerCmd.java | 29 ++++++++++------- .../DeleteExternalLoadBalancerCmd.java | 29 ++++++++++------- .../api/commands/DeleteF5LoadBalancerCmd.java | 29 ++++++++++------- .../ListExternalLoadBalancersCmd.java | 29 ++++++++++------- .../ListF5LoadBalancerNetworksCmd.java | 29 ++++++++++------- .../api/commands/ListF5LoadBalancersCmd.java | 29 ++++++++++------- 8 files changed, 138 insertions(+), 98 deletions(-) diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java index a8208ae1e8b..3fa61167efa 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java @@ -1,15 +1,20 @@ -// Copyright 2012 Citrix Systems, Inc. Licensed under the -// Apache License, Version 2.0 (the "License"); you may not use this -// file except in compliance with the License. Citrix Systems, Inc. -// reserves all rights not expressly granted by 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. -// -// Automatically generated by addcopyright.py at 04/03/2012 +// 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.api.commands; import org.apache.log4j.Logger; @@ -102,4 +107,4 @@ public class AddExternalLoadBalancerCmd extends BaseCmd { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); } } -} \ No newline at end of file +} diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java index bec09989abd..13c443e7cf0 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java @@ -1,15 +1,20 @@ -// Copyright 2012 Citrix Systems, Inc. Licensed under the -// Apache License, Version 2.0 (the "License"); you may not use this -// file except in compliance with the License. Citrix Systems, Inc. -// reserves all rights not expressly granted by 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. -// -// Automatically generated by addcopyright.py at 04/03/2012 +// 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.api.commands; import org.apache.log4j.Logger; @@ -127,4 +132,4 @@ public class AddF5LoadBalancerCmd extends BaseAsyncCmd { public long getEntityOwnerId() { return UserContext.current().getCaller().getId(); } -} \ No newline at end of file +} diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java index 20b2e5a3b8c..9f5217c3280 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java @@ -1,15 +1,20 @@ -// Copyright 2012 Citrix Systems, Inc. Licensed under the -// Apache License, Version 2.0 (the "License"); you may not use this -// file except in compliance with the License. Citrix Systems, Inc. -// reserves all rights not expressly granted by 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. -// -// Automatically generated by addcopyright.py at 04/03/2012 +// 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.api.commands; import org.apache.log4j.Logger; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java index c4b903a5c81..2c89a4a6a9d 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java @@ -1,15 +1,20 @@ -// Copyright 2012 Citrix Systems, Inc. Licensed under the -// Apache License, Version 2.0 (the "License"); you may not use this -// file except in compliance with the License. Citrix Systems, Inc. -// reserves all rights not expressly granted by 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. -// -// Automatically generated by addcopyright.py at 04/03/2012 +// 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.api.commands; import org.apache.log4j.Logger; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java index 4fcd734a05f..959819b1588 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java @@ -1,15 +1,20 @@ -// Copyright 2012 Citrix Systems, Inc. Licensed under the -// Apache License, Version 2.0 (the "License"); you may not use this -// file except in compliance with the License. Citrix Systems, Inc. -// reserves all rights not expressly granted by 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. -// -// Automatically generated by addcopyright.py at 04/03/2012 +// 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.api.commands; import org.apache.log4j.Logger; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java index 6551985363a..acb71b06c0a 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java @@ -1,15 +1,20 @@ -// Copyright 2012 Citrix Systems, Inc. Licensed under the -// Apache License, Version 2.0 (the "License"); you may not use this -// file except in compliance with the License. Citrix Systems, Inc. -// reserves all rights not expressly granted by 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. -// -// Automatically generated by addcopyright.py at 04/03/2012 +// 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.api.commands; import java.util.ArrayList; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java index efa71b554eb..f2fa071b53e 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java @@ -1,15 +1,20 @@ -// Copyright 2012 Citrix Systems, Inc. Licensed under the -// Apache License, Version 2.0 (the "License"); you may not use this -// file except in compliance with the License. Citrix Systems, Inc. -// reserves all rights not expressly granted by 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. -// -// Automatically generated by addcopyright.py at 04/03/2012 +// 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.api.commands; import java.util.ArrayList; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java index 228bab5623a..fe4cb67bd01 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java @@ -1,15 +1,20 @@ -// Copyright 2012 Citrix Systems, Inc. Licensed under the -// Apache License, Version 2.0 (the "License"); you may not use this -// file except in compliance with the License. Citrix Systems, Inc. -// reserves all rights not expressly granted by 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. -// -// Automatically generated by addcopyright.py at 04/03/2012 +// 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.api.commands; import java.util.ArrayList; From c99b1d104a455f8ecc1adc7bc09b2e3e76870fff Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Tue, 24 Jul 2012 10:30:39 -0700 Subject: [PATCH 06/31] Fixed broken unittest --- server/test/com/cloud/user/MockAccountManagerImpl.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/server/test/com/cloud/user/MockAccountManagerImpl.java b/server/test/com/cloud/user/MockAccountManagerImpl.java index f4342a3146c..8f6d4fa21a5 100644 --- a/server/test/com/cloud/user/MockAccountManagerImpl.java +++ b/server/test/com/cloud/user/MockAccountManagerImpl.java @@ -336,4 +336,13 @@ public class MockAccountManagerImpl implements Manager, AccountManager { // TODO Auto-generated method stub } + /* (non-Javadoc) + * @see com.cloud.user.AccountService#getUserByApiKey(java.lang.String) + */ + @Override + public UserAccount getUserByApiKey(String apiKey) { + // TODO Auto-generated method stub + return null; + } + } From eab3e4783e0f8aba7dab889bdfcc441a028b387a Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Tue, 24 Jul 2012 15:18:32 +0200 Subject: [PATCH 07/31] Remove cloud-daemonize and use JSVC We now use JSVC for daemonizing our agent and usage server. --- agent/conf/environment.properties.in | 1 + .../ubuntu/SYSCONFDIR/init.d/cloud-agent.in | 46 ++- agent/libexec/agent-runner.in | 88 ----- agent/src/com/cloud/agent/AgentShell.java | 39 +- daemonize/daemonize.c | 351 ------------------ debian/control | 4 +- .../ubuntu/SYSCONFDIR/init.d/cloud-usage.in | 28 +- usage/libexec/usage-runner.in | 37 -- usage/src/com/cloud/usage/UsageServer.java | 19 +- 9 files changed, 93 insertions(+), 520 deletions(-) delete mode 100755 agent/libexec/agent-runner.in delete mode 100644 daemonize/daemonize.c delete mode 100755 usage/libexec/usage-runner.in diff --git a/agent/conf/environment.properties.in b/agent/conf/environment.properties.in index c38e2b8137b..7fcf570538f 100644 --- a/agent/conf/environment.properties.in +++ b/agent/conf/environment.properties.in @@ -18,3 +18,4 @@ # management server compile-time environment parameters paths.pid=@PIDDIR@ +paths.scripts=@AGENTLIBDIR@ diff --git a/agent/distro/ubuntu/SYSCONFDIR/init.d/cloud-agent.in b/agent/distro/ubuntu/SYSCONFDIR/init.d/cloud-agent.in index c4607cbb799..e2bbdb68a79 100755 --- a/agent/distro/ubuntu/SYSCONFDIR/init.d/cloud-agent.in +++ b/agent/distro/ubuntu/SYSCONFDIR/init.d/cloud-agent.in @@ -36,15 +36,33 @@ whatami=cloud-agent # set environment variables SHORTNAME="$whatami" -PIDFILE=@PIDDIR@/"$whatami".pid -LOCKFILE=@LOCKDIR@/"$SHORTNAME" -LOGFILE=@AGENTLOG@ +PIDFILE=/var/run/"$whatami".pid +LOCKFILE=/var/lock/subsys/"$SHORTNAME" +LOGFILE=/var/log/cloud/agent/agent.log PROGNAME="Cloud Agent" +CLASS="com.cloud.agent.AgentShell" unset OPTIONS -[ -r @SYSCONFDIR@/default/"$SHORTNAME" ] && source @SYSCONFDIR@/default/"$SHORTNAME" -DAEMONIZE=@BINDIR@/@PACKAGE@-daemonize -PROG=@LIBEXECDIR@/agent-runner +[ -r /etc/default/"$SHORTNAME" ] && source /etc/default/"$SHORTNAME" + +# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not defined in $DEFAULT) +JDK_DIRS="/usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-openjdk-i386 /usr/lib/jvm/java-6-openjdk-amd64 /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm" + +for jdir in $JDK_DIRS; do + if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then + JAVA_HOME="$jdir" + fi +done +export JAVA_HOME + +SCP="@SYSTEMCLASSPATH@" +DCP="@DEPSCLASSPATH@" +ACP="@AGENTCLASSPATH@" +JCP="/usr/share/java/commons-daemon.jar" + +# We need to append the JSVC daemon JAR to the classpath +# AgentShell implements the JSVC daemon methods +export CLASSPATH="$SCP:$DCP:$ACP:$JCP:@AGENTSYSCONFDIR@" wait_for_network() { i=1 @@ -79,9 +97,7 @@ start() { wait_for_network - if start-stop-daemon --start --quiet \ - --pidfile "$PIDFILE" \ - --exec "$DAEMONIZE" -- -n "$SHORTNAME" -p "$PIDFILE" -l "$LOGFILE" "$PROG" $OPTIONS + if jsvc -cp "$CLASSPATH" -pidfile "$PIDFILE" $CLASS RETVAL=$? then rc=0 @@ -107,11 +123,11 @@ stop() { count="0" echo -n $"Stopping $PROGNAME" "$SHORTNAME" - start-stop-daemon --stop --quiet --oknodo --pidfile "$PIDFILE" + jsvc -pidfile "$PIDFILE" -stop $CLASS until [ "$count" -gt "$SHUTDOWN_WAIT" ] do - agentPid=`ps aux|grep [j]ava|grep cloud-agent` + agentPid=`ps aux|grep [j]svc|grep cloud-agent` if [ "$?" -gt "0" ];then break fi @@ -119,16 +135,16 @@ stop() { let count="${count}+1" done - agentPid=`ps aux|grep [j]ava|grep cloud-agent` + agentPid=`ps aux|grep [j]svc|grep cloud-agent` if [ "$?" -eq "0" ]; then - agentPid=`ps aux|grep [j]ava|awk '{print $2}'` + agentPid=`ps aux|grep [j]svc|awk '{print $2}'` if [ "$agentPid" != "" ]; then kill -9 $agentPid fi fi - log_end_msg $? - rm -f "$PIDFILE" + log_end_msg $? + rm -f "$PIDFILE" } diff --git a/agent/libexec/agent-runner.in b/agent/libexec/agent-runner.in deleted file mode 100755 index 8e548ae78b3..00000000000 --- a/agent/libexec/agent-runner.in +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env bash -# 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. - -#run.sh runs the agent client. - -cd `dirname "$0"` - -SYSTEMJARS="@SYSTEMJARS@" -SCP=$(build-classpath $SYSTEMJARS) ; if [ $? != 0 ] ; then SCP="@SYSTEMCLASSPATH@" ; fi -DCP="@DEPSCLASSPATH@" -ACP="@AGENTCLASSPATH@" -export CLASSPATH=$SCP:$DCP:$ACP:@AGENTSYSCONFDIR@ -for jarfile in "@PREMIUMJAVADIR@"/* ; do - if [ ! -e "$jarfile" ] ; then continue ; fi - CLASSPATH=$jarfile:$CLASSPATH -done -for plugin in "@PLUGINJAVADIR@"/* ; do - if [ ! -e "$plugin" ] ; then continue ; fi - CLASSPATH=$plugin:$CLASSPATH -done -export CLASSPATH - -set -e -cd "@AGENTLIBDIR@" -echo Current directory is "$PWD" -echo CLASSPATH to run the agent: "$CLASSPATH" - -export PATH=/sbin:/usr/sbin:"$PATH" -SERVICEARGS= -for x in private public ; do - configuration=`grep "^$x.network.device" "@AGENTSYSCONFDIR@"/agent.properties||true` - if [ -n "$configuration" ] ; then - echo "Using manually-configured network device $CONFIGURATION" - else - defaultroute=`ip route | grep ^default | cut -d ' ' -f 5` - test -n "$defaultroute" - echo "Using auto-discovered network device $defaultroute which is the default route" - SERVICEARGS="$SERVICEARGS $x.network.device="$defaultroute - fi -done - -function termagent() { - if [ "$agentpid" != "" ] ; then - echo Killing VMOps Agent "(PID $agentpid)" with SIGTERM >&2 - kill -TERM $agentpid - echo Waiting for agent to exit >&2 - wait $agentpid - ex=$? - echo Agent exited with return code $ex >&2 - else - echo Agent PID is unknown >&2 - fi -} - -trap termagent TERM -while true ; do - java -Xms128M -Xmx384M -cp "$CLASSPATH" "$@" com.cloud.agent.AgentShell $SERVICEARGS & - agentpid=$! - echo "Agent started. PID: $!" >&2 - wait $agentpid - ex=$? - if [ $ex -gt 128 ]; then - echo "wait on agent process interrupted by SIGTERM" >&2 - exit $ex - fi - echo "Agent exited with return code $ex" >&2 - if [ $ex -eq 0 ] || [ $ex -eq 1 ] || [ $ex -eq 66 ] || [ $ex -gt 128 ]; then - echo "Exiting..." > /dev/stderr - exit $ex - fi - echo "Restarting agent..." > /dev/stderr - sleep 1 -done diff --git a/agent/src/com/cloud/agent/AgentShell.java b/agent/src/com/cloud/agent/AgentShell.java index 941f09498b4..ca3f7de02f4 100644 --- a/agent/src/com/cloud/agent/AgentShell.java +++ b/agent/src/com/cloud/agent/AgentShell.java @@ -27,6 +27,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.HttpURLConnection; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.Enumeration; import java.util.HashMap; @@ -371,7 +372,7 @@ public class AgentShell implements IAgentShell { return true; } - private void init(String[] args) throws ConfigurationException { + public void init(String[] args) throws ConfigurationException { final ComponentLocator locator = ComponentLocator.getLocator("agent"); @@ -383,8 +384,14 @@ public class AgentShell implements IAgentShell { } s_logger.info("Implementation Version is " + _version); + loadProperties(); parseCommand(args); + List properties = Collections.list((Enumeration)_properties.propertyNames()); + for (String property:properties){ + s_logger.debug("Found property: " + property); + } + _storage = locator.getManager(StorageComponent.class); if (_storage == null) { s_logger.info("Defaulting to using properties file for storage"); @@ -558,13 +565,10 @@ public class AgentShell implements IAgentShell { return _nextAgentId++; } - private void run(String[] args) { + public void start() { try { System.setProperty("java.net.preferIPv4Stack", "true"); - loadProperties(); - init(args); - String instance = getProperty(null, "instance"); if (instance == null) { if (Boolean.parseBoolean(getProperty(null, "developer"))) { @@ -579,7 +583,7 @@ public class AgentShell implements IAgentShell { String pidDir = getProperty(null, "piddir"); final String run = "agent." + instance + "pid"; - s_logger.debug("Checking to see if " + run + "exists."); + s_logger.debug("Checking to see if " + run + " exists."); ProcessUtil.pidCheck(pidDir, run); launchAgent(); @@ -616,22 +620,17 @@ public class AgentShell implements IAgentShell { } } - public static void main(String[] args) { - AgentShell shell = new AgentShell(); - Runtime.getRuntime().addShutdownHook(new ShutdownThread(shell)); - shell.run(args); + public void destroy() { + } - private static class ShutdownThread extends Thread { - AgentShell _shell; - - public ShutdownThread(AgentShell shell) { - this._shell = shell; - } - - @Override - public void run() { - _shell.stop(); + public static void main(String[] args) { + try { + AgentShell shell = new AgentShell(); + shell.init(args); + shell.start(); + } catch (ConfigurationException e) { + System.out.println(e.getMessage()); } } } diff --git a/daemonize/daemonize.c b/daemonize/daemonize.c deleted file mode 100644 index 0d3e392fd0f..00000000000 --- a/daemonize/daemonize.c +++ /dev/null @@ -1,351 +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. -*/ - -/* -UNIX daemonizer. Daemonizes any non-interactive console program and watches over it. -Whenever a signal is sent to this process, it halts the daemonized process as well. - -To compile: cc -o daemonize daemonize.c -Usage: ./daemonize -? -Users of this: catalina initscript -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define RUNNING_DIR "/" -#define PIDFILE "/var/run/daemonize.pid" -#define VARLOGFILE "/var/log/daemon.log" -#define PROGNAME "daemonized" -#define DEFAULTUSER "root" - -char * pidfile = PIDFILE; -char * varlogfile = VARLOGFILE; -char * progname = PROGNAME; -char * user = PROGNAME; - -void initialize_syslog(const char*pn) { - openlog(pn,LOG_PID,LOG_DAEMON); - syslog(LOG_INFO, "syslog connection opened"); -} - -void cleanup_syslog() { - syslog(LOG_INFO, "syslog connection closed"); - closelog(); -} - -int killed = 0; -int killsignal = 0; -int pidfile_fd; -int varlogfile_fd; -int uid = 0; int gid = 0; -struct passwd *creds; - -void signal_handler(sig) -int sig; -{ - killsignal = sig; - switch(sig) { - case SIGCHLD: - syslog(LOG_INFO,"sigchild signal caught"); - break; - case SIGHUP: - syslog(LOG_INFO,"hangup signal caught"); - killed = 1; - break; - case SIGTERM: - syslog(LOG_INFO,"terminate signal caught"); - killed = 1; - break; - case SIGINT: - syslog(LOG_INFO,"keyboard interrupt signal caught"); - killed = 1; - break; - } -} - -int daemonize(const char*prog_name) -{ - - char str[10]; - int i; - int bufsize=1024; char *buf = malloc(1024); - - umask( S_IWGRP | S_IROTH | S_IWOTH ); /* set newly created file permissions */ - - /* test logfile */ - varlogfile_fd=open(varlogfile,O_RDWR|O_CREAT|O_APPEND,0666); - if (varlogfile_fd == -1) { - snprintf(buf,bufsize,"Could not open output file %s -- exiting",varlogfile); perror(buf); - return 1; /* exitvalue */ - } - if (uid != 0) { - chown(varlogfile,uid,gid); - } - close(varlogfile_fd); - pidfile_fd=open(pidfile,O_RDWR|O_CREAT,0666); - if (pidfile_fd<0) { - snprintf(buf,bufsize,"The PID file %s cannot be opened -- exiting",pidfile); perror(buf); - return 2; /* exitvalue */ - } - if (lockf(pidfile_fd,F_TEST,0)==1) { - snprintf(buf,bufsize,"A daemon is already running (cannot lock PID file %s) -- exiting",pidfile); perror(buf); - return 3; /* exitvalue */ - } - close(pidfile_fd); - - if(getppid()==1) return 0; /* already a daemon */ - i=fork(); - if (i < 0) return 4; /* exitvalue */ /* fork error */ - if (i > 0) exit(0); /* parent exits */ - - /* child (daemon) continues */ - setsid(); /* obtain a new process group */ - - chdir(RUNNING_DIR); /* change running directory */ - - /* close FDs and reopen to logfile */ - for (i=getdtablesize();i>=0;--i) close(i); /* close all descriptors */ - varlogfile_fd=open(varlogfile,O_RDWR|O_APPEND,0666); dup(varlogfile_fd); dup(varlogfile_fd); /* handle standart I/O */ - initialize_syslog(prog_name); /* set up syslog */ - - /* PID file */ - pidfile_fd=open(pidfile,O_RDWR|O_CREAT,0666); - if (pidfile_fd<0) { - syslog(LOG_ERR,"The PID file %s cannot be opened (%m) -- exiting",pidfile); - return 2; /* exitvalue */ - } - if (lockf(pidfile_fd,F_TLOCK,0)<0) { - syslog(LOG_ERR,"A daemon is already running -- cannot lock PID file %s (%m) -- exiting",pidfile); - return 3; /* exitvalue */ - } - - /* first instance continues */ - - /* record pid to pidfile */ - sprintf(str,"%d\n",getpid()); - if (write(pidfile_fd,str,strlen(str)) < strlen(str)) { - syslog(LOG_ERR,"Could not write PID into PID file %s (%m) -- exiting",pidfile); - return 5; /* exitvalue */ - } - signal(SIGTSTP,SIG_IGN); /* ignore tty signals */ - signal(SIGTTOU,SIG_IGN); - signal(SIGTTIN,SIG_IGN); - signal(SIGHUP,signal_handler); /* catch hangup signal */ - signal(SIGTERM,signal_handler); /* catch kill signal */ - signal(SIGINT,signal_handler); /* catch keyboard interrupt signal */ - - return 0; -} - -void cleanup() { - cleanup_syslog(); - unlink(pidfile); - close(pidfile_fd); - close(varlogfile_fd); -} - -void usage(char * cmdname) { - fprintf (stderr, - "Usage: %s [options...] -- [command-specific arguments...]\n" - "Daemonize any program.\n" - "\n" - "Options:\n" - "\n" - " -l : log stdout/stderr to this *absolute* path (default "VARLOGFILE")\n" - " -u : setuid() to this user name before starting the program (default "DEFAULTUSER")\n" - " -p : lock and write the PID to this *absolute* path (default "PIDFILE")\n" - " -n : name the daemon assumes (default "PROGNAME")\n" - " -h: show this usage guide\n" - "\n" - "Exit status:\n" - " 0 if daemonized correctly\n" - " other if an error took place\n" - "", cmdname); - exit(0); -} - -int parse_args(int argc,char ** argv) { - int index; - int c; - -// pidfile = PIDFILE; -// varlogfile = VARLOGFILE; -// progname = PROGNAME; - - opterr = 0; - - while ((c = getopt (argc, argv, "l:p:n:u:")) != -1) - switch (c) - { - case 'l': - varlogfile = optarg; - break; - case 'p': - pidfile = optarg; - break; - case 'n': - progname = optarg; - break; - case 'u': - if (getuid() != 0) { - fprintf (stderr, "-u can only be used by root.\nSee help with -h\n", user); - exit(64); - } - user = optarg; - creds = getpwnam(user); - if (creds == NULL) { - fprintf (stderr, "User %s was not found in the user database.\nSee help with -h\n", user); - exit(63); - } - uid = creds->pw_uid; gid = creds->pw_gid; - break; -// case 'h': -// break; -// usage(argv[0]); /* halts after this */ - case '?': - if (optopt == '?' || optopt == 'h') - usage(argv[0]); /* halts after this */ - if (optopt == 'l' || optopt == 'p' || optopt == 'n') - fprintf (stderr, "Option -%c requires an argument.\nSee help with -h\n", optopt); - else if (isprint (optopt)) - fprintf (stderr, "Unknown option `-%c'.\nSee help with -h\n", optopt); - else - fprintf (stderr, "Unknown option character `\\x%x'.\nSee help with -h\n", optopt); - exit(64); /* exitvalue */ - default: - abort (); - } - - for (index = optind; index < argc; index++); - - if (index == optind) { - fprintf (stderr, "You need to specify a command to run.\nSee help with -h\n", optopt); - exit(64); /* exitvalue */ - } - - return optind; -} - -int main(int argc, char** argv) -{ - /* parse command line arguments, we will use the first non-option one as the starting point */ - int i; - char ** newargv = calloc(argc+1, sizeof(char**)); - int startat = parse_args(argc,argv); - int newargc = argc - startat; - for (i = startat; i < argc; i++) { newargv[i-startat] = argv[i]; } - - /* try and daemonize */ - int daemonret = daemonize(progname); - if (daemonret) exit(daemonret); - syslog(LOG_INFO,"successfully daemonized"); - - /* fork */ - int pid, wpid, status, execret; - syslog(LOG_INFO,"starting %s in subprocess",newargv[0]); - pid = fork(); - if (pid < 0) { - /* failed to fork, damnit! */ - syslog(LOG_ERR,"could not fork to run %s as a child process (%m)",newargv[0]); - exit(4); /* exitvalue */ - } - else if (pid == 0) { - /* child */ - if (uid != 0) { - execret = setgid(gid); - if (execret == -1) { - syslog(LOG_ERR,"could not setgid() to gid %d",gid); - exit(8); /* exitvalue */ - } - execret = setuid(uid); - if (execret == -1) { - syslog(LOG_ERR,"could not setuid() to uid %d",uid); - exit(8); /* exitvalue */ - } - } - execret = execvp(newargv[0],newargv); - if (errno == 2) { - syslog(LOG_ERR,"could not run program: no such file or directory"); - exit(127); - } - if (errno == 13) { - syslog(LOG_ERR,"could not run program: permission denied"); - exit(126); - } - syslog(LOG_ERR,"could not run program: unknown reason"); - exit(255); - } - - /* parent continues here */ - syslog(LOG_INFO,"successfully started subprocess -- PID %d",pid); - int finalexit = 0; - int waitret = 0; - while (1) { - if (killed) { - kill(pid,killsignal); - killed = 0; - } - waitret = waitpid(pid,&status,WNOHANG); - if (waitret == pid) break; - usleep(250000); - } - - - if WIFEXITED(status) { - switch (WEXITSTATUS(status)) { - case 0: - syslog(LOG_INFO,"%s exited normally",newargv[0]); - break; - case 126: - syslog(LOG_ERR,"%s: permission denied",newargv[0]); - finalexit = 126; /* exitvalue */ - break; - case 127: - syslog(LOG_ERR,"%s: command not found",newargv[0]); - finalexit = 127; /* exitvalue */ - break; - default: - syslog(LOG_INFO,"%s exited abnormally with status %d",newargv[0],WEXITSTATUS(status)); - finalexit = 6; /* exitvalue */ - } - } - if WIFSIGNALED(status) { - syslog(LOG_INFO,"%s was killed with signal %d",newargv[0],WTERMSIG(status)); - finalexit = 7; /* exitvalue */ - } - - syslog(LOG_INFO,"shutting down"); - cleanup(); - exit(finalexit); -} - -/* EOF */ - diff --git a/debian/control b/debian/control index db717a48114..56696108448 100644 --- a/debian/control +++ b/debian/control @@ -123,7 +123,7 @@ Provides: vmops-agent Conflicts: vmops-agent Replaces: vmops-agent Architecture: any -Depends: openjdk-6-jre, cloud-utils (= ${source:Version}), cloud-core (= ${source:Version}), cloud-agent-deps (= ${source:Version}), python, cloud-python (= ${source:Version}), cloud-agent-libs (= ${source:Version}), cloud-agent-scripts (= ${source:Version}), libcommons-httpclient-java, libcommons-collections-java, libcommons-dbcp-java, libcommons-pool-java, libcommons-logging-java, libvirt0, sysvinit-utils, chkconfig, qemu-kvm, libvirt-bin, uuid-runtime, rsync, grep, iproute, ebtables, vlan, libcglib-java, libcommons-httpclient-java, libservlet2.5-java, liblog4j1.2-java, libjna-java, wget +Depends: openjdk-6-jre, cloud-utils (= ${source:Version}), cloud-core (= ${source:Version}), cloud-agent-deps (= ${source:Version}), python, cloud-python (= ${source:Version}), cloud-agent-libs (= ${source:Version}), cloud-agent-scripts (= ${source:Version}), libcommons-httpclient-java, libcommons-collections-java, libcommons-dbcp-java, libcommons-pool-java, libcommons-logging-java, libvirt0, sysvinit-utils, chkconfig, qemu-kvm, libvirt-bin, uuid-runtime, rsync, grep, iproute, ebtables, vlan, libcglib-java, libcommons-httpclient-java, libservlet2.5-java, liblog4j1.2-java, libjna-java, wget, jsvc Description: CloudStack agent The CloudStack agent is in charge of managing shared computing resources in a CloudStack Cloud Stack-powered cloud. Install this package if this computer @@ -141,7 +141,7 @@ Provides: vmops-usage Conflicts: vmops-usage Replaces: vmops-usage Architecture: any -Depends: openjdk-6-jre, cloud-utils (= ${source:Version}), cloud-core (= ${source:Version}), cloud-deps (= ${source:Version}), cloud-server (= ${source:Version}), cloud-setup (= ${source:Version}), cloud-client (= ${source:Version}) +Depends: openjdk-6-jre, cloud-utils (= ${source:Version}), cloud-core (= ${source:Version}), cloud-deps (= ${source:Version}), cloud-server (= ${source:Version}), cloud-setup (= ${source:Version}), cloud-client (= ${source:Version}), jsvc Description: CloudStack usage monitor The CloudStack usage monitor provides usage accounting across the entire cloud for cloud operators to charge based on usage parameters. diff --git a/usage/distro/ubuntu/SYSCONFDIR/init.d/cloud-usage.in b/usage/distro/ubuntu/SYSCONFDIR/init.d/cloud-usage.in index e59fc2acecb..13876b94407 100755 --- a/usage/distro/ubuntu/SYSCONFDIR/init.d/cloud-usage.in +++ b/usage/distro/ubuntu/SYSCONFDIR/init.d/cloud-usage.in @@ -18,11 +18,29 @@ LOCKFILE=@LOCKDIR@/"$SHORTNAME" LOGFILE=@USAGELOG@ PROGNAME="CloudStack Usage Monitor" USER=@MSUSER@ +CLASS="com.cloud.usage.UsageServer" unset OPTIONS [ -r @SYSCONFDIR@/default/"$SHORTNAME" ] && source @SYSCONFDIR@/default/"$SHORTNAME" -DAEMONIZE=@BINDIR@/@PACKAGE@-daemonize -PROG=@LIBEXECDIR@/usage-runner + +# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not defined in $DEFAULT) +JDK_DIRS="/usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-openjdk-i386 /usr/lib/jvm/java-6-openjdk-amd64 /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm" + +for jdir in $JDK_DIRS; do + if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then + JAVA_HOME="$jdir" + fi +done +export JAVA_HOME + +SCP="@SYSTEMCLASSPATH@" +DCP="@DEPSCLASSPATH@" +UCP="@USAGECLASSPATH@" +JCP="/usr/share/java/commons-daemon.jar" + +# We need to append the JSVC daemon JAR to the classpath +# AgentShell implements the JSVC daemon methods +export CLASSPATH="$SCP:$DCP:$UCP:$JCP:@USAGESYSCONFDIR@" start() { log_daemon_msg $"Starting $PROGNAME" "$SHORTNAME" @@ -39,9 +57,7 @@ start() { exit 1 fi - if start-stop-daemon --start --quiet \ - --pidfile "$PIDFILE" \ - --exec "$DAEMONIZE" -- -n "$SHORTNAME" -p "$PIDFILE" -l "$LOGFILE" -u "$USER" "$PROG" $OPTIONS + if jsvc -cp "$CLASSPATH" -pidfile "$PIDFILE" -user "$USER" $CLASS RETVAL=$? then rc=0 @@ -64,7 +80,7 @@ start() { stop() { echo -n $"Stopping $PROGNAME" "$SHORTNAME" - start-stop-daemon --stop --quiet --oknodo --pidfile "$PIDFILE" + jsvc -pidfile "$PIDFILE" -stop $CLASS log_end_msg $? rm -f "$PIDFILE" } diff --git a/usage/libexec/usage-runner.in b/usage/libexec/usage-runner.in deleted file mode 100755 index a5d57efc9e3..00000000000 --- a/usage/libexec/usage-runner.in +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -# 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 -# 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. - -SYSTEMJARS="@SYSTEMJARS@" -SCP=$(build-classpath $SYSTEMJARS) ; if [ $? != 0 ] ; then SCP="@SYSTEMCLASSPATH@" ; fi -DCP="@DEPSCLASSPATH@" -ACP="@USAGECLASSPATH@" -export CLASSPATH=$SCP:$DCP:$ACP:@USAGESYSCONFDIR@ -for jarfile in "@PREMIUMJAVADIR@"/* ; do - if [ ! -e "$jarfile" ] ; then continue ; fi - CLASSPATH=$jarfile:$CLASSPATH -done -for plugin in "@PLUGINJAVADIR@"/* ; do - if [ ! -e "$plugin" ] ; then continue ; fi - CLASSPATH=$plugin:$CLASSPATH -done -export CLASSPATH - -set -e -echo Current directory is "$PWD" -echo CLASSPATH to run the usage server: "$CLASSPATH" -exec java -cp "$CLASSPATH" -Dpid=$$ -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=@USAGELOGDIR@ "$@" com.cloud.usage.UsageServer diff --git a/usage/src/com/cloud/usage/UsageServer.java b/usage/src/com/cloud/usage/UsageServer.java index c03f7f0efa1..4cdca7986c2 100644 --- a/usage/src/com/cloud/usage/UsageServer.java +++ b/usage/src/com/cloud/usage/UsageServer.java @@ -28,7 +28,16 @@ public class UsageServer { * @param args */ public static void main(String[] args) { - // TODO: do we need to communicate with mgmt server? + UsageServer usage = new UsageServer(); + usage.init(args); + usage.start(); + } + + public void init(String[] args) { + + } + + public void start() { final ComponentLocator _locator = ComponentLocator.getLocator(UsageServer.Name, "usage-components.xml", "log4j-cloud_usage"); UsageManager mgr = _locator.getManager(UsageManager.class); if (mgr != null) { @@ -37,4 +46,12 @@ public class UsageServer { } } } + + public void stop() { + + } + + public void destroy() { + + } } From a1d53f288b56d2852b698b9ee49488fed6b5d231 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Tue, 24 Jul 2012 20:11:18 +0200 Subject: [PATCH 08/31] libvirt: Replace the libvirt bindings with upstream 0.4.8 Although these bindings have to be removed for the first Apache release we place the upstream JAR here. The 0.4.5 bindings were homebrew and contained own code which wasn't sent upstream. These changes were sent upstream and got into 0.4.8. For now we keep the 0.4.8 bindings in the repo until we have a new build system in place which handles this. This is still however a release blocker since we can't distribute these bindings from the Apache servers! --- build/package.xml | 2 +- debian/cloud-agent-deps.install | 2 +- deps/.classpath | 2 +- ...ud-libvirt-0.4.5.jar => libvirt-0.4.8.jar} | Bin 68899 -> 70122 bytes 4 files changed, 3 insertions(+), 3 deletions(-) rename deps/{cloud-libvirt-0.4.5.jar => libvirt-0.4.8.jar} (63%) diff --git a/build/package.xml b/build/package.xml index d61c6983609..30dde943acc 100755 --- a/build/package.xml +++ b/build/package.xml @@ -82,7 +82,7 @@ - + diff --git a/debian/cloud-agent-deps.install b/debian/cloud-agent-deps.install index 57122ac8ffc..13c444ec96d 100644 --- a/debian/cloud-agent-deps.install +++ b/debian/cloud-agent-deps.install @@ -1,3 +1,3 @@ /usr/share/java/cloud-google-gson-1.7.1.jar -/usr/share/java/cloud-libvirt-0.4.5.jar +/usr/share/java/libvirt-0.4.8.jar /usr/share/java/cloud-log4j-extras.jar diff --git a/deps/.classpath b/deps/.classpath index b9eb504b959..0ae345797a1 100755 --- a/deps/.classpath +++ b/deps/.classpath @@ -15,7 +15,7 @@ - + diff --git a/deps/cloud-libvirt-0.4.5.jar b/deps/libvirt-0.4.8.jar similarity index 63% rename from deps/cloud-libvirt-0.4.5.jar rename to deps/libvirt-0.4.8.jar index 9d0a1dfbe609c5a428071eccec25a4565cbcf9d4..3a30a1ae551406a565263e5dadb3d17fa6500171 100644 GIT binary patch delta 18349 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 RPYA&Gr~q>K=F>k;{XhSo&rJXT delta 17303 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 From e13a7a838794063ec3fd74dbc71dfe99a47e2f91 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 24 Jul 2012 11:56:11 -0700 Subject: [PATCH 09/31] Revert "CS-15572 : StartIndex handled incorrectly when switching between the various Filter by options while listing ISOs in the UI" This was reverted, as another commit fixed the issue already: commit 2b2e491f27a1485338557a775e5c21179a19b32b Author: bfederle Date: Tue Jul 17 11:38:56 2012 -0700 CS-15572: Fix page index for list view filters This reverts commit 374be31b63f6ea0f835495933730358380745a56. --- ui/scripts/ui/widgets/listView.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ui/scripts/ui/widgets/listView.js b/ui/scripts/ui/widgets/listView.js index b9f7cc6d173..087f5401d3d 100644 --- a/ui/scripts/ui/widgets/listView.js +++ b/ui/scripts/ui/widgets/listView.js @@ -1261,10 +1261,6 @@ return true; }); - $listView.find('#filterBy').bind('click',function(event) { - page = 1; //Handling the case to display more than 20 entities on a page while switching between panels - return page; - }); var search = function() { page = 1; loadBody( From 8e1b8d1f56856ac5392f6c2711d24899f7a90026 Mon Sep 17 00:00:00 2001 From: bfederle Date: Mon, 23 Jul 2012 15:05:00 -0700 Subject: [PATCH 10/31] Implement tags for project detail view --- ui/scripts/projects.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ui/scripts/projects.js b/ui/scripts/projects.js index 6a99939d45b..2ece194e014 100644 --- a/ui/scripts/projects.js +++ b/ui/scripts/projects.js @@ -756,6 +756,7 @@ } } }, + tabFilter: function(args) { var project = args.context.projects[0]; var projectOwner = project.account; @@ -791,6 +792,9 @@ state: { label: 'label.state' } } ], + + tags: cloudStack.api.tags({ resourceType: 'Project', contextId: 'projects' }), + dataProvider: function(args) { var projectID = args.context.projects[0].id; From 7a2be05c245a50dfab9a1df27969ef146b435dc1 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 24 Jul 2012 11:16:43 -0700 Subject: [PATCH 11/31] Pass projectId to listTags, when viewing a project resource --- ui/scripts/sharedFunctions.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js index 55d014ba429..535df56ce4a 100644 --- a/ui/scripts/sharedFunctions.js +++ b/ui/scripts/sharedFunctions.js @@ -675,14 +675,18 @@ cloudStack.api = { }, dataProvider: function(args) { var resourceId = args.context[contextId][0].id; + var data = { + resourceId: resourceId, + resourceType: resourceType + }; + + if (args.context.projects) { + data.projectid=args.context.projects[0].id; + } $.ajax({ url: createURL('listTags'), - data: { - listAll: true, - resourceId: resourceId, - resourceType: resourceType - }, + data: data, success: function(json) { args.response.success({ data: json.listtagsresponse ? From 874536a7683e6fbd8f74ea76eea91edf04e5d798 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 24 Jul 2012 11:21:58 -0700 Subject: [PATCH 12/31] Always make tags editable --- ui/scripts/ui/widgets/detailView.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ui/scripts/ui/widgets/detailView.js b/ui/scripts/ui/widgets/detailView.js index 4c7448eba1a..c0147915d89 100644 --- a/ui/scripts/ui/widgets/detailView.js +++ b/ui/scripts/ui/widgets/detailView.js @@ -306,7 +306,6 @@ $detailView.find('.ui-tabs-panel .detail-group.actions') ).fadeIn(); - $detailView.find('.tagger').removeClass('readonly'); $detailView.find('.tagger').find('input[type=text]').val(''); var convertInputs = function($inputs) { @@ -350,8 +349,6 @@ } //Remove required labels $detailView.find('span.field-required').remove(); - $detailView.find('.tagger').addClass('readonly'); - }; // Put in original values @@ -965,7 +962,7 @@ $.extend(true, {}, tabs.tags, { context: $detailView.data('view-args').context }) - ).appendTo($detailView.find('.main-groups')).addClass('readonly'); + ).appendTo($detailView.find('.main-groups')); } return true; From 53cc0a953da82d3c02f6a6a4640e5f5c8cb90ba9 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 24 Jul 2012 11:49:55 -0700 Subject: [PATCH 13/31] multiEdit: Pass context to tagger widget --- ui/scripts/ui/widgets/multiEdit.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ui/scripts/ui/widgets/multiEdit.js b/ui/scripts/ui/widgets/multiEdit.js index 89d260300eb..8f288d62ab2 100644 --- a/ui/scripts/ui/widgets/multiEdit.js +++ b/ui/scripts/ui/widgets/multiEdit.js @@ -339,7 +339,11 @@ if (options.tags) { $(':ui-dialog').append( - $('

').addClass('multi-edit-tags').tagger(options.tags) + $('
').addClass('multi-edit-tags').tagger($.extend(true, {}, options.tags, { + context: $.extend(true, {}, options.context, { + multiRule: [multiRule] + }) + })) ); } } From 17ac3a7e3e033a82cbf1fef8ab1292099b4508df Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 24 Jul 2012 11:50:10 -0700 Subject: [PATCH 14/31] Add tag edit to LB rule --- ui/scripts/network.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ui/scripts/network.js b/ui/scripts/network.js index ed621d07092..56a22818666 100644 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -2014,6 +2014,9 @@ addButton: true } }, + + tags: cloudStack.api.tags({ resourceType: 'LoadBalancer', contextId: 'multiRule' }), + add: { label: 'label.add.vms', action: function(args) { From 06101ea27ea5668c37c2b584e32f00cf21ed6692 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 24 Jul 2012 12:12:09 -0700 Subject: [PATCH 15/31] Add tags to edit PF dialog --- ui/scripts/network.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/ui/scripts/network.js b/ui/scripts/network.js index 56a22818666..96446dfd2c4 100644 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -2414,6 +2414,9 @@ addButton: true } }, + + tags: cloudStack.api.tags({ resourceType: 'PortForwardingRule', contextId: 'multiRule' }), + add: { label: 'label.add.vm', action: function(args) { @@ -2447,6 +2450,19 @@ } }, actions: { + edit: { + label: 'label.edit', + + // Blank -- edit is just for tags right now + action: function(args) { + args.response.success({ + notification: { + label: 'label.edit.pf', + poll: function(args) { args.complete(); } + } + }); + } + }, destroy: { label: 'label.remove.pf', action: function(args) { From a924eb196f907af2cc21a77c915f53a3d889bd35 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 24 Jul 2012 12:18:41 -0700 Subject: [PATCH 16/31] Fix tag notification messages --- ui/scripts/sharedFunctions.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js index 535df56ce4a..12d3498350c 100644 --- a/ui/scripts/sharedFunctions.js +++ b/ui/scripts/sharedFunctions.js @@ -641,7 +641,7 @@ cloudStack.api = { args.response.success({ _custom: { jobId: json.createtagsresponse.jobid }, notification: { - desc: 'Add tag for instance', + desc: 'Add tag for ' + resourceType, poll: pollAsyncJobResult } }); @@ -665,7 +665,7 @@ cloudStack.api = { args.response.success({ _custom: { jobId: json.deletetagsresponse.jobid }, notification: { - desc: 'Remove tag for instance', + desc: 'Remove tag for ' + resourceType, poll: pollAsyncJobResult } }); From 7d0338bd8216a30feeca3eec6a63a7f52459269a Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Tue, 24 Jul 2012 11:55:02 -0700 Subject: [PATCH 17/31] listPublicIpAddresses: when do join with nics table, count only non-removed nics Conflicts: server/src/com/cloud/server/ManagementServerImpl.java --- server/src/com/cloud/server/ManagementServerImpl.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 047305ed249..bcdafa98cef 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -1765,11 +1765,6 @@ public class ManagementServerImpl implements ManagementServer { vlanType = VlanType.VirtualNetwork; } - // don't show SSVM/CPVM ips - if (vlanType == VlanType.VirtualNetwork && (allocatedOnly)) { - sb.and("associatedNetworkId", sb.entity().getAssociatedWithNetworkId(), SearchCriteria.Op.NNULL); - } - SearchCriteria sc = sb.create(); if (isAllocated) { _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); From 766a17b3efd1b7dc48cffa22143e13b684bc1845 Mon Sep 17 00:00:00 2001 From: Hugo Trippaers Date: Tue, 24 Jul 2012 15:47:40 -0400 Subject: [PATCH 18/31] Typo in components.xml.in --- client/tomcatconf/components.xml.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in index 16d7b198367..dde986b2881 100755 --- a/client/tomcatconf/components.xml.in +++ b/client/tomcatconf/components.xml.in @@ -166,7 +166,7 @@ - + From 576d093e9cf267c01d43f845a715bb2fd685f43f Mon Sep 17 00:00:00 2001 From: Edison Su Date: Tue, 24 Jul 2012 13:44:55 -0700 Subject: [PATCH 19/31] fix CS-15432 Failed to detach VMware tools ISO after VMware tools installation RB: https://reviews.apache.org/r/5738/ Send-by: mice_xia@tcloudcomputing.com --- .../cloud/hypervisor/vmware/resource/VmwareResource.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index a8c61f6fad8..685a321bcca 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -2465,7 +2465,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if (cmd.isAttach()) { vmMo.mountToolsInstaller(); } else { - vmMo.unmountToolsInstaller(); + try{ + vmMo.unmountToolsInstaller(); + }catch(Throwable e){ + vmMo.detachIso(null); + } } return new Answer(cmd); From b7d4e5431794b2392f35e3736c63d1a8644e1b0c Mon Sep 17 00:00:00 2001 From: Edison Su Date: Tue, 24 Jul 2012 14:07:07 -0700 Subject: [PATCH 20/31] Using the CloudApi didn't work as parms and self were passed on as part of the request. Making parms a copy of the locals() dict will prevent it from being changed later on. RB: https://reviews.apache.org/r/5828/ Send-by: htrippaers@schubergphilis.com --- cloud-cli/cloudapis/cloud.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloud-cli/cloudapis/cloud.py b/cloud-cli/cloudapis/cloud.py index 856d81177d3..34b3413ce5e 100644 --- a/cloud-cli/cloudapis/cloud.py +++ b/cloud-cli/cloudapis/cloud.py @@ -167,7 +167,7 @@ def load_dynamic_methods(): code = """ def %s(%s): %s - parms = locals() + parms = dict(locals()) del parms["self"] for arg in %r: if locals()[arg] is None: From 8dfaa76d87c26aa7bf26968b5b047e835c7c0343 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Tue, 24 Jul 2012 23:56:08 +0200 Subject: [PATCH 21/31] Fix for the Ubuntu Agent init script. The last commit didn't use some tokens, revert that --- agent/distro/ubuntu/SYSCONFDIR/init.d/cloud-agent.in | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/agent/distro/ubuntu/SYSCONFDIR/init.d/cloud-agent.in b/agent/distro/ubuntu/SYSCONFDIR/init.d/cloud-agent.in index e2bbdb68a79..4f6f04dd4d7 100755 --- a/agent/distro/ubuntu/SYSCONFDIR/init.d/cloud-agent.in +++ b/agent/distro/ubuntu/SYSCONFDIR/init.d/cloud-agent.in @@ -36,14 +36,14 @@ whatami=cloud-agent # set environment variables SHORTNAME="$whatami" -PIDFILE=/var/run/"$whatami".pid -LOCKFILE=/var/lock/subsys/"$SHORTNAME" -LOGFILE=/var/log/cloud/agent/agent.log +PIDFILE=@PIDDIR@/"$whatami".pid +LOCKFILE=@LOCKDIR@/"$SHORTNAME" +LOGFILE=@AGENTLOG@ PROGNAME="Cloud Agent" CLASS="com.cloud.agent.AgentShell" unset OPTIONS -[ -r /etc/default/"$SHORTNAME" ] && source /etc/default/"$SHORTNAME" +[ -r @SYSCONFDIR@/default/"$SHORTNAME" ] && source @SYSCONFDIR@/default/"$SHORTNAME" # The first existing directory is used for JAVA_HOME (if JAVA_HOME is not defined in $DEFAULT) JDK_DIRS="/usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-openjdk-i386 /usr/lib/jvm/java-6-openjdk-amd64 /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm" From 5c5a4e3a10b9ab2c54ce507962cdf73fa62957d1 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Tue, 24 Jul 2012 23:59:37 +0200 Subject: [PATCH 22/31] Modify the other Agent init scripts so they use JSVC as well --- .../SYSCONFDIR/rc.d/init.d/cloud-agent.in | 27 ++++++++-- .../SYSCONFDIR/rc.d/init.d/cloud-agent.in | 27 ++++++++-- .../sles/SYSCONFDIR/init.d/cloud-agent.in | 51 ++++++++++++------- .../SYSCONFDIR/rc.d/init.d/cloud-agent.in | 27 ++++++++-- .../sles/SYSCONFDIR/init.d/cloud-agent.in | 51 ++++++++++++------- 5 files changed, 134 insertions(+), 49 deletions(-) diff --git a/agent/distro/centos/SYSCONFDIR/rc.d/init.d/cloud-agent.in b/agent/distro/centos/SYSCONFDIR/rc.d/init.d/cloud-agent.in index d98d6e23bc4..488ced2fa90 100755 --- a/agent/distro/centos/SYSCONFDIR/rc.d/init.d/cloud-agent.in +++ b/agent/distro/centos/SYSCONFDIR/rc.d/init.d/cloud-agent.in @@ -33,17 +33,34 @@ PIDFILE=@PIDDIR@/"$whatami".pid LOCKFILE=@LOCKDIR@/"$SHORTNAME" LOGFILE=@AGENTLOG@ PROGNAME="Cloud Agent" +CLASS="com.cloud.agent.AgentShell" unset OPTIONS [ -r @SYSCONFDIR@/sysconfig/"$SHORTNAME" ] && source @SYSCONFDIR@/sysconfig/"$SHORTNAME" -DAEMONIZE=@BINDIR@/@PACKAGE@-daemonize -PROG=@LIBEXECDIR@/agent-runner + +# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not defined in $DEFAULT) +JDK_DIRS="/usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-openjdk-i386 /usr/lib/jvm/java-6-openjdk-amd64 /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm" + +for jdir in $JDK_DIRS; do + if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then + JAVA_HOME="$jdir" + fi +done +export JAVA_HOME + +SCP="@SYSTEMCLASSPATH@" +DCP="@DEPSCLASSPATH@" +ACP="@AGENTCLASSPATH@" +JCP="/usr/share/java/commons-daemon.jar" + +# We need to append the JSVC daemon JAR to the classpath +# AgentShell implements the JSVC daemon methods +export CLASSPATH="$SCP:$DCP:$ACP:$JCP:@AGENTSYSCONFDIR@" start() { echo -n $"Starting $PROGNAME: " if hostname --fqdn >/dev/null 2>&1 ; then - daemon --check=$SHORTNAME --pidfile=${PIDFILE} "$DAEMONIZE" \ - -n "$SHORTNAME" -p "$PIDFILE" -l "$LOGFILE" "$PROG" $OPTIONS + jsvc -cp "$CLASSPATH" -pidfile "$PIDFILE" $CLASS RETVAL=$? echo else @@ -58,7 +75,7 @@ start() { stop() { echo -n $"Stopping $PROGNAME: " - killproc -p ${PIDFILE} $SHORTNAME # -d 10 $SHORTNAME + jsvc -pidfile "$PIDFILE" -stop $CLASS RETVAL=$? echo [ $RETVAL = 0 ] && rm -f ${LOCKFILE} ${PIDFILE} diff --git a/agent/distro/fedora/SYSCONFDIR/rc.d/init.d/cloud-agent.in b/agent/distro/fedora/SYSCONFDIR/rc.d/init.d/cloud-agent.in index d98d6e23bc4..488ced2fa90 100755 --- a/agent/distro/fedora/SYSCONFDIR/rc.d/init.d/cloud-agent.in +++ b/agent/distro/fedora/SYSCONFDIR/rc.d/init.d/cloud-agent.in @@ -33,17 +33,34 @@ PIDFILE=@PIDDIR@/"$whatami".pid LOCKFILE=@LOCKDIR@/"$SHORTNAME" LOGFILE=@AGENTLOG@ PROGNAME="Cloud Agent" +CLASS="com.cloud.agent.AgentShell" unset OPTIONS [ -r @SYSCONFDIR@/sysconfig/"$SHORTNAME" ] && source @SYSCONFDIR@/sysconfig/"$SHORTNAME" -DAEMONIZE=@BINDIR@/@PACKAGE@-daemonize -PROG=@LIBEXECDIR@/agent-runner + +# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not defined in $DEFAULT) +JDK_DIRS="/usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-openjdk-i386 /usr/lib/jvm/java-6-openjdk-amd64 /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm" + +for jdir in $JDK_DIRS; do + if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then + JAVA_HOME="$jdir" + fi +done +export JAVA_HOME + +SCP="@SYSTEMCLASSPATH@" +DCP="@DEPSCLASSPATH@" +ACP="@AGENTCLASSPATH@" +JCP="/usr/share/java/commons-daemon.jar" + +# We need to append the JSVC daemon JAR to the classpath +# AgentShell implements the JSVC daemon methods +export CLASSPATH="$SCP:$DCP:$ACP:$JCP:@AGENTSYSCONFDIR@" start() { echo -n $"Starting $PROGNAME: " if hostname --fqdn >/dev/null 2>&1 ; then - daemon --check=$SHORTNAME --pidfile=${PIDFILE} "$DAEMONIZE" \ - -n "$SHORTNAME" -p "$PIDFILE" -l "$LOGFILE" "$PROG" $OPTIONS + jsvc -cp "$CLASSPATH" -pidfile "$PIDFILE" $CLASS RETVAL=$? echo else @@ -58,7 +75,7 @@ start() { stop() { echo -n $"Stopping $PROGNAME: " - killproc -p ${PIDFILE} $SHORTNAME # -d 10 $SHORTNAME + jsvc -pidfile "$PIDFILE" -stop $CLASS RETVAL=$? echo [ $RETVAL = 0 ] && rm -f ${LOCKFILE} ${PIDFILE} diff --git a/agent/distro/opensuse/sles/SYSCONFDIR/init.d/cloud-agent.in b/agent/distro/opensuse/sles/SYSCONFDIR/init.d/cloud-agent.in index 4046d225258..4f6f04dd4d7 100644 --- a/agent/distro/opensuse/sles/SYSCONFDIR/init.d/cloud-agent.in +++ b/agent/distro/opensuse/sles/SYSCONFDIR/init.d/cloud-agent.in @@ -1,8 +1,8 @@ #!/bin/bash ### BEGIN INIT INFO # Provides: cloud agent -# Required-Start: $network -# Required-Stop: $network +# Required-Start: $network +# Required-Stop: $network # Default-Start: 3 4 5 # Default-Stop: 0 1 2 6 # X-Interactive: true @@ -29,7 +29,7 @@ # WARNING: if this script is changed, then all other initscripts MUST BE changed to match it as well . /lib/lsb/init-functions -. /etc/rc.status +. /etc/default/rcS whatami=cloud-agent @@ -40,17 +40,37 @@ PIDFILE=@PIDDIR@/"$whatami".pid LOCKFILE=@LOCKDIR@/"$SHORTNAME" LOGFILE=@AGENTLOG@ PROGNAME="Cloud Agent" +CLASS="com.cloud.agent.AgentShell" unset OPTIONS [ -r @SYSCONFDIR@/default/"$SHORTNAME" ] && source @SYSCONFDIR@/default/"$SHORTNAME" -DAEMONIZE=@BINDIR@/@PACKAGE@-daemonize -PROG=@LIBEXECDIR@/agent-runner + +# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not defined in $DEFAULT) +JDK_DIRS="/usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-openjdk-i386 /usr/lib/jvm/java-6-openjdk-amd64 /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm" + +for jdir in $JDK_DIRS; do + if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then + JAVA_HOME="$jdir" + fi +done +export JAVA_HOME + +SCP="@SYSTEMCLASSPATH@" +DCP="@DEPSCLASSPATH@" +ACP="@AGENTCLASSPATH@" +JCP="/usr/share/java/commons-daemon.jar" + +# We need to append the JSVC daemon JAR to the classpath +# AgentShell implements the JSVC daemon methods +export CLASSPATH="$SCP:$DCP:$ACP:$JCP:@AGENTSYSCONFDIR@" wait_for_network() { i=1 while [ $i -lt 10 ] do - if ip addr show cloudbr0 |grep -w inet > /dev/null 2>&1; then + # Under Ubuntu and Debian libvirt by default creates a bridge called virbr0. + # That's why we want more then 3 lines back from brctl, so that there is a manually created bridge + if [ "$(brctl show|wc -l)" -gt 2 ]; then break else sleep 1 @@ -75,12 +95,9 @@ start() { exit 1 fi - #FIXME: wait for network - wait_for_network + wait_for_network - if start-stop-daemon --start --quiet \ - --pidfile "$PIDFILE" \ - --exec "$DAEMONIZE" -- -n "$SHORTNAME" -p "$PIDFILE" -l "$LOGFILE" "$PROG" $OPTIONS + if jsvc -cp "$CLASSPATH" -pidfile "$PIDFILE" $CLASS RETVAL=$? then rc=0 @@ -106,11 +123,11 @@ stop() { count="0" echo -n $"Stopping $PROGNAME" "$SHORTNAME" - start-stop-daemon --stop --quiet --oknodo --pidfile "$PIDFILE" + jsvc -pidfile "$PIDFILE" -stop $CLASS until [ "$count" -gt "$SHUTDOWN_WAIT" ] do - agentPid=`ps aux|grep [j]ava|grep cloud-agent` + agentPid=`ps aux|grep [j]svc|grep cloud-agent` if [ "$?" -gt "0" ];then break fi @@ -118,16 +135,16 @@ stop() { let count="${count}+1" done - agentPid=`ps aux|grep [j]ava|grep cloud-agent` + agentPid=`ps aux|grep [j]svc|grep cloud-agent` if [ "$?" -eq "0" ]; then - agentPid=`ps aux|grep [j]ava|awk '{print $2}'` + agentPid=`ps aux|grep [j]svc|awk '{print $2}'` if [ "$agentPid" != "" ]; then kill -9 $agentPid fi fi - log_end_msg $? - rm -f "$PIDFILE" + log_end_msg $? + rm -f "$PIDFILE" } diff --git a/agent/distro/rhel/SYSCONFDIR/rc.d/init.d/cloud-agent.in b/agent/distro/rhel/SYSCONFDIR/rc.d/init.d/cloud-agent.in index d98d6e23bc4..488ced2fa90 100644 --- a/agent/distro/rhel/SYSCONFDIR/rc.d/init.d/cloud-agent.in +++ b/agent/distro/rhel/SYSCONFDIR/rc.d/init.d/cloud-agent.in @@ -33,17 +33,34 @@ PIDFILE=@PIDDIR@/"$whatami".pid LOCKFILE=@LOCKDIR@/"$SHORTNAME" LOGFILE=@AGENTLOG@ PROGNAME="Cloud Agent" +CLASS="com.cloud.agent.AgentShell" unset OPTIONS [ -r @SYSCONFDIR@/sysconfig/"$SHORTNAME" ] && source @SYSCONFDIR@/sysconfig/"$SHORTNAME" -DAEMONIZE=@BINDIR@/@PACKAGE@-daemonize -PROG=@LIBEXECDIR@/agent-runner + +# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not defined in $DEFAULT) +JDK_DIRS="/usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-openjdk-i386 /usr/lib/jvm/java-6-openjdk-amd64 /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm" + +for jdir in $JDK_DIRS; do + if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then + JAVA_HOME="$jdir" + fi +done +export JAVA_HOME + +SCP="@SYSTEMCLASSPATH@" +DCP="@DEPSCLASSPATH@" +ACP="@AGENTCLASSPATH@" +JCP="/usr/share/java/commons-daemon.jar" + +# We need to append the JSVC daemon JAR to the classpath +# AgentShell implements the JSVC daemon methods +export CLASSPATH="$SCP:$DCP:$ACP:$JCP:@AGENTSYSCONFDIR@" start() { echo -n $"Starting $PROGNAME: " if hostname --fqdn >/dev/null 2>&1 ; then - daemon --check=$SHORTNAME --pidfile=${PIDFILE} "$DAEMONIZE" \ - -n "$SHORTNAME" -p "$PIDFILE" -l "$LOGFILE" "$PROG" $OPTIONS + jsvc -cp "$CLASSPATH" -pidfile "$PIDFILE" $CLASS RETVAL=$? echo else @@ -58,7 +75,7 @@ start() { stop() { echo -n $"Stopping $PROGNAME: " - killproc -p ${PIDFILE} $SHORTNAME # -d 10 $SHORTNAME + jsvc -pidfile "$PIDFILE" -stop $CLASS RETVAL=$? echo [ $RETVAL = 0 ] && rm -f ${LOCKFILE} ${PIDFILE} diff --git a/agent/distro/sles/SYSCONFDIR/init.d/cloud-agent.in b/agent/distro/sles/SYSCONFDIR/init.d/cloud-agent.in index 4046d225258..4f6f04dd4d7 100644 --- a/agent/distro/sles/SYSCONFDIR/init.d/cloud-agent.in +++ b/agent/distro/sles/SYSCONFDIR/init.d/cloud-agent.in @@ -1,8 +1,8 @@ #!/bin/bash ### BEGIN INIT INFO # Provides: cloud agent -# Required-Start: $network -# Required-Stop: $network +# Required-Start: $network +# Required-Stop: $network # Default-Start: 3 4 5 # Default-Stop: 0 1 2 6 # X-Interactive: true @@ -29,7 +29,7 @@ # WARNING: if this script is changed, then all other initscripts MUST BE changed to match it as well . /lib/lsb/init-functions -. /etc/rc.status +. /etc/default/rcS whatami=cloud-agent @@ -40,17 +40,37 @@ PIDFILE=@PIDDIR@/"$whatami".pid LOCKFILE=@LOCKDIR@/"$SHORTNAME" LOGFILE=@AGENTLOG@ PROGNAME="Cloud Agent" +CLASS="com.cloud.agent.AgentShell" unset OPTIONS [ -r @SYSCONFDIR@/default/"$SHORTNAME" ] && source @SYSCONFDIR@/default/"$SHORTNAME" -DAEMONIZE=@BINDIR@/@PACKAGE@-daemonize -PROG=@LIBEXECDIR@/agent-runner + +# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not defined in $DEFAULT) +JDK_DIRS="/usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-openjdk-i386 /usr/lib/jvm/java-6-openjdk-amd64 /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm" + +for jdir in $JDK_DIRS; do + if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then + JAVA_HOME="$jdir" + fi +done +export JAVA_HOME + +SCP="@SYSTEMCLASSPATH@" +DCP="@DEPSCLASSPATH@" +ACP="@AGENTCLASSPATH@" +JCP="/usr/share/java/commons-daemon.jar" + +# We need to append the JSVC daemon JAR to the classpath +# AgentShell implements the JSVC daemon methods +export CLASSPATH="$SCP:$DCP:$ACP:$JCP:@AGENTSYSCONFDIR@" wait_for_network() { i=1 while [ $i -lt 10 ] do - if ip addr show cloudbr0 |grep -w inet > /dev/null 2>&1; then + # Under Ubuntu and Debian libvirt by default creates a bridge called virbr0. + # That's why we want more then 3 lines back from brctl, so that there is a manually created bridge + if [ "$(brctl show|wc -l)" -gt 2 ]; then break else sleep 1 @@ -75,12 +95,9 @@ start() { exit 1 fi - #FIXME: wait for network - wait_for_network + wait_for_network - if start-stop-daemon --start --quiet \ - --pidfile "$PIDFILE" \ - --exec "$DAEMONIZE" -- -n "$SHORTNAME" -p "$PIDFILE" -l "$LOGFILE" "$PROG" $OPTIONS + if jsvc -cp "$CLASSPATH" -pidfile "$PIDFILE" $CLASS RETVAL=$? then rc=0 @@ -106,11 +123,11 @@ stop() { count="0" echo -n $"Stopping $PROGNAME" "$SHORTNAME" - start-stop-daemon --stop --quiet --oknodo --pidfile "$PIDFILE" + jsvc -pidfile "$PIDFILE" -stop $CLASS until [ "$count" -gt "$SHUTDOWN_WAIT" ] do - agentPid=`ps aux|grep [j]ava|grep cloud-agent` + agentPid=`ps aux|grep [j]svc|grep cloud-agent` if [ "$?" -gt "0" ];then break fi @@ -118,16 +135,16 @@ stop() { let count="${count}+1" done - agentPid=`ps aux|grep [j]ava|grep cloud-agent` + agentPid=`ps aux|grep [j]svc|grep cloud-agent` if [ "$?" -eq "0" ]; then - agentPid=`ps aux|grep [j]ava|awk '{print $2}'` + agentPid=`ps aux|grep [j]svc|awk '{print $2}'` if [ "$agentPid" != "" ]; then kill -9 $agentPid fi fi - log_end_msg $? - rm -f "$PIDFILE" + log_end_msg $? + rm -f "$PIDFILE" } From fb16545510a8664920fa6e35a18b4526d4bd39d4 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Wed, 25 Jul 2012 00:02:42 +0200 Subject: [PATCH 23/31] Fix include location for the SUSE init script. --- agent/distro/opensuse/sles/SYSCONFDIR/init.d/cloud-agent.in | 2 +- agent/distro/sles/SYSCONFDIR/init.d/cloud-agent.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/agent/distro/opensuse/sles/SYSCONFDIR/init.d/cloud-agent.in b/agent/distro/opensuse/sles/SYSCONFDIR/init.d/cloud-agent.in index 4f6f04dd4d7..01606c72a0d 100644 --- a/agent/distro/opensuse/sles/SYSCONFDIR/init.d/cloud-agent.in +++ b/agent/distro/opensuse/sles/SYSCONFDIR/init.d/cloud-agent.in @@ -29,7 +29,7 @@ # WARNING: if this script is changed, then all other initscripts MUST BE changed to match it as well . /lib/lsb/init-functions -. /etc/default/rcS +. /etc/rc.status whatami=cloud-agent diff --git a/agent/distro/sles/SYSCONFDIR/init.d/cloud-agent.in b/agent/distro/sles/SYSCONFDIR/init.d/cloud-agent.in index 4f6f04dd4d7..01606c72a0d 100644 --- a/agent/distro/sles/SYSCONFDIR/init.d/cloud-agent.in +++ b/agent/distro/sles/SYSCONFDIR/init.d/cloud-agent.in @@ -29,7 +29,7 @@ # WARNING: if this script is changed, then all other initscripts MUST BE changed to match it as well . /lib/lsb/init-functions -. /etc/default/rcS +. /etc/rc.status whatami=cloud-agent From e5f0799b7a9dcc635480d3f58f4332ebfbf77492 Mon Sep 17 00:00:00 2001 From: Edison Su Date: Tue, 24 Jul 2012 15:03:58 -0700 Subject: [PATCH 24/31] CS-15048: Log rotation functionality in system VMs is broken resuting in 100% of disk space getting consumed. RB: https://reviews.apache.org/r/5907/ Send-by: saksham.srivastava@citrix.com --- .../production/server/conf/log4j-cloud.xml | 48 ++++++++++++++----- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/build/deploy/production/server/conf/log4j-cloud.xml b/build/deploy/production/server/conf/log4j-cloud.xml index 1b5639641e8..83692bbbbd6 100755 --- a/build/deploy/production/server/conf/log4j-cloud.xml +++ b/build/deploy/production/server/conf/log4j-cloud.xml @@ -24,19 +24,41 @@ - - + + - - - - - + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + @@ -101,7 +123,9 @@ - + + + From 2ec005c6282090e4af1a6e17db167ff09efa3d70 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 24 Jul 2012 13:57:24 -0700 Subject: [PATCH 25/31] Fix tag widget being appended to all dialogs --- ui/scripts/ui/widgets/multiEdit.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/scripts/ui/widgets/multiEdit.js b/ui/scripts/ui/widgets/multiEdit.js index 8f288d62ab2..140b889a76b 100644 --- a/ui/scripts/ui/widgets/multiEdit.js +++ b/ui/scripts/ui/widgets/multiEdit.js @@ -338,7 +338,7 @@ }); if (options.tags) { - $(':ui-dialog').append( + $(':ui-dialog:last').append( $('
').addClass('multi-edit-tags').tagger($.extend(true, {}, options.tags, { context: $.extend(true, {}, options.context, { multiRule: [multiRule] From ab6ef4bcebafaae66bf18e84457b5cce3fc162cc Mon Sep 17 00:00:00 2001 From: Pranav Saxena Date: Wed, 25 Jul 2012 03:11:30 +0530 Subject: [PATCH 26/31] TAGS feature implementation throughout CloudStack UI --- ui/scripts/instances.js | 2 ++ ui/scripts/network.js | 9 +++++++++ ui/scripts/storage.js | 5 +++++ ui/scripts/templates.js | 12 +++++++++--- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/ui/scripts/instances.js b/ui/scripts/instances.js index 15c8efc563d..bca405b2d5b 100644 --- a/ui/scripts/instances.js +++ b/ui/scripts/instances.js @@ -1150,6 +1150,8 @@ id: { label: 'label.id' } } ], + + tags: cloudStack.api.tags({ resourceType: 'UserVm', contextId: 'instances' }), dataProvider: function(args) { $.ajax({ diff --git a/ui/scripts/network.js b/ui/scripts/network.js index 96446dfd2c4..cbfa4ec6ca2 100644 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -757,6 +757,10 @@ account: { label: 'label.account' } } ], + + tags: cloudStack.api.tags({ resourceType: 'Network', contextId: 'networks' }), + + dataProvider: function(args) { $.ajax({ url: createURL("listNetworks&id=" + args.context.networks[0].id + "&listAll=true"), //pass "&listAll=true" to "listNetworks&id=xxxxxxxx" for now before API gets fixed. @@ -1472,6 +1476,8 @@ vlanname: { label: 'label.vlan' } } ], + + tags: cloudStack.api.tags({ resourceType: 'PublicIpAddress', contextId: 'ipAddresses' }), dataProvider: function(args) { var items = args.context.ipAddresses; @@ -2782,6 +2788,9 @@ } ], + tags: cloudStack.api.tags({ resourceType: 'SecurityGroup', contextId: 'securityGroups' }), + + dataProvider: function(args) { $.ajax({ url: createURL("listSecurityGroups&id="+args.id), diff --git a/ui/scripts/storage.js b/ui/scripts/storage.js index c0ac3b2f2d2..01901d3a583 100644 --- a/ui/scripts/storage.js +++ b/ui/scripts/storage.js @@ -1004,6 +1004,9 @@ } ], + tags: cloudStack.api.tags({ resourceType: 'Volume', contextId: 'volumes' }), + + dataProvider: function(args) { $.ajax({ url: createURL("listVolumes&id=" + args.context.volumes[0].id), @@ -1269,6 +1272,8 @@ } ], + tags: cloudStack.api.tags({ resourceType: 'Snapshot', contextId: 'snapshots' }), + dataProvider: function(args) { $.ajax({ url: createURL("listSnapshots&id=" + args.context.snapshots[0].id), diff --git a/ui/scripts/templates.js b/ui/scripts/templates.js index 811a27a7c66..7a99d79b4fc 100644 --- a/ui/scripts/templates.js +++ b/ui/scripts/templates.js @@ -678,9 +678,12 @@ account: { label: 'label.account' }, created: { label: 'label.created', converter: cloudStack.converters.toLocalDate } } - ], + ], + + tags: cloudStack.api.tags({ resourceType: 'Template', contextId: 'templates' }), + - dataProvider: function(args) { + dataProvider: function(args) { var jsonObj = args.context.templates[0]; var apiCmd = "listTemplates&templatefilter=self&id=" + jsonObj.id; if(jsonObj.zoneid != null) @@ -822,6 +825,7 @@ } } }, + action: function(args) { var array1 = []; @@ -1192,8 +1196,10 @@ created: { label: 'label.created', converter: cloudStack.converters.toLocalDate } } ], + + tags: cloudStack.api.tags({ resourceType: 'ISO', contextId: 'isos' }), - dataProvider: function(args) { + dataProvider: function(args) { var jsonObj = args.context.isos[0]; var apiCmd = "listIsos&isofilter=self&id="+jsonObj.id; if(jsonObj.zoneid != null) From 3129d0c8e5df2dd2e92c881e602fde16c3e2ddfe Mon Sep 17 00:00:00 2001 From: David Nalley Date: Tue, 24 Jul 2012 18:11:18 -0400 Subject: [PATCH 27/31] adding jsvc as a dependency in the spec file --- cloud.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cloud.spec b/cloud.spec index 7233f0150e2..63a7e8aae71 100644 --- a/cloud.spec +++ b/cloud.spec @@ -201,6 +201,7 @@ Requires: /sbin/service Requires: /sbin/chkconfig Requires: jna Requires: ebtables +Requires: jsvc Group: System Environment/Libraries Requires: kvm @@ -255,6 +256,7 @@ Requires: java >= 1.6.0 Requires: %{name}-utils = %{version}, %{name}-core = %{version}, %{name}-deps = %{version}, %{name}-server = %{version} Requires: %{name}-setup = %{version} Requires: %{name}-client = %{version} +Requires: jsvc License: GPLv3+ Group: System Environment/Libraries %description usage From 50322b4762d5ea6e5488329ee763427a6145ad26 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 24 Jul 2012 15:16:47 -0700 Subject: [PATCH 28/31] Fix tagger UI wrapping in some browsers --- ui/css/cloudstack3.css | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css index e405fbf4fcb..51663cf59e1 100644 --- a/ui/css/cloudstack3.css +++ b/ui/css/cloudstack3.css @@ -8966,7 +8966,7 @@ div.panel.ui-dialog div.list-view div.fixed-header { } .tagger .field { - width: 179px; + width: 35%; float: left; position: relative; } @@ -8995,7 +8995,7 @@ div.panel.ui-dialog div.list-view div.fixed-header { .tagger form label { display: block; float: left; - width: 28px; + width: 25px; text-align: right; font-size: 10px; color: #394552; @@ -9025,6 +9025,11 @@ div.panel.ui-dialog div.list-view div.fixed-header { border-radius: 4px; } +.tagger form input { + width: 45%; + margin-left: 9px; +} + .tagger form input[type=submit] { background: url(../images/bg-gradients.png) repeat-x 0px -220px; cursor: pointer; @@ -9042,6 +9047,7 @@ div.panel.ui-dialog div.list-view div.fixed-header { border-radius: 4px; padding: 7px 25px 7px 26px; margin-left: 16px; + width: auto; } .tagger form input[type=submit]:hover { From 003c62583cafa05e260f0d0aad32c653554ea6e7 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 24 Jul 2012 15:21:54 -0700 Subject: [PATCH 29/31] Add tags to FW rule multi-edit --- ui/scripts/network.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/ui/scripts/network.js b/ui/scripts/network.js index cbfa4ec6ca2..0a8f970f8f7 100644 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -1695,6 +1695,9 @@ addButton: true } }, + + tags: cloudStack.api.tags({ resourceType: 'FirewallRule', contextId: 'multiRule' }), + add: { label: 'label.add', action: function(args) { @@ -1722,6 +1725,19 @@ } }, actions: { + edit: { + label: 'label.edit', + + // Blank -- edit is just for tags right now + action: function(args) { + args.response.success({ + notification: { + label: 'Edit firewall rule', + poll: function(args) { args.complete(); } + } + }); + } + }, destroy: { label: 'label.action.delete.firewall', action: function(args) { From d7d9b341c88e65783ca4574a4302543409605ff8 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 24 Jul 2012 14:02:46 -0700 Subject: [PATCH 30/31] Notifications widget: support custom interval If 'interval' attribute is passed in notification object, use that interval instead of the default. Conflicts: ui/scripts/ui/widgets/notifications.js --- ui/scripts/ui/widgets/notifications.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/scripts/ui/widgets/notifications.js b/ui/scripts/ui/widgets/notifications.js index 5ab5fcc444b..007e40590f5 100644 --- a/ui/scripts/ui/widgets/notifications.js +++ b/ui/scripts/ui/widgets/notifications.js @@ -280,7 +280,7 @@ cloudStack.ui.event.call('addNotification', { section: notification.section, desc: notification.desc, - interval: cloudStack.debug ? 0 : 5000, + interval: notification.interval ? notification.interval : 5000, _custom: notification._custom, poll: function(args) { var complete = args.complete; From 71fddd09575daccdb1752192cecc5e26c11b38ad Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 24 Jul 2012 15:35:18 -0700 Subject: [PATCH 31/31] Fix sprite sheet, which was out of date --- ui/images/sprites.png | Bin 178569 -> 178788 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/ui/images/sprites.png b/ui/images/sprites.png index 71674d13b775d451e35456549754799538cbc9b7..f1f5b8c5820a483a28780ccc6342fb3cf1dbe1fa 100644 GIT binary patch delta 77778 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⪼3O_GIA>nE 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 borprR%*)DfKdKiY;KT5?sea`xr|16%=$WW7 delta 77566 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 z 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