diff --git a/core/api/src/main/java/org/onosproject/net/config/basics/BasicElementConfig.java b/core/api/src/main/java/org/onosproject/net/config/basics/BasicElementConfig.java
index dceed74..1cb00dc 100644
--- a/core/api/src/main/java/org/onosproject/net/config/basics/BasicElementConfig.java
+++ b/core/api/src/main/java/org/onosproject/net/config/basics/BasicElementConfig.java
@@ -15,7 +15,11 @@
  */
 package org.onosproject.net.config.basics;
 
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.google.common.collect.ImmutableSet;
+
 import java.util.Objects;
+import java.util.Set;
 
 /**
  * Basic configuration for network elements, e.g. devices, hosts. Such elements
@@ -70,6 +74,11 @@
     protected static final String OWNER = "owner";
 
     /**
+     * Key for roles.
+     */
+    protected static final String ROLES = "roles";
+
+    /**
      * Threshold for detecting double value is zero.
      */
     protected static final double ZERO_THRESHOLD = Double.MIN_VALUE * 2.0;
@@ -288,6 +297,30 @@
         return (BasicElementConfig) setOrClear(OWNER, owner);
     }
 
+    /**
+     * Returns set of roles assigned to the element.
+     *
+     * @return set of roles
+     */
+    public Set<String> roles() {
+        ImmutableSet.Builder<String> roles = ImmutableSet.builder();
+        if (object.has(ROLES)) {
+            ArrayNode roleNodes = (ArrayNode) object.path(ROLES);
+            roleNodes.forEach(r -> roles.add(r.asText()));
+        }
+        return roles.build();
+    }
+
+    /**
+     * Sets the roles of the element.
+     *
+     * @param roles new roles; null to clear
+     * @return self
+     */
+    public BasicElementConfig roles(Set<String> roles) {
+        return (BasicElementConfig) setOrClear(ROLES, roles);
+    }
+
     @Override
     public boolean isValid() {
         return isValidLength(NAME, NAME_MAX_LENGTH)
diff --git a/core/api/src/test/java/org/onosproject/net/config/basics/BasicElementConfigTest.java b/core/api/src/test/java/org/onosproject/net/config/basics/BasicElementConfigTest.java
index 8c56a8c..0d65eb9 100644
--- a/core/api/src/test/java/org/onosproject/net/config/basics/BasicElementConfigTest.java
+++ b/core/api/src/test/java/org/onosproject/net/config/basics/BasicElementConfigTest.java
@@ -17,12 +17,11 @@
 package org.onosproject.net.config.basics;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.ImmutableSet;
 import org.junit.Before;
 import org.junit.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 import static org.onosproject.net.config.basics.BasicElementConfig.ZERO_THRESHOLD;
 
 /**
@@ -35,10 +34,12 @@
     private static final String E1 = "e1";
     private static final String GEO = "geo";
     private static final String GRID = "grid";
+    public static final ImmutableSet<String> ROLES = ImmutableSet.of("spine", "primary");
 
     // concrete subclass of abstract class we are testing
     private static class ElmCfg extends BasicElementConfig<String> {
         ElmCfg() {
+            mapper = MAPPER;
             object = MAPPER.createObjectNode();
         }
 
@@ -150,4 +151,11 @@
         print(cfg);
         assertEquals("not geo", GEO, cfg.locType());
     }
+
+    @Test
+    public void roles() {
+        cfg.roles(ROLES);
+        print(cfg);
+        assertEquals("not roles", ROLES, cfg.roles());
+    }
 }
