You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by rn...@apache.org on 2014/11/24 18:47:58 UTC
ambari git commit: AMBARI-8336. Add Security State to Ambari
database. (Robert Levas via rnettleton)
Repository: ambari
Updated Branches:
refs/heads/trunk f04b03941 -> 6b93fb544
AMBARI-8336. Add Security State to Ambari database. (Robert Levas via rnettleton)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/6b93fb54
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/6b93fb54
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/6b93fb54
Branch: refs/heads/trunk
Commit: 6b93fb54452211af1ed678e9fabd8ed165b005a2
Parents: f04b039
Author: Robert Levas <rl...@hortonworks.com>
Authored: Mon Nov 24 12:38:24 2014 -0500
Committer: Bob Nettleton <rn...@hortonworks.com>
Committed: Mon Nov 24 12:47:18 2014 -0500
----------------------------------------------------------------------
.../HostComponentDesiredStateEntity.java | 14 ++++
.../orm/entities/HostComponentStateEntity.java | 15 +++-
.../orm/entities/ServiceDesiredStateEntity.java | 14 +++-
.../ambari/server/state/SecurityState.java | 83 ++++++++++++++++++++
.../org/apache/ambari/server/state/Service.java | 18 +++++
.../server/state/ServiceComponentHost.java | 40 ++++++++++
.../apache/ambari/server/state/ServiceImpl.java | 42 ++++++++++
.../svccomphost/ServiceComponentHostImpl.java | 68 ++++++++++++++++
.../server/upgrade/UpgradeCatalog200.java | 9 +++
.../main/resources/Ambari-DDL-MySQL-CREATE.sql | 3 +
.../main/resources/Ambari-DDL-Oracle-CREATE.sql | 5 +-
.../resources/Ambari-DDL-Postgres-CREATE.sql | 3 +
.../Ambari-DDL-Postgres-EMBEDDED-CREATE.sql | 3 +
.../resources/Ambari-DDL-SQLServer-CREATE.sql | 6 +-
.../apache/ambari/server/state/ServiceTest.java | 48 +++++++++--
.../svccomphost/ServiceComponentHostTest.java | 59 ++++++++++++++
.../server/upgrade/UpgradeCatalog200Test.java | 49 ++++++++++++
17 files changed, 467 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/6b93fb54/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostComponentDesiredStateEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostComponentDesiredStateEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostComponentDesiredStateEntity.java
index 610f77f..e0f1e9e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostComponentDesiredStateEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostComponentDesiredStateEntity.java
@@ -30,6 +30,7 @@ import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
+import org.apache.ambari.server.state.SecurityState;
import org.apache.ambari.server.state.HostComponentAdminState;
import org.apache.ambari.server.state.MaintenanceState;
import org.apache.ambari.server.state.State;
@@ -61,6 +62,11 @@ public class HostComponentDesiredStateEntity {
private State desiredState = State.INIT;
@Basic
+ @Column(name = "security_state", nullable = false, insertable = true, updatable = true)
+ @Enumerated(value = EnumType.STRING)
+ private SecurityState securityState = SecurityState.UNSECURED;
+
+ @Basic
@Column(name = "desired_stack_version", insertable = true, updatable = true)
private String desiredStackVersion = "";
@@ -127,6 +133,14 @@ public class HostComponentDesiredStateEntity {
this.desiredState = desiredState;
}
+ public SecurityState getSecurityState() {
+ return securityState;
+ }
+
+ public void setSecurityState(SecurityState securityState) {
+ this.securityState = securityState;
+ }
+
public String getDesiredStackVersion() {
return defaultString(desiredStackVersion);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/6b93fb54/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostComponentStateEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostComponentStateEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostComponentStateEntity.java
index 81de777..11f2c14 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostComponentStateEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostComponentStateEntity.java
@@ -18,8 +18,7 @@
package org.apache.ambari.server.orm.entities;
-import java.util.Collection;
-
+import org.apache.ambari.server.state.SecurityState;
import org.apache.ambari.server.state.State;
import org.apache.ambari.server.state.UpgradeState;
@@ -56,6 +55,10 @@ public class HostComponentStateEntity {
@Column(name = "upgrade_state", nullable = false, insertable = true, updatable = true)
private UpgradeState upgradeState = UpgradeState.NONE;
+ @Enumerated(value = EnumType.STRING)
+ @Column(name = "security_state", nullable = false, insertable = true, updatable = true)
+ private SecurityState securityState = SecurityState.UNSECURED;
+
@Basic
@Column(name = "current_stack_version", nullable = false, insertable = true, updatable = true)
private String currentStackVersion;
@@ -111,6 +114,14 @@ public class HostComponentStateEntity {
this.currentState = currentState;
}
+ public SecurityState getSecurityState() {
+ return securityState;
+ }
+
+ public void setSecurityState(SecurityState securityState) {
+ this.securityState = securityState;
+ }
+
public UpgradeState getUpgradeState() {
return upgradeState;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/6b93fb54/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceDesiredStateEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceDesiredStateEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceDesiredStateEntity.java
index a74b021..2d2c386 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceDesiredStateEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceDesiredStateEntity.java
@@ -19,6 +19,7 @@
package org.apache.ambari.server.orm.entities;
import org.apache.ambari.server.state.MaintenanceState;
+import org.apache.ambari.server.state.SecurityState;
import org.apache.ambari.server.state.State;
import org.apache.commons.lang.StringUtils;
@@ -53,7 +54,10 @@ public class ServiceDesiredStateEntity {
@Enumerated(value = EnumType.STRING)
private MaintenanceState maintenanceState = MaintenanceState.OFF;
-
+ @Column(name = "security_state", nullable = false, insertable = true, updatable = true)
+ @Enumerated(value = EnumType.STRING)
+ private SecurityState securityState = SecurityState.UNSECURED;
+
@OneToOne
@javax.persistence.JoinColumns(
{
@@ -110,6 +114,14 @@ public class ServiceDesiredStateEntity {
maintenanceState = state;
}
+ public SecurityState getSecurityState() {
+ return securityState;
+ }
+
+ public void setSecurityState(SecurityState securityState) {
+ this.securityState = securityState;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
http://git-wip-us.apache.org/repos/asf/ambari/blob/6b93fb54/ambari-server/src/main/java/org/apache/ambari/server/state/SecurityState.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/SecurityState.java b/ambari-server/src/main/java/org/apache/ambari/server/state/SecurityState.java
new file mode 100644
index 0000000..8d8b136
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/SecurityState.java
@@ -0,0 +1,83 @@
+/*
+ * 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 org.apache.ambari.server.state;
+
+import java.util.EnumSet;
+
+/**
+ * Indicates the security state of a service or component.
+ */
+public enum SecurityState {
+ /**
+ * Indicates that it is not known whether the service or component is secured or not
+ */
+ UNKNOWN,
+ /**
+ * Indicates service or component is not or should not be secured
+ */
+ UNSECURED,
+ /**
+ * Indicates component is or should be secured using Kerberos
+ */
+ SECURED_KERBEROS,
+ /**
+ * Indicates the component is in the process of being secured
+ */
+ SECURING,
+ /**
+ * Indicates the component is in the process of being unsecured
+ */
+ UNSECURING,
+ /**
+ * Indicates the component is not secured due to an error condition
+ */
+ ERROR;
+
+ /**
+ * The subset of states that are considered endpoints, meaning they do not indicate the state is
+ * in transition.
+ */
+ public static final EnumSet<SecurityState> ENDPOINT_STATES =
+ EnumSet.of(UNKNOWN, UNSECURED, ERROR, SECURED_KERBEROS);
+
+ /**
+ * The subset of states that are considered transitional, meaning they indicate a task is in
+ * process to reach some endpoint state
+ */
+ public static final EnumSet<SecurityState> TRANSITIONAL_STATES =
+ EnumSet.of(SECURING, UNSECURING);
+
+ /**
+ * Tests this SecurityState to see if it is an endpoint state.
+ *
+ * @return true if this state is an endpoint state; otherwise false
+ */
+ public boolean isEndpoint() {
+ return ENDPOINT_STATES.contains(this);
+ }
+
+ /**
+ * Tests this SecurityState to see if it is a transitional state.
+ *
+ * @return true if this state is a transitional state; otherwise false
+ */
+ public boolean isTransitional() {
+ return TRANSITIONAL_STATES.contains(this);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/6b93fb54/ambari-server/src/main/java/org/apache/ambari/server/state/Service.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/Service.java b/ambari-server/src/main/java/org/apache/ambari/server/state/Service.java
index 4a18c69..552ccee 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/Service.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/Service.java
@@ -49,6 +49,24 @@ public interface Service {
public void setDesiredState(State state);
+ /**
+ * Gets this Service's security state.
+ *
+ * @return this services desired SecurityState
+ */
+ public SecurityState getSecurityState();
+
+ /**
+ * Sets this Service's desired security state
+ * <p/>
+ * It is expected that the new SecurityState is a valid endpoint state such that
+ * SecurityState.isEndpoint() == true.
+ *
+ * @param securityState the desired SecurityState for this Service
+ * @throws AmbariException if the new state is not an endpoint state
+ */
+ public void setSecurityState(SecurityState securityState) throws AmbariException;
+
public StackId getDesiredStackVersion();
public void setDesiredStackVersion(StackId stackVersion);
http://git-wip-us.apache.org/repos/asf/ambari/blob/6b93fb54/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
index 3142974..74e2371 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
@@ -78,6 +78,46 @@ public interface ServiceComponentHost {
public void setState(State state);
+ /**
+ * Gets the current security state for this ServiceComponent
+ * <p/>
+ * The returned SecurityState may be any endpoint or transitional state.
+ *
+ * @return the current SecurityState for this ServiceComponent
+ */
+ public SecurityState getSecurityState();
+
+
+ /**
+ * Sets the current security state for this ServiceComponent
+ * <p/>
+ * The new SecurityState may be any endpoint or transitional state.
+ *
+ * @param state the current SecurityState for this ServiceComponent
+ */
+ public void setSecurityState(SecurityState state);
+
+ /**
+ * Gets the desired security state for this ServiceComponent
+ * <p/>
+ * The returned SecurityState is a valid endpoint state where
+ * SecurityState.isEndpoint() == true.
+ *
+ * @return the desired SecurityState for this ServiceComponent
+ */
+ public SecurityState getDesiredSecurityState();
+
+ /**
+ * Sets the desired security state for this ServiceComponent
+ * <p/>
+ * It is expected that the new SecurityState is a valid endpoint state such that
+ * SecurityState.isEndpoint() == true.
+ *
+ * @param securityState the desired SecurityState for this ServiceComponent
+ * @throws AmbariException if the new state is not an endpoint state
+ */
+ public void setDesiredSecurityState(SecurityState securityState) throws AmbariException;
+
public void setUpgradeState(UpgradeState upgradeState);
public StackId getStackVersion();
http://git-wip-us.apache.org/repos/asf/ambari/blob/6b93fb54/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
index 4b4a305..7fa5afe 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
@@ -350,6 +350,48 @@ public class ServiceImpl implements Service {
}
@Override
+ public SecurityState getSecurityState() {
+ clusterGlobalLock.readLock().lock();
+ try {
+ readWriteLock.readLock().lock();
+ try {
+ return serviceDesiredStateEntity.getSecurityState();
+ } finally {
+ readWriteLock.readLock().unlock();
+ }
+ } finally {
+ clusterGlobalLock.readLock().unlock();
+ }
+ }
+
+ @Override
+ public void setSecurityState(SecurityState securityState) throws AmbariException {
+ if(!securityState.isEndpoint())
+ throw new AmbariException("The security state must be an endpoint state");
+
+ clusterGlobalLock.readLock().lock();
+ try {
+ readWriteLock.writeLock().lock();
+ try {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Setting DesiredSecurityState of Service"
+ + ", clusterName=" + cluster.getClusterName()
+ + ", clusterId=" + cluster.getClusterId()
+ + ", serviceName=" + getName()
+ + ", oldDesiredSecurityState=" + getSecurityState()
+ + ", newDesiredSecurityState=" + securityState);
+ }
+ serviceDesiredStateEntity.setSecurityState(securityState);
+ saveIfPersisted();
+ } finally {
+ readWriteLock.writeLock().unlock();
+ }
+ } finally {
+ clusterGlobalLock.readLock().unlock();
+ }
+ }
+
+ @Override
public StackId getDesiredStackVersion() {
clusterGlobalLock.readLock().lock();
try {
http://git-wip-us.apache.org/repos/asf/ambari/blob/6b93fb54/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
index 606751d..a3fec84 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
@@ -46,6 +46,7 @@ import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity;
import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntityPK;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.SecurityState;
import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.HostComponentAdminState;
@@ -770,6 +771,71 @@ public class ServiceComponentHostImpl implements ServiceComponentHost {
}
}
+ @Override
+ public SecurityState getSecurityState() {
+ clusterGlobalLock.readLock().lock();
+ try {
+ readLock.lock();
+ try {
+ return stateEntity.getSecurityState();
+ } finally {
+ readLock.unlock();
+ }
+ } finally {
+ clusterGlobalLock.readLock().unlock();
+ }
+ }
+
+ @Override
+ public void setSecurityState(SecurityState securityState) {
+ clusterGlobalLock.readLock().lock();
+ try {
+ writeLock.lock();
+ try {
+ stateEntity.setSecurityState(securityState);
+ saveIfPersisted();
+ } finally {
+ writeLock.unlock();
+ }
+ } finally {
+ clusterGlobalLock.readLock().unlock();
+ }
+ }
+
+ @Override
+ public SecurityState getDesiredSecurityState() {
+ clusterGlobalLock.readLock().lock();
+ try {
+ readLock.lock();
+ try {
+ return desiredStateEntity.getSecurityState();
+ } finally {
+ readLock.unlock();
+ }
+ } finally {
+ clusterGlobalLock.readLock().unlock();
+ }
+ }
+
+ @Override
+ public void setDesiredSecurityState(SecurityState securityState) throws AmbariException {
+ if(!securityState.isEndpoint())
+ throw new AmbariException("The security state must be an endpoint state");
+
+ clusterGlobalLock.readLock().lock();
+ try {
+ writeLock.lock();
+ try {
+ desiredStateEntity.setSecurityState(securityState);
+ saveIfPersisted();
+ } finally {
+ writeLock.unlock();
+ }
+ } finally {
+ clusterGlobalLock.readLock().unlock();
+ }
+ }
+
/***
* To be called during the upgrade of a specific Component in a host.
* The potential upgrade states are NONE (default), PENDING, IN_PROGRESS, FAILED.
@@ -1198,6 +1264,8 @@ public class ServiceComponentHostImpl implements ServiceComponentHost {
.append(", desiredState=").append(getDesiredState())
.append(", stackVersion=").append(getStackVersion())
.append(", state=").append(getState())
+ .append(", securityState=").append(getSecurityState())
+ .append(", desiredSecurityState=").append(getDesiredSecurityState())
.append(" }");
} finally {
readLock.unlock();
http://git-wip-us.apache.org/repos/asf/ambari/blob/6b93fb54/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java
index b5556ed..4735980 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog200.java
@@ -25,6 +25,7 @@ import java.util.List;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.orm.DBAccessor;
import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo;
+import org.apache.ambari.server.state.SecurityState;
import org.apache.ambari.server.state.UpgradeState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -89,6 +90,14 @@ public class UpgradeCatalog200 extends AbstractUpgradeCatalog {
dbAccessor.addColumn(ALERT_DEFINITION_TABLE, new DBColumnInfo(
"ignore_host", Short.class, 1, 0, false));
+ // add security_state to various tables
+ dbAccessor.addColumn("hostcomponentdesiredstate", new DBColumnInfo(
+ "security_state", String.class, 32, SecurityState.UNSECURED.toString(), false));
+ dbAccessor.addColumn("hostcomponentstate", new DBColumnInfo(
+ "security_state", String.class, 32, SecurityState.UNSECURED.toString(), false));
+ dbAccessor.addColumn("servicedesiredstate", new DBColumnInfo(
+ "security_state", String.class, 32, SecurityState.UNSECURED.toString(), false));
+
dbAccessor.addColumn(ALERT_DEFINITION_TABLE, new DBColumnInfo(
"description", char[].class, 32672, null, true));
http://git-wip-us.apache.org/repos/asf/ambari/blob/6b93fb54/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
index edcaa50..f0623f8 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -100,6 +100,7 @@ CREATE TABLE hostcomponentdesiredstate (
service_name VARCHAR(255) NOT NULL,
admin_state VARCHAR(32),
maintenance_state VARCHAR(32) NOT NULL DEFAULT 'ACTIVE',
+ security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
restart_required TINYINT(1) NOT NULL DEFAULT 0,
PRIMARY KEY (cluster_id, component_name, host_name, service_name));
@@ -111,6 +112,7 @@ CREATE TABLE hostcomponentstate (
host_name VARCHAR(255) NOT NULL,
service_name VARCHAR(255) NOT NULL,
upgrade_state VARCHAR(32) NOT NULL DEFAULT 'NONE',
+ security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
PRIMARY KEY (cluster_id, component_name, host_name, service_name));
CREATE TABLE hosts (
@@ -164,6 +166,7 @@ CREATE TABLE servicedesiredstate (
desired_state VARCHAR(255) NOT NULL,
service_name VARCHAR(255) NOT NULL,
maintenance_state VARCHAR(32) NOT NULL DEFAULT 'ACTIVE',
+ security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
PRIMARY KEY (cluster_id, service_name));
CREATE TABLE users (
http://git-wip-us.apache.org/repos/asf/ambari/blob/6b93fb54/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
index 8ab0619..fd7343b 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -91,6 +91,7 @@ CREATE TABLE hostcomponentdesiredstate (
service_name VARCHAR2(255) NOT NULL,
admin_state VARCHAR2(32) NULL,
maintenance_state VARCHAR2(32) NOT NULL,
+ security_state VARCHAR2(32) DEFAULT 'UNSECURED' NOT NULL,
restart_required NUMBER(1) DEFAULT 0 NOT NULL,
PRIMARY KEY (cluster_id, component_name, host_name, service_name));
@@ -101,7 +102,8 @@ CREATE TABLE hostcomponentstate (
current_state VARCHAR2(255) NOT NULL,
host_name VARCHAR2(255) NOT NULL,
service_name VARCHAR2(255) NOT NULL,
- upgrade_state VARCHAR2(255) NOT NULL DEFAULT 'NONE',
+ upgrade_state VARCHAR2(255) DEFAULT 'NONE' NOT NULL,
+ security_state VARCHAR2(32) DEFAULT 'UNSECURED' NOT NULL,
PRIMARY KEY (cluster_id, component_name, host_name, service_name));
CREATE TABLE hosts (
@@ -155,6 +157,7 @@ CREATE TABLE servicedesiredstate (
desired_state VARCHAR2(255) NOT NULL,
service_name VARCHAR2(255) NOT NULL,
maintenance_state VARCHAR2(32) NOT NULL,
+ security_state VARCHAR2(32) DEFAULT 'UNSECURED' NOT NULL,
PRIMARY KEY (cluster_id, service_name));
CREATE TABLE users (
http://git-wip-us.apache.org/repos/asf/ambari/blob/6b93fb54/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
index a918f22..f4d9c86 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -99,6 +99,7 @@ CREATE TABLE hostcomponentdesiredstate (
service_name VARCHAR(255) NOT NULL,
admin_state VARCHAR(32),
maintenance_state VARCHAR(32) NOT NULL,
+ security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
restart_required SMALLINT NOT NULL DEFAULT 0,
PRIMARY KEY (cluster_id, component_name, host_name, service_name));
@@ -110,6 +111,7 @@ CREATE TABLE hostcomponentstate (
host_name VARCHAR(255) NOT NULL,
service_name VARCHAR(255) NOT NULL,
upgrade_state VARCHAR(32) NOT NULL DEFAULT 'NONE',
+ security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
PRIMARY KEY (cluster_id, component_name, host_name, service_name));
CREATE TABLE hosts (
@@ -162,6 +164,7 @@ CREATE TABLE servicedesiredstate (
desired_state VARCHAR(255) NOT NULL,
service_name VARCHAR(255) NOT NULL,
maintenance_state VARCHAR(32) NOT NULL,
+ security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
PRIMARY KEY (cluster_id, service_name));
CREATE TABLE users (
http://git-wip-us.apache.org/repos/asf/ambari/blob/6b93fb54/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
index 2e7aa07..f80bb32 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql
@@ -120,6 +120,7 @@ CREATE TABLE ambari.hostcomponentdesiredstate (
service_name VARCHAR(255) NOT NULL,
admin_state VARCHAR(32),
maintenance_state VARCHAR(32) NOT NULL,
+ security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
restart_required SMALLINT NOT NULL DEFAULT 0,
PRIMARY KEY (cluster_id, component_name, host_name, service_name));
GRANT ALL PRIVILEGES ON TABLE ambari.hostcomponentdesiredstate TO :username;
@@ -132,6 +133,7 @@ CREATE TABLE ambari.hostcomponentstate (
host_name VARCHAR(255) NOT NULL,
service_name VARCHAR(255) NOT NULL,
upgrade_state VARCHAR(32) NOT NULL DEFAULT 'NONE',
+ security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
PRIMARY KEY (cluster_id, component_name, host_name, service_name));
GRANT ALL PRIVILEGES ON TABLE ambari.hostcomponentstate TO :username;
@@ -190,6 +192,7 @@ CREATE TABLE ambari.servicedesiredstate (
desired_state VARCHAR(255) NOT NULL,
service_name VARCHAR(255) NOT NULL,
maintenance_state VARCHAR(32) NOT NULL,
+ security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
PRIMARY KEY (cluster_id, service_name));
GRANT ALL PRIVILEGES ON TABLE ambari.servicedesiredstate TO :username;
http://git-wip-us.apache.org/repos/asf/ambari/blob/6b93fb54/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
index e3e3414..ca4738c 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
@@ -39,12 +39,12 @@ CREATE TABLE serviceconfigmapping (service_config_id BIGINT NOT NULL, config_id
CREATE TABLE clusterconfigmapping (cluster_id BIGINT NOT NULL, type_name VARCHAR(255) NOT NULL, version_tag VARCHAR(255) NOT NULL, create_timestamp BIGINT NOT NULL, selected INTEGER NOT NULL DEFAULT 0, user_name VARCHAR(255) NOT NULL DEFAULT '_db', PRIMARY KEY CLUSTERED (cluster_id, type_name, create_timestamp));
CREATE TABLE clusterservices (service_name VARCHAR(255) NOT NULL, cluster_id BIGINT NOT NULL, service_enabled INTEGER NOT NULL, PRIMARY KEY CLUSTERED (service_name, cluster_id));
CREATE TABLE clusterstate (cluster_id BIGINT NOT NULL, current_cluster_state VARCHAR(255) NOT NULL, current_stack_version VARCHAR(255) NOT NULL, PRIMARY KEY CLUSTERED (cluster_id));
-CREATE TABLE hostcomponentdesiredstate (cluster_id BIGINT NOT NULL, component_name VARCHAR(255) NOT NULL, desired_stack_version VARCHAR(255) NOT NULL, desired_state VARCHAR(255) NOT NULL, host_name VARCHAR(255) NOT NULL, service_name VARCHAR(255) NOT NULL, admin_state VARCHAR(32), maintenance_state VARCHAR(32) NOT NULL, restart_required BIT NOT NULL DEFAULT 0, PRIMARY KEY CLUSTERED (cluster_id, component_name, host_name, service_name));
-CREATE TABLE hostcomponentstate (cluster_id BIGINT NOT NULL, component_name VARCHAR(255) NOT NULL, current_stack_version VARCHAR(255) NOT NULL, current_state VARCHAR(255) NOT NULL, host_name VARCHAR(255) NOT NULL, service_name VARCHAR(255) NOT NULL, PRIMARY KEY CLUSTERED (cluster_id, component_name, host_name, service_name));
+CREATE TABLE hostcomponentdesiredstate (cluster_id BIGINT NOT NULL, component_name VARCHAR(255) NOT NULL, desired_stack_version VARCHAR(255) NOT NULL, desired_state VARCHAR(255) NOT NULL, host_name VARCHAR(255) NOT NULL, service_name VARCHAR(255) NOT NULL, admin_state VARCHAR(32), maintenance_state VARCHAR(32) NOT NULL, security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED', restart_required BIT NOT NULL DEFAULT 0, PRIMARY KEY CLUSTERED (cluster_id, component_name, host_name, service_name));
+CREATE TABLE hostcomponentstate (cluster_id BIGINT NOT NULL, component_name VARCHAR(255) NOT NULL, current_stack_version VARCHAR(255) NOT NULL, current_state VARCHAR(255) NOT NULL, host_name VARCHAR(255) NOT NULL, service_name VARCHAR(255), security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED' NOT NULL, PRIMARY KEY CLUSTERED (cluster_id, component_name, host_name, service_name));
CREATE TABLE hosts (host_name VARCHAR(255) NOT NULL, cpu_count INTEGER NOT NULL, ph_cpu_count INTEGER, cpu_info VARCHAR(255) NOT NULL, discovery_status VARCHAR(2000) NOT NULL, host_attributes VARCHAR(MAX) NOT NULL, ipv4 VARCHAR(255), ipv6 VARCHAR(255), public_host_name VARCHAR(255), last_registration_time BIGINT NOT NULL, os_arch VARCHAR(255) NOT NULL, os_info VARCHAR(1000) NOT NULL, os_type VARCHAR(255) NOT NULL, rack_info VARCHAR(255) NOT NULL, total_mem BIGINT NOT NULL, PRIMARY KEY CLUSTERED (host_name));
CREATE TABLE hoststate (agent_version VARCHAR(255) NOT NULL, available_mem BIGINT NOT NULL, current_state VARCHAR(255) NOT NULL, health_status VARCHAR(255), host_name VARCHAR(255) NOT NULL, time_in_state BIGINT NOT NULL, maintenance_state VARCHAR(512), PRIMARY KEY CLUSTERED (host_name));
CREATE TABLE servicecomponentdesiredstate (component_name VARCHAR(255) NOT NULL, cluster_id BIGINT NOT NULL, desired_stack_version VARCHAR(255) NOT NULL, desired_state VARCHAR(255) NOT NULL, service_name VARCHAR(255) NOT NULL, PRIMARY KEY CLUSTERED (component_name, cluster_id, service_name));
-CREATE TABLE servicedesiredstate (cluster_id BIGINT NOT NULL, desired_host_role_mapping INTEGER NOT NULL, desired_stack_version VARCHAR(255) NOT NULL, desired_state VARCHAR(255) NOT NULL, service_name VARCHAR(255) NOT NULL, maintenance_state VARCHAR(32) NOT NULL, PRIMARY KEY CLUSTERED (cluster_id, service_name));
+CREATE TABLE servicedesiredstate (cluster_id BIGINT NOT NULL, desired_host_role_mapping INTEGER NOT NULL, desired_stack_version VARCHAR(255) NOT NULL, desired_state VARCHAR(255) NOT NULL, service_name VARCHAR(255) NOT NULL, maintenance_state VARCHAR(32) NOT NULL, security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED', PRIMARY KEY CLUSTERED (cluster_id, service_name));
CREATE TABLE users (user_id INTEGER, principal_id BIGINT NOT NULL, ldap_user INTEGER NOT NULL DEFAULT 0, user_name VARCHAR(255) NOT NULL, create_time DATETIME DEFAULT GETDATE(), user_password VARCHAR(255), active INTEGER NOT NULL DEFAULT 1, PRIMARY KEY CLUSTERED (user_id), UNIQUE (ldap_user, user_name));
CREATE TABLE groups (group_id INTEGER, principal_id BIGINT NOT NULL, group_name VARCHAR(255) NOT NULL, ldap_group INTEGER NOT NULL DEFAULT 0, PRIMARY KEY (group_id));
CREATE TABLE members (member_id INTEGER, group_id INTEGER NOT NULL, user_id INTEGER NOT NULL, PRIMARY KEY (member_id));
http://git-wip-us.apache.org/repos/asf/ambari/blob/6b93fb54/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
index 493291d..ecfe403 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
@@ -90,6 +90,7 @@ public class ServiceTest {
Assert.assertEquals(cluster.getClusterName(),
service.getCluster().getClusterName());
Assert.assertEquals(State.INIT, service.getDesiredState());
+ Assert.assertEquals(SecurityState.UNSECURED, service.getSecurityState());
Assert.assertFalse(
service.getDesiredStackVersion().getStackId().isEmpty());
}
@@ -299,16 +300,53 @@ public class ServiceTest {
Assert.assertNotNull(entity);
Assert.assertEquals(MaintenanceState.OFF, entity.getServiceDesiredStateEntity().getMaintenanceState());
Assert.assertEquals(MaintenanceState.OFF, service.getMaintenanceState());
-
+
service.setMaintenanceState(MaintenanceState.ON);
Assert.assertEquals(MaintenanceState.ON, service.getMaintenanceState());
entity = dao.findByClusterAndServiceNames(clusterName, serviceName);
Assert.assertNotNull(entity);
Assert.assertEquals(MaintenanceState.ON, entity.getServiceDesiredStateEntity().getMaintenanceState());
-
-
}
-
-
+
+ @Test
+ public void testSecurityState() throws Exception {
+ String serviceName = "HDFS";
+ Service s = serviceFactory.createNew(cluster, serviceName);
+ cluster.addService(s);
+ s.persist();
+
+ Service service = cluster.getService(serviceName);
+ Assert.assertNotNull(service);
+
+ ClusterServiceDAO dao = injector.getInstance(ClusterServiceDAO.class);
+ ClusterServiceEntity entity = dao.findByClusterAndServiceNames(clusterName, serviceName);
+ Assert.assertNotNull(entity);
+ Assert.assertEquals(SecurityState.UNSECURED, entity.getServiceDesiredStateEntity().getSecurityState());
+ Assert.assertEquals(SecurityState.UNSECURED, service.getSecurityState());
+
+ service.setSecurityState(SecurityState.SECURED_KERBEROS);
+ Assert.assertEquals(SecurityState.SECURED_KERBEROS, service.getSecurityState());
+
+ entity = dao.findByClusterAndServiceNames(clusterName, serviceName);
+ Assert.assertNotNull(entity);
+ Assert.assertEquals(SecurityState.SECURED_KERBEROS, entity.getServiceDesiredStateEntity().getSecurityState());
+
+ // Make sure there are no issues setting all endpoint values...
+ for(SecurityState state: SecurityState.ENDPOINT_STATES) {
+ service.setSecurityState(state);
+ Assert.assertEquals(state, service.getSecurityState());
+ }
+
+ // Make sure there transitional states are not allowed
+ for(SecurityState state: SecurityState.TRANSITIONAL_STATES) {
+ try {
+ service.setSecurityState(state);
+ Assert.fail(String.format("SecurityState %s is not a valid desired service state", state.toString()));
+ }
+ catch (AmbariException e) {
+ // this is acceptable
+ }
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/6b93fb54/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
index aa7aab5..2a04c71 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostTest.java
@@ -33,8 +33,11 @@ import org.apache.ambari.server.controller.ServiceComponentHostResponse;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.orm.dao.HostComponentDesiredStateDAO;
+import org.apache.ambari.server.orm.dao.HostComponentStateDAO;
import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntity;
import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntityPK;
+import org.apache.ambari.server.orm.entities.HostComponentStateEntity;
+import org.apache.ambari.server.orm.entities.HostComponentStateEntityPK;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.Clusters;
@@ -44,6 +47,7 @@ import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.HostConfig;
import org.apache.ambari.server.state.MaintenanceState;
+import org.apache.ambari.server.state.SecurityState;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentFactory;
@@ -166,6 +170,8 @@ public class ServiceComponentHostTest {
Assert.assertEquals(State.INIT, impl.getState());
Assert.assertEquals(State.INIT, impl.getDesiredState());
+ Assert.assertEquals(SecurityState.UNSECURED, impl.getSecurityState());
+ Assert.assertEquals(SecurityState.UNSECURED, impl.getDesiredSecurityState());
Assert.assertEquals(c.getClusterName(), impl.getClusterName());
Assert.assertEquals(c.getClusterId(), impl.getClusterId());
Assert.assertEquals(s.getName(), impl.getServiceName());
@@ -1100,5 +1106,58 @@ public class ServiceComponentHostTest {
}
+ @Test
+ public void testSecurityState() throws Exception {
+ String stackVersion="HDP-2.0.6";
+ String clusterName = "c2";
+ String hostName = "h3";
+
+ clusters.addCluster(clusterName);
+ clusters.addHost(hostName);
+ setOsFamily(clusters.getHost(hostName), "redhat", "5.9");
+ clusters.getHost(hostName).persist();
+ Cluster c2 = clusters.getCluster(clusterName);
+ StackId stackId = new StackId(stackVersion);
+ c2.setDesiredStackVersion(stackId);
+ c2.createClusterVersion(stackId.getStackName(), stackId.getStackVersion(), "admin", RepositoryVersionState.CURRENT);
+ metaInfo.init();
+ clusters.mapHostToCluster(hostName, clusterName);
+
+ Cluster cluster = clusters.getCluster(clusterName);
+
+ ServiceComponentHost sch1 = createNewServiceComponentHost(cluster, "HDFS", "NAMENODE", hostName);
+
+ HostComponentDesiredStateDAO daoHostComponentDesiredState = injector.getInstance(HostComponentDesiredStateDAO.class);
+ HostComponentDesiredStateEntity entityHostComponentDesiredState;
+ HostComponentDesiredStateEntityPK pkHostComponentDesiredState = new HostComponentDesiredStateEntityPK();
+ pkHostComponentDesiredState.setClusterId(cluster.getClusterId());
+ pkHostComponentDesiredState.setComponentName(sch1.getServiceComponentName());
+ pkHostComponentDesiredState.setServiceName(sch1.getServiceName());
+ pkHostComponentDesiredState.setHostName(hostName);
+
+ HostComponentStateDAO daoHostComponentState = injector.getInstance(HostComponentStateDAO.class);
+ HostComponentStateEntity entityHostComponentState;
+ HostComponentStateEntityPK pkHostComponentState = new HostComponentStateEntityPK();
+ pkHostComponentState.setClusterId(cluster.getClusterId());
+ pkHostComponentState.setComponentName(sch1.getServiceComponentName());
+ pkHostComponentState.setServiceName(sch1.getServiceName());
+ pkHostComponentState.setHostName(hostName);
+
+ for(SecurityState state: SecurityState.values()) {
+ sch1.setSecurityState(state);
+ entityHostComponentState = daoHostComponentState.findByPK(pkHostComponentState);
+ Assert.assertNotNull(entityHostComponentState);
+ Assert.assertEquals(state, entityHostComponentState.getSecurityState());
+ try {
+ sch1.setDesiredSecurityState(state);
+ Assert.assertTrue(state.isEndpoint());
+ entityHostComponentDesiredState = daoHostComponentDesiredState.findByPK(pkHostComponentDesiredState);
+ Assert.assertNotNull(entityHostComponentDesiredState);
+ Assert.assertEquals(state, entityHostComponentDesiredState.getSecurityState());
+ } catch (AmbariException e) {
+ Assert.assertFalse(state.isEndpoint());
+ }
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/6b93fb54/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
index be9c9bf..6ff92c3 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog200Test.java
@@ -43,6 +43,7 @@ import org.apache.ambari.server.orm.DBAccessor;
import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.state.SecurityState;
import org.easymock.Capture;
import org.junit.After;
import org.junit.Assert;
@@ -90,6 +91,9 @@ public class UpgradeCatalog200Test {
Capture<DBAccessor.DBColumnInfo> alertDefinitionIgnoreColumnCapture = new Capture<DBAccessor.DBColumnInfo>();
Capture<DBAccessor.DBColumnInfo> alertDefinitionDescriptionColumnCapture = new Capture<DBAccessor.DBColumnInfo>();
Capture<DBAccessor.DBColumnInfo> hostComponentStateColumnCapture = new Capture<DBAccessor.DBColumnInfo>();
+ Capture<DBAccessor.DBColumnInfo> hostComponentStateSecurityStateColumnCapture = new Capture<DBAccessor.DBColumnInfo>();
+ Capture<DBAccessor.DBColumnInfo> hostComponentDesiredStateSecurityStateColumnCapture = new Capture<DBAccessor.DBColumnInfo>();
+ Capture<DBAccessor.DBColumnInfo> serviceDesiredStateSecurityStateColumnCapture = new Capture<DBAccessor.DBColumnInfo>();
Capture<List<DBAccessor.DBColumnInfo>> clusterVersionCapture = new Capture<List<DBAccessor.DBColumnInfo>>();
Capture<List<DBAccessor.DBColumnInfo>> hostVersionCapture = new Capture<List<DBAccessor.DBColumnInfo>>();
Capture<DBAccessor.DBColumnInfo> valueColumnCapture = new Capture<DBAccessor.DBColumnInfo>();
@@ -113,6 +117,18 @@ public class UpgradeCatalog200Test {
dbAccessor.addColumn(eq("hostcomponentstate"),
capture(hostComponentStateColumnCapture));
+ // Host Component State: security State
+ dbAccessor.addColumn(eq("hostcomponentstate"),
+ capture(hostComponentStateSecurityStateColumnCapture));
+
+ // Host Component Desired State: security State
+ dbAccessor.addColumn(eq("hostcomponentdesiredstate"),
+ capture(hostComponentDesiredStateSecurityStateColumnCapture));
+
+ // Service Desired State: security State
+ dbAccessor.addColumn(eq("servicedesiredstate"),
+ capture(serviceDesiredStateSecurityStateColumnCapture));
+
// Cluster Version
dbAccessor.createTable(eq("cluster_version"),
capture(clusterVersionCapture), eq("id"));
@@ -156,6 +172,11 @@ public class UpgradeCatalog200Test {
assertEquals("NONE", upgradeStateColumn.getDefaultValue());
assertFalse(upgradeStateColumn.isNullable());
+ // verify security_state columns
+ verifyComponentSecurityStateColumn(hostComponentStateSecurityStateColumnCapture);
+ verifyComponentSecurityStateColumn(hostComponentDesiredStateSecurityStateColumnCapture);
+ verifyServiceSecurityStateColumn(serviceDesiredStateSecurityStateColumnCapture);
+
// Verify capture group sizes
assertEquals(8, clusterVersionCapture.getValue().size());
assertEquals(5, hostVersionCapture.getValue().size());
@@ -224,6 +245,34 @@ public class UpgradeCatalog200Test {
Assert.assertEquals(2, alertTargetStatesCapture.getValue().size());
}
+ /**
+ * Verifies new security_state column in servicedesiredsstate table.
+ *
+ * @param securityStateColumnCapture
+ */
+ private void verifyServiceSecurityStateColumn(
+ Capture<DBAccessor.DBColumnInfo> securityStateColumnCapture) {
+ DBColumnInfo column = securityStateColumnCapture.getValue();
+ Assert.assertEquals(SecurityState.UNSECURED.toString(), column.getDefaultValue());
+ Assert.assertEquals(Integer.valueOf(32), column.getLength());
+ Assert.assertEquals(String.class, column.getType());
+ Assert.assertEquals("security_state", column.getName());
+ }
+
+ /**
+ * Verifies new security_state column in hostcomponentdesiredstate and hostcomponentstate tables
+ *
+ * @param securityStateColumnCapture
+ */
+ private void verifyComponentSecurityStateColumn(
+ Capture<DBAccessor.DBColumnInfo> securityStateColumnCapture) {
+ DBColumnInfo column = securityStateColumnCapture.getValue();
+ Assert.assertEquals(SecurityState.UNSECURED.toString(), column.getDefaultValue());
+ Assert.assertEquals(Integer.valueOf(32), column.getLength());
+ Assert.assertEquals(String.class, column.getType());
+ Assert.assertEquals("security_state", column.getName());
+ }
+
@Test
public void testGetSourceVersion() {
final DBAccessor dbAccessor = createNiceMock(DBAccessor.class);