269 lines
7 KiB
Bash
Executable file
269 lines
7 KiB
Bash
Executable file
#!/bin/bash
|
|
# Jukebox example from rfc 8040 Appendix A.1
|
|
# ASsumes fjukebox is set to name of yang file
|
|
|
|
cat <<EOF > $fjukebox
|
|
module example-jukebox {
|
|
|
|
namespace "http://example.com/ns/example-jukebox";
|
|
prefix "jbox";
|
|
|
|
organization "Example, Inc.";
|
|
contact "support at example.com";
|
|
description "Example Jukebox Data Model Module.";
|
|
revision "2016-08-15" {
|
|
description "Initial version.";
|
|
reference "example.com document 1-4673.";
|
|
}
|
|
|
|
identity genre {
|
|
description
|
|
"Base for all genre types.";
|
|
}
|
|
|
|
// abbreviated list of genre classifications
|
|
identity alternative {
|
|
base genre;
|
|
description
|
|
"Alternative music.";
|
|
}
|
|
identity blues {
|
|
base genre;
|
|
description
|
|
"Blues music.";
|
|
}
|
|
identity country {
|
|
base genre;
|
|
description
|
|
"Country music.";
|
|
}
|
|
identity jazz {
|
|
base genre;
|
|
description
|
|
"Jazz music.";
|
|
}
|
|
identity pop {
|
|
base genre;
|
|
description
|
|
"Pop music.";
|
|
}
|
|
identity rock {
|
|
base genre;
|
|
description
|
|
"Rock music.";
|
|
}
|
|
|
|
container jukebox {
|
|
presence
|
|
"An empty container indicates that the jukebox
|
|
service is available.";
|
|
|
|
description
|
|
"Represents a 'jukebox' resource, with a library, playlists,
|
|
and a 'play' operation.";
|
|
|
|
container library {
|
|
|
|
description
|
|
"Represents the 'jukebox' library resource.";
|
|
|
|
list artist {
|
|
key name;
|
|
description
|
|
"Represents one 'artist' resource within the
|
|
'jukebox' library resource.";
|
|
|
|
leaf name {
|
|
type string {
|
|
length "1 .. max";
|
|
}
|
|
description
|
|
"The name of the artist.";
|
|
}
|
|
|
|
list album {
|
|
key name;
|
|
description
|
|
"Represents one 'album' resource within one
|
|
'artist' resource, within the jukebox library.";
|
|
|
|
leaf name {
|
|
type string {
|
|
length "1 .. max";
|
|
}
|
|
description
|
|
"The name of the album.";
|
|
}
|
|
|
|
leaf genre {
|
|
type identityref { base genre; }
|
|
description
|
|
"The genre identifying the type of music on
|
|
the album.";
|
|
}
|
|
|
|
leaf year {
|
|
type uint16 {
|
|
range "1900 .. max";
|
|
}
|
|
description
|
|
"The year the album was released.";
|
|
}
|
|
|
|
container admin {
|
|
description
|
|
"Administrative information for the album.";
|
|
|
|
leaf label {
|
|
type string;
|
|
description
|
|
"The label that released the album.";
|
|
}
|
|
leaf catalogue-number {
|
|
type string;
|
|
description
|
|
"The album's catalogue number.";
|
|
}
|
|
}
|
|
|
|
list song {
|
|
key name;
|
|
description
|
|
"Represents one 'song' resource within one
|
|
'album' resource, within the jukebox library.";
|
|
|
|
leaf name {
|
|
type string {
|
|
length "1 .. max";
|
|
}
|
|
description
|
|
"The name of the song.";
|
|
}
|
|
|
|
leaf location {
|
|
type string;
|
|
mandatory true;
|
|
description
|
|
"The file location string of the
|
|
media file for the song.";
|
|
}
|
|
leaf format {
|
|
type string;
|
|
description
|
|
"An identifier string for the media type
|
|
for the file associated with the
|
|
'location' leaf for this entry.";
|
|
}
|
|
leaf length {
|
|
type uint32;
|
|
units "seconds";
|
|
description
|
|
"The duration of this song in seconds.";
|
|
}
|
|
} // end list 'song'
|
|
} // end list 'album'
|
|
} // end list 'artist'
|
|
|
|
leaf artist-count {
|
|
type uint32;
|
|
units "artists";
|
|
config false;
|
|
description
|
|
"Number of artists in the library.";
|
|
}
|
|
leaf album-count {
|
|
type uint32;
|
|
units "albums";
|
|
config false;
|
|
description
|
|
"Number of albums in the library.";
|
|
}
|
|
leaf song-count {
|
|
type uint32;
|
|
units "songs";
|
|
config false;
|
|
description
|
|
"Number of songs in the library.";
|
|
}
|
|
} // end library
|
|
|
|
list playlist {
|
|
key name;
|
|
description
|
|
"Example configuration data resource.";
|
|
|
|
leaf name {
|
|
type string;
|
|
description
|
|
"The name of the playlist.";
|
|
}
|
|
leaf description {
|
|
type string;
|
|
description
|
|
"A comment describing the playlist.";
|
|
}
|
|
list song {
|
|
key index;
|
|
ordered-by user;
|
|
|
|
description
|
|
"Example nested configuration data resource.";
|
|
|
|
leaf index { // not really needed
|
|
type uint32;
|
|
description
|
|
"An arbitrary integer index for this playlist song.";
|
|
}
|
|
leaf id {
|
|
type instance-identifier;
|
|
mandatory true;
|
|
description
|
|
"Song identifier. Must identify an instance of
|
|
/jukebox/library/artist/album/song/name.";
|
|
}
|
|
}
|
|
}
|
|
|
|
container player {
|
|
description
|
|
"Represents the jukebox player resource.";
|
|
|
|
leaf gap {
|
|
type decimal64 {
|
|
fraction-digits 1;
|
|
range "0.0 .. 2.0";
|
|
}
|
|
units "tenths of seconds";
|
|
description
|
|
"Time gap between each song.";
|
|
}
|
|
}
|
|
}
|
|
|
|
rpc play {
|
|
description
|
|
"Control function for the jukebox player.";
|
|
input {
|
|
leaf playlist {
|
|
type string;
|
|
mandatory true;
|
|
description
|
|
"The playlist name.";
|
|
}
|
|
leaf song-number {
|
|
type uint32;
|
|
mandatory true;
|
|
description
|
|
"Song number in playlist to play.";
|
|
}
|
|
}
|
|
}
|
|
leaf-list extra{
|
|
type string;
|
|
ordered-by user;
|
|
description "Extra added to test ordered-by user inserts on leaf-lists";
|
|
}
|
|
}
|
|
EOF
|
|
|
|
|