Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
emulab-stable
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
emulab
emulab-stable
Commits
776cc041
Commit
776cc041
authored
Aug 29, 2018
by
Leigh B Stoller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Simple addnode script for adding nodes from the command line.
parent
bf2a0c39
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
161 additions
and
1 deletion
+161
-1
utils/GNUmakefile.in
utils/GNUmakefile.in
+1
-1
utils/addnode.in
utils/addnode.in
+160
-0
No files found.
utils/GNUmakefile.in
View file @
776cc041
...
...
@@ -59,7 +59,7 @@ SBIN_SCRIPTS = vlandiff vlansync withadminprivs export_tables cvsupd.pl \
addrfdevice addrfpath reserve announce createimagealias \
predict test-reserve notify-reservations \
deprecate_image pushrootkey addinterface addwire cnetwatch \
addswitch addtypetoimages resutil addstack
addswitch addtypetoimages resutil addstack
addnode
WEB_SBIN_SCRIPTS= webnewnode webdeletenode webspewconlog webarchive_list \
webspewimage webdumpdescriptor webemulabfeature \
...
...
utils/addnode.in
0 → 100644
View file @
776cc041
#!/usr/bin/perl -w
#
# Copyright (c) 2003-2018 University of Utah and the Flux Group.
#
# {{{EMULAB-LICENSE
#
# This file is part of the Emulab network testbed software.
#
# This file is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
#
# This file is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
# License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this file. If not, see <http://www.gnu.org/licenses/>.
#
# }}}
#
use
strict
;
use
English
;
use
Getopt::
Std
;
use
Data::
Dumper
;
#
# Add a node to the DB. Just the node, interfaces and wire done with
# other scripts.
#
sub
usage
()
{
print
STDERR
"
Usage: addnode -t <type> <node_id>
\n
";
print
STDERR
"
Options:
\n
";
print
STDERR
"
-d - Turn on debugging
\n
";
print
STDERR
"
-n - Dry run mode
\n
";
print
STDERR
"
-t type - Type name (eg: bbg, spp, goober, whatever)
\n
";
exit
(
-
1
);
}
my
$optlist
=
"
t:dn
";
my
$debug
=
0
;
my
$impotent
=
0
;
my
$type
;
# Protos
sub
fatal
($);
sub
CreateNode
();
#
# Configure variables
#
my
$TB
=
"
@prefix
@
";
#
# Testbed Support libraries
#
use
lib
"
@prefix
@/lib
";
use
emdb
;
use
EmulabConstants
;
use
emutil
;
use
User
;
use
Node
;
use
NodeType
;
use
OSinfo
;
use
Experiment
;
use
Interface
;
#
# Turn off line buffering on output
#
$|
=
1
;
#
# Untaint the path
#
$ENV
{'
PATH
'}
=
"
/bin:/sbin:/usr/bin:
";
#
# Parse command arguments.
#
my
%options
=
();
if
(
!
getopts
(
$optlist
,
\
%options
))
{
usage
();
}
if
(
defined
(
$options
{'
h
'}))
{
usage
();
}
if
(
defined
(
$options
{'
d
'}))
{
$debug
=
1
;
}
if
(
defined
(
$options
{'
n
'}))
{
$impotent
=
1
;
}
if
(
defined
(
$options
{'
t
'}))
{
$type
=
$options
{'
t
'};
}
usage
()
if
(
@ARGV
!=
1
||
!
(
defined
(
$type
)));
my
$node_id
=
$ARGV
[
0
];
#
# Verify user, must be admin.
#
my
$this_user
=
User
->
ThisUser
();
if
(
!
defined
(
$this_user
))
{
fatal
("
You (
$UID
) do not exist!
");
}
if
(
!
$this_user
->
IsAdmin
())
{
fatal
("
You are not a testbed administrator!
");
}
#
# The node may not already exist.
#
if
(
Node
->
Lookup
(
$node_id
))
{
fatal
("
Node already exists in the DB
");
}
#
# Node type must exist, created elsewhere.
#
my
$nodetype
=
NodeType
->
Lookup
(
$type
);
if
(
!
defined
(
$nodetype
))
{
fatal
("
Node type does not exist in the DB
");
}
#
# Always start in hwdown.
#
my
$experiment
=
Experiment
->
Lookup
(
NODEDEAD_PID
(),
NODEDEAD_EID
());
if
(
!
defined
(
$nodetype
))
{
fatal
("
Could not lookup hwdown experiment
");
}
my
$blob
=
{
"
type
"
=>
$type
,
"
role
"
=>
"
testnode
",
"
initial_eventstate
"
=>
TBDB_NODESTATE_ISUP
(),
};
my
$node
;
print
"
Creating new node
$node_id
\n
";
if
(
!
$impotent
)
{
$node
=
Node
->
Create
(
$node_id
,
$experiment
,
$blob
);
if
(
!
defined
(
$node
))
{
fatal
("
Could not create new node
");
}
}
exit
(
0
);
sub
fatal
($)
{
my
(
$mesg
)
=
$_
[
0
];
die
("
*** $0:
\n
"
.
"
$mesg
\n
");
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment