Commit 4dbb8c2e authored by Jonathon Duerig's avatar Jonathon Duerig
Browse files

Added first draft of RSpec version 0.2. The biggest change is the addition of...

Added first draft of RSpec version 0.2. The biggest change is the addition of support for extensions. There are also a number of minor cleanups.
parent 5f742b0a
#
# EMULAB-COPYRIGHT
# Copyright (c) 2008-2009 University of Utah and the Flux Group.
# All rights reserved.
#
#
# Prototype of an advertisement RSpec, to be used by ProtoGENI
# Version 0.2
#
default namespace = "http://www.protogeni.net/resources/rspec/0.2"
include "common.rnc"
NodeContents &=
# Component identifiers
attribute component_id { text } &
attribute component_manager_id { text } &
attribute component_name { text }? &
# Indicates whether the node is in sharing mode: exclusive is true if
# the component manager will agree to promise not to share it.
attribute exclusive { xsd:boolean } &
# Indicate whether or not this node is available - the idea is that a
# full dump of the static physical topology will not include this, but
# that we can later get updates that include only this attribute (and a
# URN)
element available { AvailableContents } &
# Marks this node as a stand-in for a large network rather than a
# single machine. This means that other CMs can make external
# references to this node without a corresponding external reference
# in this advertisement. It also means that it makes sense for
# multiple physical links to connect to the same interface.
element cloud { AnyExtension } &
# Lists services provided by the CM for this node.
element services { ServiceContents } &
# Node type. This includes both hardware and software elements:
HardwareType* &
SoftwareType*
AvailableContents =
AnyExtension &
# Indictates current availability
attribute now { xsd:boolean }
LinkContents &=
# Component identifiers
attribute component_id { text } &
attribute component_manager_id { text } &
attribute component_name { text }?
InterfaceContents &=
attribute component_id { text } &
attribute component_name { text }? &
element monitoring { MonitoringContents }? &
attribute role { "control" | "experimental" | "mixed" }? &
attribute public_ipv4 { text }?
MonitoringContents &=
AnyExtension &
# True if user traffic moves through this interface and is available
# for monitoring.
attribute user_traffic { xsd:boolean }?
InterfaceRefContents &=
attribute component_id { text }
# Reference to components managed by other component managers.
ExternalReferenceContents &=
AnyExtension &
attribute component_id { text } &
attribute component_manager_id { text }?
ServiceContents &=
AnyExtension &
# Login services include ssh-services, serial consoles, etc.
element login { LoginServiceContents }* &
# Install services include download and extraction of a file at
# experiment startup.
element install { InstallServiceContents }* &
# Execute services include initialization scripts
element execute { ExecuteServiceContents }*
LoginServiceContents &=
AnyExtension &
# Authentication mechanism
attribute authentication { "ssh-keys" } &
# Access mechanism
attribute hostname { text } &
attribute port { text }
InstallServiceContents &=
AnyExtension &
# Type(s) of archives supported
attribute file_type { "tar.gz" | "tar.bz2" }
ExecuteServiceContents &=
AnyExtension &
# Shell environment allowed
attribute shell { "sh" }
RSpecContents &=
attribute type { "advertisement" } &
element external_ref {
ExternalReferenceContents
}*
start = RSpec
#
# EMULAB-COPYRIGHT
# Copyright (c) 2008-2009 University of Utah and the Flux Group.
# All rights reserved.
#
#
# Common definitions for advertisements, requests, and tickets
# Version 0.2
#
default namespace = "http://www.protogeni.net/resources/rspec/0.2"
include "any-extension.rnc"
RSpec = element rspec {
RSpecContents
}
RSpecContents =
AnyExtension &
# When this RSpec was generated - optional, can be used for determining
# staleness
attribute generated { xsd:dateTime }? &
# Who/what generated the rspec. This is purely informative and
# should not be used for any policy consideration. The format is
# not fixed.
attribute generated_by { text }? &
# How long this rspec is valid - in the case of a ticket, this indicates
# how long the holder may use the resources. For a resource request, it's
# how long we want the resources. For an advertisement, it might be a hint
# as to how long it's okay to cache this rspec.
attribute valid_until { xsd:dateTime }? &
# One or more nodes/links
Node* &
Link*
Node = element node { NodeContents }
Link = element link { LinkContents }
NodeContents =
AnyExtension &
# A relation indicates that this node has a relationship with
# another node. It may be hosted on that node, share important
# resources, etc.
element relation { RelationContents }* &
# Information about the nodes physical location
element location { LocationContents } &
# List of interfaces on this node. Interfaces are declared here. So
# all information about a particular interface including types
# belongs in the declaration. Other references to interfaces
# should just uniquely identify them and refer back here.
element interface {
InterfaceContents
}*
RelationContents =
AnyExtension
LocationContents =
AnyExtension &
# The two-letter ISO 3166 code for the country the node is in.
attribute country { text } &
# Longitude and Latitude coordinates of the node using the
# WGS 84 standard.
attribute longitude { text }? &
attribute latitude { text }?
InterfaceContents = AnyExtension
LinkContents =
AnyExtension &
# Network properties of this link. These include capacity,
# latency, loss, etc.
element property {
LinkPropertyContents
}* &
# Link type which describes what transport mechanism this link
# will use or provides.
LinkType* &
# The interfaces which this link spans.
element interface_ref {
InterfaceRefContents
}*
InterfaceRefContents = AnyExtension
# The unidirectional network properties of a link.
LinkPropertyContents =
AnyExtension &
# URNs for the source and destination interface pair describing
# the direction. These are physical identifiers in an
# advertisement and virtual identifiers in other kinds of RSpecs.
attribute source_id { text } &
attribute dest_id { text } &
# Capacity of the link in kbps
attribute capacity { text }? &
# One-way latency of the link in ms
attribute latency { text }? &
# Static packet loss probability as a fraction (0.01 means 1% packet loss)
attribute packet_loss { text }?
LinkType = element link_type {
AnyExtension &
attribute name { text } &
attribute class { text }
}
LinkClass = element link_class {
AnyExtension &
attribute name { text }
}
SoftwareType = element software_type {
AnyExtension &
attribute name { text }
}
HardwareType = element hardware_type {
AnyExtension &
attribute name { text }
}
#
# EMULAB-COPYRIGHT
# Copyright (c) 2009 University of Utah and the Flux Group.
# All rights reserved.
#
#
# Schema for a manifest RSpec, to be used by ProtoGENI
#
include "request.rnc"
NodeContents &=
attribute sliver_id { text }
LinkContents &=
attribute sliver_id { text }
#
# EMULAB-COPYRIGHT
# Copyright (c) 2008 University of Utah and the Flux Group.
# All rights reserved.
#
#
# Prototype of a request RSpec, to be used by ProtoGENI
# Version 0.2
#
default namespace = "http://www.protogeni.net/resources/rspec/0.2"
include "common.rnc"
# The ComponentName will only be available after an assignment
NodeContents &=
# Client-specified identifier
attribute client_id { text } &
# Component used to create the sliver
attribute component_id { text } &
attribute component_manager_id { text } &
attribute component_name { text }? &
# Indicates whether the user is requesting this node exclusively
attribute exclusive { xsd:boolean }? &
# Indicates an equivalence class to determine which other slivers
# should be created on the same physical node.
attribute colocate { text }? &
# The type of node this sliver should be bound to. At most one kind
# of hardware type may be specified and the software type must be
# specified.
HardwareType? &
SoftwareType
# The LinkMapping will only be available after an assignment
LinkContents &=
attribute client_id { text } &
element component_hop { ComponentHopContents }*
# The ComponentInterfaceDeclName will only be available after an assignment
InterfaceContents &=
attribute component_id { text }? &
attribute client_id { text }
# The ComponentInterfaceRefName will only be available after an assignment
InterfaceRefContents &=
attribute client_id { text }
RSpecContents &=
attribute type { "request" }
# A request link is mapped to an arbitrary topology which represents
# the virtual LAN/link which embodies it. Note that nodes do not
# provide any additional information and can be derived from the
# interface mapping.
ComponentHopContents &=
AnyExtension &
# Component ID of the link
attribute component_id { text } &
attribute component_manager_id { text } &
InterfaceMapping*
# Each interface represents a particular physical interface. If that
# interface is one of the link end points, it is also mapped to that
# virtual interface name.
InterfaceMapping = element interface_ref {
AnyExtension &
# Component ID of the interface
attribute component_id { text } &
attribute component_manager_id { text } &
attribute client_id { text }?
}
start = RSpec
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment