lang: funcs: core: Move world API functions

Some of the core functions interact with the remote "world" API. Move
them all into the same package.
This commit is contained in:
James Shubin
2019-02-07 12:32:32 -05:00
parent 4eaff892c1
commit 90fa83a5cf
9 changed files with 40 additions and 11 deletions

View File

@@ -6,9 +6,10 @@
# time ./mgmt run --hostname h4 --seeds http://127.0.0.1:2379 --client-urls http://127.0.0.1:2385 --server-urls http://127.0.0.1:2386 --tmp-prefix --no-pgp lang --lang examples/lang/exchange0.mcl # time ./mgmt run --hostname h4 --seeds http://127.0.0.1:2379 --client-urls http://127.0.0.1:2385 --server-urls http://127.0.0.1:2386 --tmp-prefix --no-pgp lang --lang examples/lang/exchange0.mcl
import "sys" import "sys"
import "world"
$rand = random1(8) $rand = random1(8)
$exchanged = exchange("keyns", $rand) $exchanged = world.exchange("keyns", $rand)
file "/tmp/mgmt/exchange-${sys.hostname()}" { file "/tmp/mgmt/exchange-${sys.hostname()}" {
content => template("Found: {{ . }}\n", $exchanged), content => template("Found: {{ . }}\n", $exchanged),

View File

@@ -1,4 +1,5 @@
import "sys" import "sys"
import "world"
# here are all the possible options: # here are all the possible options:
#$opts = struct{strategy => "rr", max => 3, reuse => false, ttl => 10,} #$opts = struct{strategy => "rr", max => 3, reuse => false, ttl => 10,}
@@ -10,10 +11,10 @@ import "sys"
$opts = struct{strategy => "rr", max => 2, ttl => 10,} $opts = struct{strategy => "rr", max => 2, ttl => 10,}
# schedule in a particular namespace with options: # schedule in a particular namespace with options:
$set = schedule("xsched", $opts) $set = world.schedule("xsched", $opts)
# and if you want, you can omit the options entirely: # and if you want, you can omit the options entirely:
#$set = schedule("xsched") #$set = world.schedule("xsched")
file "/tmp/mgmt/scheduled-${sys.hostname()}" { file "/tmp/mgmt/scheduled-${sys.hostname()}" {
content => template("set: {{ . }}\n", $set), content => template("set: {{ . }}\n", $set),

View File

@@ -1,7 +1,8 @@
import "fmt" import "fmt"
import "world"
$ns = "estate" $ns = "estate"
$exchanged = kvlookup($ns) $exchanged = world.kvlookup($ns)
$state = maplookup($exchanged, $hostname, "default") $state = maplookup($exchanged, $hostname, "default")
exec "exec0" { exec "exec0" {

View File

@@ -1,5 +1,7 @@
import "world"
$ns = "estate" $ns = "estate"
$exchanged = kvlookup($ns) $exchanged = world.kvlookup($ns)
$state = maplookup($exchanged, $hostname, "default") $state = maplookup($exchanged, $hostname, "default")

View File

@@ -26,4 +26,5 @@ import (
_ "github.com/purpleidea/mgmt/lang/funcs/core/os" _ "github.com/purpleidea/mgmt/lang/funcs/core/os"
_ "github.com/purpleidea/mgmt/lang/funcs/core/strings" _ "github.com/purpleidea/mgmt/lang/funcs/core/strings"
_ "github.com/purpleidea/mgmt/lang/funcs/core/sys" _ "github.com/purpleidea/mgmt/lang/funcs/core/sys"
_ "github.com/purpleidea/mgmt/lang/funcs/core/world"
) )

View File

@@ -15,7 +15,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
package core // TODO: should this be in its own individual package? package coreworld
import ( import (
"fmt" "fmt"
@@ -28,7 +28,7 @@ import (
) )
func init() { func init() {
funcs.Register("exchange", func() interfaces.Func { return &ExchangeFunc{} }) // must register the func and name funcs.ModuleRegister(moduleName, "exchange", func() interfaces.Func { return &ExchangeFunc{} })
} }
// ExchangeFunc is special function which returns all the values of a given key // ExchangeFunc is special function which returns all the values of a given key

View File

@@ -15,7 +15,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
package core // TODO: should this be in its own individual package? package coreworld
import ( import (
"fmt" "fmt"
@@ -28,7 +28,7 @@ import (
) )
func init() { func init() {
funcs.Register("kvlookup", func() interfaces.Func { return &KVLookupFunc{} }) // must register the func and name funcs.ModuleRegister(moduleName, "kvlookup", func() interfaces.Func { return &KVLookupFunc{} })
} }
// KVLookupFunc is special function which returns all the values of a given key // KVLookupFunc is special function which returns all the values of a given key

View File

@@ -27,7 +27,7 @@
// kill h2 // kill h2
// kill h1... all done! // kill h1... all done!
package core // TODO: should this be in its own individual package? package coreworld
import ( import (
"context" "context"
@@ -47,7 +47,7 @@ const (
) )
func init() { func init() {
funcs.Register("schedule", func() interfaces.Func { return &SchedulePolyFunc{} }) // must register the func and name funcs.ModuleRegister(moduleName, "schedule", func() interfaces.Func { return &SchedulePolyFunc{} })
} }
// SchedulePolyFunc is special function which determines where code should run // SchedulePolyFunc is special function which determines where code should run

View File

@@ -0,0 +1,23 @@
// Mgmt
// Copyright (C) 2013-2018+ James Shubin and the project contributors
// Written by James Shubin <james@shubin.ca> and the project contributors
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program 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 General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package coreworld
const (
// moduleName is the prefix given to all the functions in this module.
moduleName = "world"
)