本文整理匯總了Golang中code/cloudfoundry/org/garden.Container.Run方法的典型用法代碼示例。如果您正苦於以下問題:Golang Container.Run方法的具體用法?Golang Container.Run怎麽用?Golang Container.Run使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類code/cloudfoundry/org/garden.Container
的用法示例。
在下文中一共展示了Container.Run方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: readFile
func readFile(container garden.Container, dstPath, fileName, user string) garden.Process {
filePath := filepath.Join(dstPath, fileName)
process, err := container.Run(garden.ProcessSpec{
Path: "cat",
Args: []string{filePath},
User: user,
}, garden.ProcessIO{})
Expect(err).ToNot(HaveOccurred())
return process
}
示例2: runCommand
func runCommand(container garden.Container, path string, args []string) {
proc, err := container.Run(
garden.ProcessSpec{
Path: path,
Args: args,
},
ginkgoIO)
Expect(err).NotTo(HaveOccurred())
exitCode, err := proc.Wait()
Expect(err).NotTo(HaveOccurred())
Expect(exitCode).To(Equal(0))
}
示例3: listenInContainer
func listenInContainer(container garden.Container, containerPort uint32) error {
_, err := container.Run(garden.ProcessSpec{
User: "alice",
Path: "sh",
Args: []string{"-c", fmt.Sprintf("echo %d | nc -l -p %d", containerPort, containerPort)},
}, garden.ProcessIO{
Stdout: GinkgoWriter,
Stderr: GinkgoWriter,
})
Expect(err).ToNot(HaveOccurred())
return err
}
示例4: createUser
func createUser(container garden.Container, username string) {
if container == nil {
return
}
process, err := container.Run(garden.ProcessSpec{
User: "root",
Path: "sh",
Args: []string{"-c", fmt.Sprintf("id -u %s || adduser -D %s", username, username)},
}, garden.ProcessIO{
Stdout: GinkgoWriter,
Stderr: GinkgoWriter,
})
Expect(err).ToNot(HaveOccurred())
Expect(process.Wait()).To(Equal(0))
}
開發者ID:cloudfoundry,項目名稱:garden-integration-tests,代碼行數:16,代碼來源:garden_integration_tests_suite_test.go
示例5: writeFile
func writeFile(container garden.Container, dstPath, user string) garden.Process {
// try to write a new file
filePath := filepath.Join(dstPath, "checkFileAccess-file")
process, err := container.Run(garden.ProcessSpec{
Path: "touch",
Args: []string{filePath},
User: user,
}, garden.ProcessIO{
Stderr: GinkgoWriter,
Stdout: GinkgoWriter,
})
Expect(err).ToNot(HaveOccurred())
return process
}
示例6: ethInterfaceName
func ethInterfaceName(container garden.Container) string {
buffer := gbytes.NewBuffer()
proc, err := container.Run(
garden.ProcessSpec{
Path: "sh",
Args: []string{"-c", "ifconfig | grep 'Ethernet' | cut -f 1 -d ' '"},
User: "root",
},
garden.ProcessIO{
Stdout: buffer,
Stderr: GinkgoWriter,
},
)
Expect(err).NotTo(HaveOccurred())
Expect(proc.Wait()).To(Equal(0))
contIfaceName := string(buffer.Contents()) // g3-abc-1
return contIfaceName[:len(contIfaceName)-2] + "0" // g3-abc-0
}
示例7: checkConnection
func checkConnection(container garden.Container, ip string, port int) error {
process, err := container.Run(garden.ProcessSpec{
User: "root",
Path: "sh",
Args: []string{"-c", fmt.Sprintf("echo hello | nc -w1 %s %d", ip, port)},
}, garden.ProcessIO{Stdout: GinkgoWriter, Stderr: GinkgoWriter})
if err != nil {
return err
}
exitCode, err := process.Wait()
if err != nil {
return err
}
if exitCode == 0 {
return nil
} else {
return fmt.Errorf("Request failed. Process exited with code %d", exitCode)
}
}
示例8:
"docker:///cfgarden/empty:v0.1.0",
fmt.Sprintf("non-quotaed-container-%d", GinkgoParallelNode()),
}))
})
It("executes plugin create as the container user", func() {
maxId := uint32(sysinfo.Min(sysinfo.MustGetMaxValidUID(), sysinfo.MustGetMaxValidGID()))
whoamiOutput, err := ioutil.ReadFile(filepath.Join(imagePath, "create-whoami"))
Expect(err).ToNot(HaveOccurred())
Expect(string(whoamiOutput)).To(ContainSubstring(fmt.Sprintf("%d - %d", maxId, maxId)))
})
It("loads the image.json env variables", func() {
buffer := gbytes.NewBuffer()
process, err := container.Run(garden.ProcessSpec{
Path: "/env",
Dir: "/",
}, garden.ProcessIO{Stdout: buffer, Stderr: buffer})
Expect(err).NotTo(HaveOccurred())
exitCode, err := process.Wait()
Expect(err).NotTo(HaveOccurred())
Expect(exitCode).To(BeZero())
Eventually(buffer).Should(gbytes.Say("BLA=BLE"))
Eventually(buffer).Should(gbytes.Say("HELLO=world"))
})
It("executes plugin delete with the correct args", func() {
Expect(client.Destroy(container.Handle())).To(Succeed())
userArgsStr, err := ioutil.ReadFile(filepath.Join(imagePath, "delete-args"))
Expect(err).ToNot(HaveOccurred())
示例9:
BeforeEach(func() {
client = startGarden()
var err error
container, err = client.Create(garden.ContainerSpec{})
Expect(err).NotTo(HaveOccurred())
})
DescribeTable("contains the correct values", func(user, path string, env []string) {
out := gbytes.NewBuffer()
proc, err := container.Run(
garden.ProcessSpec{
Path: "sh",
Args: []string{"-c", "echo $PATH"},
User: user,
Env: env,
},
garden.ProcessIO{
Stdout: io.MultiWriter(GinkgoWriter, out),
Stderr: io.MultiWriter(GinkgoWriter, out),
})
Expect(err).NotTo(HaveOccurred())
exitCode, err := proc.Wait()
Expect(err).NotTo(HaveOccurred())
Expect(exitCode).To(Equal(0))
Expect(out).To(gbytes.Say(path))
},
Entry("for a non-root user",
"alice", `^/usr/local/bin:/usr/bin:/bin\n$`, []string{}),
示例10:
Networks: []garden.IPRange{
garden.IPRangeFromIP(net.ParseIP("8.8.8.8")),
},
})
info, err := container.Info()
Expect(err).NotTo(HaveOccurred())
externalIP = info.ExternalIP
interfacePrefix = info.Properties["kawasaki.iptable-prefix"]
out := gbytes.NewBuffer()
existingProc, err = container.Run(
garden.ProcessSpec{
Path: "/bin/sh",
Args: []string{"-c", "while true; do echo hello; sleep 1; done;"},
},
garden.ProcessIO{
Stdout: io.MultiWriter(GinkgoWriter, out),
Stderr: io.MultiWriter(GinkgoWriter, out),
})
Expect(err).NotTo(HaveOccurred())
if gracefulShutdown {
Expect(client.Stop()).To(Succeed())
} else {
Expect(client.Kill()).To(MatchError("exit status 137"))
}
if len(restartArgs) == 0 {
restartArgs = args
}
示例11:
return process, nil
}
spec := garden.ProcessSpec{
Path: "some-script",
}
stdout := gbytes.NewBuffer()
stderr := gbytes.NewBuffer()
processIO := garden.ProcessIO{
Stdout: stdout,
Stderr: stderr,
}
process, err := container.Run(spec, processIO)
Ω(err).ShouldNot(HaveOccurred())
ranHandle, ranSpec, ranIO := fakeConnection.RunArgsForCall(0)
Ω(ranHandle).Should(Equal("some-handle"))
Ω(ranSpec).Should(Equal(spec))
Ω(ranIO).Should(Equal(processIO))
Ω(process.ID()).Should(Equal("process-handle"))
status, err := process.Wait()
Ω(err).ShouldNot(HaveOccurred())
Ω(status).Should(Equal(123))
Eventually(stdout).Should(gbytes.Say("stdout data"))
Eventually(stderr).Should(gbytes.Say("stderr data"))
示例12:
Expect(container.StreamIn(garden.StreamInSpec{
Path: "/root/test",
User: "root",
TarStream: tarStream,
})).To(Succeed())
Expect(container).To(HaveFile("/root/test/some-temp-dir"))
Expect(container).To(HaveFile("/root/test/some-temp-dir/some-temp-file"))
})
})
Describe("StreamOut", func() {
BeforeEach(func() {
process, err := container.Run(garden.ProcessSpec{
User: "root",
Path: "sh",
Args: []string{"-c", "mkdir -p /root/documents/some/reports && echo hello > /root/documents/some/reports/test"},
}, ginkgoIO)
Expect(err).NotTo(HaveOccurred())
statusCode, err := process.Wait()
Expect(err).NotTo(HaveOccurred())
Expect(statusCode).To(Equal(0))
})
It("should stream out the files", func() {
tarStream, err := container.StreamOut(garden.StreamOutSpec{
Path: "/root/documents/some/reports",
User: "root",
})
示例13:
It("should create a depot subdirectory based on the container handle", func() {
Expect(container.Handle()).NotTo(BeEmpty())
Expect(filepath.Join(client.DepotDir, container.Handle())).To(BeADirectory())
Expect(filepath.Join(client.DepotDir, container.Handle(), "config.json")).To(BeARegularFile())
})
It("should lookup the right container", func() {
lookupContainer, lookupError := client.Lookup(container.Handle())
Expect(lookupError).NotTo(HaveOccurred())
Expect(lookupContainer).To(Equal(container))
})
It("should not leak pipes", func() {
process, err := container.Run(garden.ProcessSpec{Path: "echo", Args: []string{"hello"}}, garden.ProcessIO{})
Expect(err).NotTo(HaveOccurred())
Expect(process.Wait()).To(Equal(0))
Expect(client.Destroy(container.Handle())).To(Succeed())
container = nil // avoid double-destroying
Eventually(func() int { return numPipes(client.Pid) }).Should(Equal(initialPipes))
})
It("should not leak sockets", func() {
Expect(client.Destroy(container.Handle())).To(Succeed())
container = nil // avoid double-destroying
Eventually(func() int { return numOpenSockets(client.Pid) }).Should(Equal(initialSockets))
示例14:
if fuseRootfs == "" {
Skip("GARDEN_FUSE_TEST_ROOTFS not defined, skipping")
}
var err error
client = startGarden()
container, err = client.Create(garden.ContainerSpec{
RootFSPath: fuseRootfs,
Privileged: true,
})
Expect(err).NotTo(HaveOccurred())
})
AfterEach(func() {
Expect(client.DestroyAndStop()).To(Succeed())
})
It("can mount fuse in the container", func() {
stdout := gbytes.NewBuffer()
sess, err := container.Run(garden.ProcessSpec{
Path: "sh",
Args: []string{
"-c", `mkdir -p /tmp/fusetest && /usr/bin/hellofs /tmp/fusetest; cat /tmp/fusetest/hello`,
},
}, garden.ProcessIO{Stdout: io.MultiWriter(stdout, GinkgoWriter), Stderr: GinkgoWriter})
Expect(err).NotTo(HaveOccurred())
Expect(sess.Wait()).To(Equal(0))
Expect(stdout).To(gbytes.Say("Hello World!"))
})
})
示例15:
container, err = client.Create(garden.ContainerSpec{
Network: containerNetwork,
Properties: extraProperties,
})
Expect(err).NotTo(HaveOccurred())
})
AfterEach(func() {
Expect(client.DestroyAndStop()).To(Succeed())
})
It("should have a loopback interface", func() {
buffer := gbytes.NewBuffer()
proc, err := container.Run(
garden.ProcessSpec{
Path: "ifconfig",
User: "root",
}, garden.ProcessIO{Stdout: io.MultiWriter(GinkgoWriter, buffer), Stderr: GinkgoWriter},
)
Expect(err).NotTo(HaveOccurred())
Expect(proc.Wait()).To(Equal(0))
Expect(buffer).To(gbytes.Say("lo"))
})
It("should have a (dynamically assigned) IP address", func() {
buffer := gbytes.NewBuffer()
proc, err := container.Run(
garden.ProcessSpec{
Path: "ifconfig",
User: "root",
}, garden.ProcessIO{Stdout: io.MultiWriter(GinkgoWriter, buffer), Stderr: io.MultiWriter(GinkgoWriter, buffer)},