• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Golang ssh_broker.Broker类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Golang中github.com/att/gopkgs/ssh_broker.Broker的典型用法代码示例。如果您正苦于以下问题:Golang Broker类的具体用法?Golang Broker怎么用?Golang Broker使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



在下文中一共展示了Broker类的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。

示例1: do_mirrorwiz

/*
 *  Invoke the tegu_add_mirror or tegu_del_mirror command on a remote host in order to add/remove a mirror.
 */
func do_mirrorwiz(req json_action, broker *ssh_broker.Broker, path *string) {
	startt := time.Now().UnixNano()

	cstr := ""
	switch req.Qdata[0] {
	case "add":
		cstr = fmt.Sprintf(`PATH=%s:$PATH tegu_add_mirror %s %s %s`, *path, req.Qdata[1], req.Qdata[2], req.Qdata[3])
		if len(req.Qdata) > 4 {
			// If VLAN list is in the arguments, tack that on the end
			cstr += " " + req.Qdata[4]
		}

	case "del":
		cstr = fmt.Sprintf(`PATH=%s:$PATH tegu_del_mirror %s`, *path, req.Qdata[1])
	}
	if cstr != "" {
		sheep.Baa(1, "via broker on %s: %s", req.Hosts[0], cstr)
		_, stderr, err := broker.Run_cmd(req.Hosts[0], cstr)
		if err != nil {
			sheep.Baa(0, "ERR: send mirror cmd failed host=%s: %s	[TGUAGN005]", req.Hosts[0], err)
		} else {
			sheep.Baa(2, "mirror cmd succesfully sent: %s", cstr)
		}
		if sheep.Would_baa(2) || err != nil {
			dump_stderr(*stderr, "addmirror"+req.Hosts[0]) // always dump on error, or if chatty
		}
	} else {
		sheep.Baa(0, "Unrecognized mirror command: "+req.Qdata[0])
	}
	endt := time.Now().UnixNano()
	sheep.Baa(1, "do_mirrorwiz: %d ms elapsed", (endt-startt)/1000)
}
开发者ID:robert-eby,项目名称:tegu,代码行数:35,代码来源:tegu_agent.go


示例2: do_fmod

/*
	Extracts the information from the action passed in and causes the fmod command
	to be executed.
*/
func do_fmod(req json_action, broker *ssh_broker.Broker, path *string, timeout time.Duration) (err error) {

	startt := time.Now().Unix()

	errcount := 0
	for f := range req.Fdata {
		cstr := fmt.Sprintf(`PATH=%s:$PATH send_ovs_fmod %s`, *path, req.Fdata[f])

		ssh_rch := make(chan *ssh_broker.Broker_msg, 256) // channel for ssh results
		// do NOT close the channel here; only senders should close

		wait4 := 0 // number of responses to wait for
		for i := range req.Hosts {
			sheep.Baa(1, "via broker on %s send fmod: %s", req.Hosts[i], cstr)

			err := broker.NBRun_cmd(req.Hosts[i], cstr, wait4, ssh_rch) // sends the file as input to be executed on the host
			if err != nil {
				msg_007(req.Hosts[i], cstr, err)
			} else {
				wait4++
			}
		}

		timer_pop := false
		errcount := 0
		for wait4 > 0 && !timer_pop { // collect responses logging any errors
			select {
			case <-time.After(timeout * time.Second): // timeout
				msg_008(wait4)
				timer_pop = true

			case resp := <-ssh_rch: // response back from the broker
				wait4--
				_, stderr, elapsed, err := resp.Get_results()
				host, _, _ := resp.Get_info()
				sheep.Baa(1, "send-fmod: received response from %s elap=%d err=%v, waiting for %d more", host, elapsed, err != nil, wait4)
				if err != nil {
					sheep.Baa(0, "ERR: unable to execute send-fmod command on %s: data=%s  %s	[TGUAGN004]", host, cstr, err)
					errcount++
				} else {
					sheep.Baa(1, "flow mod set on: %s", host)
				}
				if err != nil || sheep.Would_baa(2) {
					dump_stderr(stderr, "send-fmod"+host) // always dump on error, or if chatty
				}
			}
		}
	}

	endt := time.Now().Unix()
	sheep.Baa(1, "fmod: %ds elapsed %d fmods %d errors", endt-startt, len(req.Fdata), errcount)

	return
}
开发者ID:robert-eby,项目名称:tegu,代码行数:58,代码来源:tegu_agent.go


示例3: do_intermedq

/*
	Executes the setup_ovs_intermed script on each host listed. This command can take
	a significant amount of time on each host (10s of seconds) and so we submit the
	command to the broker for each host in non-blocking mode to allow them to
	run concurrently. Once submitted, we collect the results (reporting errors)
	as the broker writes the response back on the channel.
*/
func do_intermedq(req json_action, broker *ssh_broker.Broker, path *string, timeout time.Duration) {

	startt := time.Now().Unix()

	running_sim = true // prevent queuing another of these
	sheep.Baa(1, "running intermediate switch queue/fmod setup on all hosts (broker)")

	ssh_rch := make(chan *ssh_broker.Broker_msg, 256) // channel for ssh results
	// do NOT close the channel here; only senders should close

	wait4 := 0 // number of responses to wait for
	for i := range req.Hosts {
		cmd_str := fmt.Sprintf(`PATH=%s:$PATH setup_ovs_intermed -d "%s"`, *path, req.Dscps)
		sheep.Baa(1, "via broker on %s: %s", req.Hosts[i], cmd_str)

		err := broker.NBRun_cmd(req.Hosts[i], cmd_str, wait4, ssh_rch)
		if err != nil {
			msg_007(req.Hosts[i], cmd_str, err)
		} else {
			wait4++
		}
	}

	timer_pop := false
	errcount := 0
	for wait4 > 0 && !timer_pop { // collect responses logging any errors
		select {
		case <-time.After(timeout * time.Second): // timeout
			msg_008(wait4)
			timer_pop = true

		case resp := <-ssh_rch: // response back from the broker
			wait4--
			_, stderr, elapsed, err := resp.Get_results()
			host, _, _ := resp.Get_info()
			sheep.Baa(2, "setup-intermed: received response from %s elap=%d err=%v, waiting for %d more", host, elapsed, err != nil, wait4)
			if err != nil {
				msg_009("setup_intermed", host)
				errcount++
			}
			if err != nil || sheep.Would_baa(2) {
				dump_stderr(stderr, "setup-intermed"+host) // always dump on error, or if chatty
			}
		}
	}

	endt := time.Now().Unix()
	sheep.Baa(1, "setup-intermed: timeout=%v %ds elapsed for %d hosts %d errors", timer_pop, endt-startt, len(req.Hosts), errcount)
	running_sim = false
}
开发者ID:robert-eby,项目名称:tegu,代码行数:57,代码来源:tegu_agent.go


示例4: test_cmd

/*
	run a command --  run as a go routine to run multiple in parallel
*/
func test_cmd(broker *ssh_broker.Broker, ch chan int, host *string, cmd *string) {

	fmt.Fprintf(os.Stderr, "test_cmd: running command %s\n", *cmd)
	stdout, stderr, err := broker.Run_cmd(*host, *cmd)
	if err != nil {
		fmt.Fprintf(os.Stderr, "command failed: %s:  %s \n", *host, err)
		fmt.Fprintf(os.Stderr, "%s", stderr.String())
	} else {
		fmt.Fprintf(os.Stderr, "command was successful:\n")
		fmt.Printf("%s\n", stdout.String())
	}

	fmt.Fprintf(os.Stderr, "go routine done: %s \n", *cmd)
	ch <- 1

	return
}
开发者ID:dhanunjaya,项目名称:gopkgs,代码行数:20,代码来源:debug_ssh_broker.go


示例5: test_script

/*
	run a local script --  run as a go routine to run multiple in parallel
*/
func test_script(broker *ssh_broker.Broker, ch chan int, host *string, script *string, parms *string, env_file *string) {

	fmt.Fprintf(os.Stderr, "running commnand=%s parms=%s\n", *script, *parms)
	stdout, stderr, err := broker.Run_on_host(*host, *script, *parms, *env_file)
	if err != nil {
		fmt.Fprintf(os.Stderr, "command failed: %s:  %s \n", *host, err)
		fmt.Fprintf(os.Stderr, "%s", stderr.String())
	} else {
		fmt.Fprintf(os.Stderr, "command was successful:\n")
		fmt.Printf("%s\n", stdout.String())
	}

	fmt.Fprintf(os.Stderr, "go routine done:%s \n", *parms)
	ch <- 1

	return
}
开发者ID:dhanunjaya,项目名称:gopkgs,代码行数:20,代码来源:debug_ssh_broker.go


示例6: do_setqueues

/*
	Execute a create_ovs_queues for each host in the list. The create queues script is unique inasmuch
	as it expects an input file that is supplied either as a filename as $1, or on stdin if $1 is omitted.
	To send the data file for the command to execute, we'll create a tmp file on the local machine which
	is a script that echos the data into the script:
		cat <<endKat | create_ovs_queues
			data passed to us
		endKat

	We'll use the brokers 'send script for execution' feature rather to execute our script.
*/
func do_setqueues(req json_action, broker *ssh_broker.Broker, path *string, timeout time.Duration) {
	var (
		err error
	)

	startt := time.Now().Unix()

	fname := fmt.Sprintf("/tmp/tegu_setq_%d_%x_%02d.data", os.Getpid(), time.Now().Unix(), rand.Intn(10))
	sheep.Baa(3, "adjusting queues: creating %s will contain %d items", fname, len(req.Qdata))

	f, err := os.Create(fname)
	if err != nil {
		sheep.Baa(0, "ERR: unable to create data file: %s: %s	[TGUAGN002]", fname, err)
		return
	}

	fmt.Fprintf(f, "#!/usr/bin/env ksh\ncat <<endKat | PATH=%s:$PATH create_ovs_queues\n", *path)
	for i := range req.Qdata {
		sheep.Baa(3, "writing queue info: %s", req.Qdata[i])
		fmt.Fprintf(f, "%s\n", req.Qdata[i])
	}
	fmt.Fprintf(f, "endKat\n")

	err = f.Close()
	if err != nil {
		sheep.Baa(0, "ERR: unable to create data file (close): %s: %s	[TGUAGN003]", fname, err)
		return
	}

	ssh_rch := make(chan *ssh_broker.Broker_msg, 256) // channel for ssh results
	// do NOT close the channel here; only senders should close

	wait4 := 0 // number of responses to wait for
	for i := range req.Hosts {
		sheep.Baa(1, "via broker on %s: create_ovs_queues embedded in %s", req.Hosts[i], fname)

		err := broker.NBRun_on_host(req.Hosts[i], fname, "", wait4, ssh_rch) // sends the file as input to be executed on the host
		if err != nil {
			msg_007(req.Hosts[i], "create_ovs_queues", err)
		} else {
			wait4++
		}
	}

	timer_pop := false
	errcount := 0
	for wait4 > 0 && !timer_pop { // collect responses logging any errors
		select {
		case <-time.After(timeout * time.Second): // timeout
			msg_008(wait4)
			timer_pop = true

		case resp := <-ssh_rch: // response back from the broker
			wait4--
			_, stderr, elapsed, err := resp.Get_results()
			host, _, _ := resp.Get_info()
			sheep.Baa(2, "create-q: received response from %s elap=%d err=%v, waiting for %d more", host, elapsed, err != nil, wait4)
			if err != nil {
				sheep.Baa(0, "ERR: unable to execute set queue command on %s: data=%s: %s  [TGUAGN004]", host, fname, err)
				errcount++
			} else {
				sheep.Baa(1, "queues adjusted succesfully on: %s", host)
			}
			if err != nil || sheep.Would_baa(2) {
				dump_stderr(stderr, "create-q"+host) // always dump on error, or if chatty
			}
		}
	}

	endt := time.Now().Unix()
	sheep.Baa(1, "create-q: timeout=%v %ds elapsed %d hosts %d errors", timer_pop, endt-startt, len(req.Hosts), errcount)

	if errcount == 0 { // ditch the script we built earlier if all successful
		os.Remove(fname)
	} else {
		sheep.Baa(1, "create-q: %d errors, generated script file kept: %s", fname)
	}

}
开发者ID:robert-eby,项目名称:tegu,代码行数:90,代码来源:tegu_agent.go


示例7: do_map_mac2phost

/*
	Generate a map that lists physical host and mac addresses. Timeout is the max number of
	seconds that we will wait for all responses.  If timeout seconds passes before all
	responses are received we will return what we have. The map command is executed on all
	hosts, so we send a non-blocking command to the broker for each host and wait for the
	responses to come back on the channel.  This allows them to run in parallel across
	the cluster.
*/
func do_map_mac2phost(req json_action, broker *ssh_broker.Broker, path *string, timeout time.Duration) (jout []byte, err error) {
	var (
		cmd_str string
	)

	startt := time.Now().Unix()

	ssh_rch := make(chan *ssh_broker.Broker_msg, 256) // channel for ssh results
	// do NOT close this channel, only senders should close

	wait4 := 0                    // number of responses to wait for
	for k, v := range req.Hosts { // submit them all out non-blocking
		cmd_str = fmt.Sprintf("PATH=%s:$PATH map_mac2phost -p %s localhost", *path, v)
		err := broker.NBRun_cmd(req.Hosts[k], cmd_str, wait4, ssh_rch)
		if err != nil {
			msg_007(req.Hosts[k], cmd_str, err)
		} else {
			wait4++
		}
	}

	msg := agent_msg{} // message to return
	msg.Ctype = "response"
	msg.Rtype = "map_mac2phost"
	msg.Vinfo = version
	msg.State = 0

	rdata := make([]string, 8192) // might need to revisit this limit
	ridx := 0

	sheep.Baa(2, "map_mac2phost: waiting for %d responses", wait4)
	timer_pop := false // indicates a timeout for loop exit
	errcount := 0
	for wait4 > 0 && !timer_pop { // wait for responses back on the channel or the timer to pop
		select {
		case <-time.After(timeout * time.Second): // timeout after 15 seconds
			msg_008(wait4)
			timer_pop = true

		case resp := <-ssh_rch: // response from broker
			wait4--
			stdout, stderr, elapsed, err := resp.Get_results()
			host, _, _ := resp.Get_info()
			sheep.Baa(2, "map_mac2phost: received response from %s elap=%d err=%v, waiting for %d more", host, elapsed, err != nil, wait4)
			if err != nil {
				msg_009("map_mac2phost", host)
				errcount++
			} else {
				ridx = buf_into_array(stdout, rdata, ridx) // capture what came back for return
			}
			if err != nil || sheep.Would_baa(2) {
				dump_stderr(stderr, "map_mac2phost"+host) // always dump stderr on error, or in chatty mode
			}
		}
	}

	msg.Rdata = rdata[0:ridx] // return just what was filled in
	endt := time.Now().Unix()
	sheep.Baa(1, "map-mac2phost: timeout=%v %ds elapsed for %d hosts %d errors %d elements", timer_pop, endt-startt, len(req.Hosts), errcount, len(msg.Rdata))

	jout, err = json.Marshal(msg)
	return
}
开发者ID:robert-eby,项目名称:tegu,代码行数:71,代码来源:tegu_agent.go


示例8: do_bwow_fmod

/*
	Oneway bandwidth flow-mod generation rolls the creation of a set of flow-mods into a single script which
	eliminates the need for Tegu to understand/know things like command line parms, bridge names and
	such.  Parms in the map are converted to script command line options.
*/
func (act *json_action) do_bwow_fmod(cmd_type string, broker *ssh_broker.Broker, path *string, timeout time.Duration) (jout []byte, err error) {
	var (
		cmd_str string
	)

	pstr := ""
	if path != nil {
		pstr = fmt.Sprintf("PATH=%s:$PATH ", *path) // path to add if needed
	}

	parms := act.Data
	cmd_str = fmt.Sprintf(`%sql_bwow_fmods `, pstr) +
		build_opt(parms["smac"], "-s") +
		build_opt(parms["dmac"], "-d") +
		build_opt(parms["extip"], "-E") +
		build_opt(parms["sproto"], "-p") +
		build_opt(parms["dproto"], "-P") +
		build_opt(parms["queue"], "-q") +
		build_opt(parms["timeout"], "-t") +
		build_opt(parms["dscp"], "-T") +
		build_opt(parms["vlan_match"], "-V") +
		build_opt(parms["ipv6"], "-6")

	sheep.Baa(1, "via broker on %s: %s", act.Hosts[0], cmd_str)

	msg := agent_msg{} // build response to send back
	msg.Ctype = "response"
	msg.Rtype = cmd_type
	msg.Rid = act.Aid // response id so tegu can map back to requestor
	msg.Vinfo = version
	msg.State = 0 // assume success

	ssh_rch := make(chan *ssh_broker.Broker_msg, 256) // channel for ssh results
	// do NOT close the channel here; only senders should close
	err = broker.NBRun_cmd(act.Hosts[0], cmd_str, 0, ssh_rch) // oneway fmods are only ever applied to one host so [0] is ok
	if err != nil {
		sheep.Baa(1, "WRN: error submitting bwow command  to %s: %s", act.Hosts[0], err)
		jout, _ = json.Marshal(msg)
		return
	}

	// TODO: this can be moved to a function
	rdata := make([]string, 8192) // response output converted to strings
	edata := make([]string, 8192)
	ridx := 0 // index of next insert point into rdata
	wait4 := 1
	timer_pop := false
	for wait4 > 0 && !timer_pop { // wait for response back on the channel or the timer to pop
		select {
		case <-time.After(timeout * time.Second): // timeout if we don't get something back soonish
			sheep.Baa(1, "WRN: timeout waiting for response from %s; cmd: %s", act.Hosts[0], cmd_str)
			timer_pop = true

		case resp := <-ssh_rch: // response from broker
			wait4--
			stdout, stderr, _, err := resp.Get_results()
			host, _, _ := resp.Get_info()
			eidx := buf_into_array(stderr, edata, 0) // capture error messages, if any
			msg.Edata = edata[0:eidx]
			if err != nil {
				msg.State = 1
				sheep.Baa(1, "WRN: error running command: host=%s: %s", host, err)
			} else {
				ridx = buf_into_array(stdout, rdata, ridx) // capture what came back for return
			}
			if err != nil || sheep.Would_baa(2) {
				dump_stderr(stderr, "bw_fmod "+host) // always dump stderr on error, or in chatty mode
			}
		}
	}

	msg.Rdata = rdata[0:ridx] // return just what was filled in

	if msg.State > 0 {
		sheep.Baa(1, "bwow_fmod (%s) failed: stdout: %d lines;  stderr: %d lines", cmd_type, len(msg.Rdata), len(msg.Edata))
		sheep.Baa(0, "ERR: %s unable to execute: %s	[TGUAGN000]", cmd_type, cmd_str)
	} else {
		sheep.Baa(1, "bwow_fmod cmd (%s) completed: stdout: %d lines;  stderr: %d lines", cmd_type, len(msg.Rdata), len(msg.Edata))
	}

	jout, err = json.Marshal(msg)
	return
}
开发者ID:robert-eby,项目名称:tegu,代码行数:88,代码来源:tegu_agent.go



注:本文中的github.com/att/gopkgs/ssh_broker.Broker类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Golang gizmos.Host类代码示例发布时间:2022-05-24
下一篇:
Golang ostack.Ostack类代码示例发布时间:2022-05-24
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap