Skip to content

Commit

Permalink
Autofill connection attribute if only one connection is defined
Browse files Browse the repository at this point in the history
Change-Id: Ic541aba448733aa34417a83ddd0082658fa236b7
Closes-Bug: #1772594
  • Loading branch information
IridiumOxide committed Jun 18, 2018
1 parent 879485c commit 3970a78
Show file tree
Hide file tree
Showing 14 changed files with 117 additions and 7 deletions.
4 changes: 2 additions & 2 deletions o11nplugin-contrail-config/buildNumber.properties
@@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
#Thu Jun 14 17:13:15 CEST 2018
buildNumber=1461
#Mon Jun 18 14:58:52 CEST 2018
buildNumber=1470
Expand Up @@ -43,6 +43,7 @@ val networkHasNotAllcationMode = "networkHasNotAllocationMode"
val listElementProperty = "listElementProperty"
val listTagTypes = "listTagTypes"
val matchesSecurityScope = "matchesSecurityScope"
val defaultConnection = "defaultConnection"

val portOfVCVirtualMachine = "portOfVCVirtualMachine"
val networkOfVCPortGroup = "networkOfVCPortGroup"
Expand Up @@ -72,4 +72,7 @@ class ConnectionManager
if (id == null) return null
return repository.getConnection(Sid.valueOf(id))
}

val connections: List<Connection> get() =
repository.connections
}
Expand Up @@ -9,7 +9,6 @@ import net.juniper.contrail.vro.model.Connection
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.context.annotation.Lazy
import org.springframework.stereotype.Component
import java.util.ArrayList
import java.util.concurrent.ConcurrentHashMap

/**
Expand Down Expand Up @@ -66,8 +65,8 @@ class DefaultConnectionRepository
persister.delete(connection.info)
}

override val connections: List<Connection>
get() = ArrayList(items.values)
override val connections: List<Connection> get() =
items.values.toList()

@Throws(IllegalArgumentException::class)
override fun getConnection(id: Sid): Connection? =
Expand Down
Expand Up @@ -10,6 +10,7 @@ import net.juniper.contrail.vro.config.allCapitalized
import net.juniper.contrail.vro.config.allLowerCase
import net.juniper.contrail.vro.config.constants.item
import net.juniper.contrail.vro.config.constants.parent
import net.juniper.contrail.vro.config.defaultConnection
import net.juniper.contrail.vro.config.defaultParentType
import net.juniper.contrail.vro.config.hasRootParent
import net.juniper.contrail.vro.config.isApiTypeClass
Expand Down Expand Up @@ -39,6 +40,7 @@ import net.juniper.contrail.vro.schema.Schema
import net.juniper.contrail.vro.schema.createWorkflowDescription
import net.juniper.contrail.vro.schema.propertyDescription
import net.juniper.contrail.vro.schema.relationDescription
import net.juniper.contrail.vro.workflows.dsl.fromAction

fun createWorkflows(clazz: ObjectClass, refs: List<ObjectClass>, schema: Schema): List<WorkflowDefinition> {
val parentsInModel = clazz.numberOfParentsInModel
Expand Down Expand Up @@ -73,7 +75,8 @@ fun createWorkflow(clazz: ObjectClass, parentClazz: ObjectClass, parentsInModel:
parameter(parent, parentName.reference) {
description = "Parent ${parentName.allCapitalized}"
mandatory = true

if (parentName == Connection)
dataBinding = fromAction(defaultConnection, type) {}
}

output(item, clazz.reference) {
Expand Down
Expand Up @@ -11,9 +11,17 @@ import static net.juniper.contrail.vro.tests.JsTesterKt.utilsName

abstract class ActionSpec extends ScriptSpec {

def setup() {
// can be overriden by derived specs
def additionalSetup() {}

final def setup() {
engine.addToContext(utilsName)
engine.addToContext(constantsName)
additionalSetup()
}

def addToContext(String name, Object value) {
engine.addToContext(name, value)
}
}

Expand Down
@@ -0,0 +1,67 @@
/*
* Copyright (c) 2018 Juniper Networks, Inc. All rights reserved.
*/

package net.juniper.contrail.vro.tests.actions

import com.vmware.o11n.plugin.sdk.spring.platform.GlobalPluginNotificationHandler
import net.juniper.contrail.api.ApiConnector
import net.juniper.contrail.vro.base.ConnectionManager
import net.juniper.contrail.vro.base.ConnectionPersister
import net.juniper.contrail.vro.base.ConnectorFactory
import net.juniper.contrail.vro.base.DefaultConnectionRepository
import net.juniper.contrail.vro.model.Connection
import net.juniper.contrail.vro.model.ConnectionInfo

import static net.juniper.contrail.vro.config.Actions.defaultConnection

class DefaultConnectionSpec extends ActionSpec {
def defaultConnectionAction = actionFromScript(defaultConnection)

def persister = Stub(ConnectionPersister)
def notifier = Stub(GlobalPluginNotificationHandler)
def connectorFactory = Stub(ConnectorFactory)
def connector = Stub(ApiConnector)

def connection1 = new Connection(new ConnectionInfo("c1", "1.2.3.4", 22), connector)
def connection2 = new Connection(new ConnectionInfo("c2", "4.3.2.1", 33), connector)

def repository = new DefaultConnectionRepository(persister)
def connectionManager = new ConnectionManager(repository, connectorFactory, notifier)

@Override
def additionalSetup() {
addToContext("ContrailConnectionManager", connectionManager)
}

def "Default connection is null when there are no connections"() {
given:

when:
def result = engine.invokeFunction(defaultConnectionAction)

then:
result == null
}
def "Default connection is returned if only one connection is present in the repository"() {
given:
repository.addConnection(connection1)

when:
def result = engine.invokeFunction(defaultConnectionAction)

then:
result == connection1
}
def "Default connection is null when there is more than one connection"() {
given:
repository.addConnection(connection1)
repository.addConnection(connection2)

when:
def result = engine.invokeFunction(defaultConnectionAction)

then:
result == null
}
}
@@ -0,0 +1,6 @@
var connections = ContrailConnectionManager.connections;
if (connections.length == 1) {
var connectionId = connections[0].name;
return ContrailConnectionManager.connection(connectionId);
}
return null;
Expand Up @@ -7,6 +7,7 @@ package net.juniper.contrail.vro.workflows.custom
import net.juniper.contrail.vro.config.constants.Connection
import net.juniper.contrail.vro.config.constants.item
import net.juniper.contrail.vro.config.parentConnection
import net.juniper.contrail.vro.config.defaultConnection
import net.juniper.contrail.vro.workflows.model.any
import net.juniper.contrail.vro.workflows.dsl.ofType
import net.juniper.contrail.vro.workflows.model.reference
Expand All @@ -15,4 +16,10 @@ val parentConnectionAction = ActionDefinition (
name = parentConnection,
resultType = Connection.reference,
parameters = listOf(item ofType any)
)

val defaultConnection = ActionDefinition (
name = defaultConnection,
resultType = Connection.reference,
parameters = listOf()
)
Expand Up @@ -7,6 +7,8 @@ package net.juniper.contrail.vro.workflows.custom
import net.juniper.contrail.vro.config.constants.Configuration
import net.juniper.contrail.vro.config.constants.Connection
import net.juniper.contrail.vro.config.constants.item
import net.juniper.contrail.vro.config.defaultConnection
import net.juniper.contrail.vro.workflows.dsl.fromAction
import net.juniper.contrail.vro.workflows.dsl.inCategory
import net.juniper.contrail.vro.workflows.dsl.withScript
import net.juniper.contrail.vro.workflows.dsl.workflow
Expand Down Expand Up @@ -59,6 +61,7 @@ internal fun deleteConnectionWorkflow() =
description = "$Connection to delete"
mandatory = true
showInInventory = true
dataBinding = fromAction(defaultConnection, type) {}
}
}.inCategory(Configuration)

Expand Down
Expand Up @@ -17,6 +17,7 @@ import net.juniper.contrail.vro.config.constants.Connection
import net.juniper.contrail.vro.config.constants.EndpointType
import net.juniper.contrail.vro.config.constants.ServiceType
import net.juniper.contrail.vro.config.constants.rule
import net.juniper.contrail.vro.config.defaultConnection
import net.juniper.contrail.vro.schema.Schema
import net.juniper.contrail.vro.schema.propertyDescription
import net.juniper.contrail.vro.schema.simpleTypeConstraints
Expand All @@ -27,6 +28,7 @@ import net.juniper.contrail.vro.workflows.dsl.ParameterAggregator
import net.juniper.contrail.vro.workflows.dsl.PresentationParametersBuilder
import net.juniper.contrail.vro.workflows.dsl.WhenNonNull
import net.juniper.contrail.vro.workflows.dsl.WorkflowDefinition
import net.juniper.contrail.vro.workflows.dsl.fromAction
import net.juniper.contrail.vro.workflows.model.array
import net.juniper.contrail.vro.workflows.model.reference
import net.juniper.contrail.vro.workflows.model.string
Expand All @@ -52,6 +54,7 @@ internal fun createPolicyManagementFirewallRule(schema: Schema): WorkflowDefinit
parameter(parentConnectionField, Connection.reference) {
description = "Contrail connection in which the rule will be created"
mandatory = true
dataBinding = fromAction(defaultConnection, type) {}
}
}
output(rule, reference<FirewallRule>()) {
Expand Down
Expand Up @@ -18,6 +18,8 @@ import net.juniper.contrail.vro.config.constants.item
import net.juniper.contrail.vro.config.constants.parent
import net.juniper.contrail.vro.config.constants.Connection
import net.juniper.contrail.vro.config.constants.supportedInterfaceNames
import net.juniper.contrail.vro.config.defaultConnection
import net.juniper.contrail.vro.workflows.dsl.fromAction
import net.juniper.contrail.vro.workflows.util.propertyDescription
import net.juniper.contrail.vro.workflows.util.relationDescription

Expand All @@ -34,6 +36,7 @@ internal fun createServiceTemplate(schema: Schema) : WorkflowDefinition {
parameter(parent, Connection.reference) {
description = "Parent connection"
mandatory = true
dataBinding = fromAction(defaultConnection, type) {}
}
parameter("name", string) {
description = "Name\nName of service template"
Expand Down
Expand Up @@ -11,9 +11,11 @@ import net.juniper.contrail.vro.config.allCapitalized
import net.juniper.contrail.vro.config.constants.Connection
import net.juniper.contrail.vro.config.constants.parent
import net.juniper.contrail.vro.config.listTagTypes
import net.juniper.contrail.vro.config.defaultConnection
import net.juniper.contrail.vro.schema.Schema
import net.juniper.contrail.vro.workflows.dsl.WorkflowDefinition
import net.juniper.contrail.vro.workflows.dsl.actionCallTo
import net.juniper.contrail.vro.workflows.dsl.fromAction
import net.juniper.contrail.vro.workflows.model.reference
import net.juniper.contrail.vro.workflows.model.string
import net.juniper.contrail.vro.workflows.util.propertyDescription
Expand All @@ -36,6 +38,8 @@ private fun createTag(schema: Schema, global: Boolean): WorkflowDefinition {
parameter(parent, parentName.reference) {
description = "Parent ${parentName.allCapitalized}"
mandatory = true
if (parentName == Connection)
dataBinding = fromAction(defaultConnection, type) {}
}
parameter("typeName", string) {
description = propertyDescription<Tag>(schema)
Expand Down
Expand Up @@ -9,7 +9,9 @@ import net.juniper.contrail.vro.config.constants.Connection
import net.juniper.contrail.vro.config.constants.name
import net.juniper.contrail.vro.config.constants.item
import net.juniper.contrail.vro.config.constants.parent
import net.juniper.contrail.vro.config.defaultConnection
import net.juniper.contrail.vro.workflows.dsl.WorkflowDefinition
import net.juniper.contrail.vro.workflows.dsl.fromAction
import net.juniper.contrail.vro.workflows.model.reference
import net.juniper.contrail.vro.workflows.model.string

Expand All @@ -25,6 +27,7 @@ internal fun createTagType(): WorkflowDefinition {
parameter(parent, Connection.reference) {
description = "Parent connection"
mandatory = true
dataBinding = fromAction(defaultConnection, type) {}
}
output(item, reference<TagType>()) {
description = "Tag Type created in this workflow"
Expand Down

0 comments on commit 3970a78

Please sign in to comment.