mirror of
https://github.com/containers/podman.git
synced 2025-05-19 08:07:10 +08:00
Merge pull request #24412 from Sativarsainath-26/network-events
Fix: To print create and remove network in podman events
This commit is contained in:
@ -135,6 +135,19 @@ func (c *Container) newExecDiedEvent(sessionID string, exitCode int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// newNetworkEvent creates a new event based on a network create/remove
|
||||||
|
func (r *Runtime) NewNetworkEvent(status events.Status, netName, netID, netDriver string) {
|
||||||
|
e := events.NewEvent(status)
|
||||||
|
e.Network = netName
|
||||||
|
e.ID = netID
|
||||||
|
e.Attributes = make(map[string]string)
|
||||||
|
e.Attributes["driver"] = netDriver
|
||||||
|
e.Type = events.Network
|
||||||
|
if err := r.eventer.Write(e); err != nil {
|
||||||
|
logrus.Errorf("Unable to write network event: %q", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// newNetworkEvent creates a new event based on a network connect/disconnect
|
// newNetworkEvent creates a new event based on a network connect/disconnect
|
||||||
func (c *Container) newNetworkEvent(status events.Status, netName string) {
|
func (c *Container) newNetworkEvent(status events.Status, netName string) {
|
||||||
e := events.NewEvent(status)
|
e := events.NewEvent(status)
|
||||||
|
@ -85,7 +85,13 @@ func (e *Event) ToHumanReadable(truncate bool) string {
|
|||||||
}
|
}
|
||||||
humanFormat += ")"
|
humanFormat += ")"
|
||||||
case Network:
|
case Network:
|
||||||
humanFormat = fmt.Sprintf("%s %s %s %s (container=%s, name=%s)", e.Time, e.Type, e.Status, id, id, e.Network)
|
if e.Status == Create || e.Status == Remove {
|
||||||
|
if netdriver, exists := e.Attributes["driver"]; exists {
|
||||||
|
humanFormat = fmt.Sprintf("%s %s %s %s (name=%s, type=%s)", e.Time, e.Type, e.Status, e.ID, e.Network, netdriver)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
humanFormat = fmt.Sprintf("%s %s %s %s (container=%s, name=%s)", e.Time, e.Type, e.Status, id, id, e.Network)
|
||||||
|
}
|
||||||
case Image:
|
case Image:
|
||||||
humanFormat = fmt.Sprintf("%s %s %s %s %s", e.Time, e.Type, e.Status, id, e.Name)
|
humanFormat = fmt.Sprintf("%s %s %s %s %s", e.Time, e.Type, e.Status, id, e.Name)
|
||||||
if e.Error != "" {
|
if e.Error != "" {
|
||||||
|
@ -14,6 +14,7 @@ import (
|
|||||||
"github.com/containers/common/libnetwork/types"
|
"github.com/containers/common/libnetwork/types"
|
||||||
netutil "github.com/containers/common/libnetwork/util"
|
netutil "github.com/containers/common/libnetwork/util"
|
||||||
"github.com/containers/podman/v5/libpod/define"
|
"github.com/containers/podman/v5/libpod/define"
|
||||||
|
"github.com/containers/podman/v5/libpod/events"
|
||||||
"github.com/containers/podman/v5/pkg/domain/entities"
|
"github.com/containers/podman/v5/pkg/domain/entities"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -127,7 +128,6 @@ func (ic *ContainerEngine) NetworkReload(ctx context.Context, names []string, op
|
|||||||
|
|
||||||
func (ic *ContainerEngine) NetworkRm(ctx context.Context, namesOrIds []string, options entities.NetworkRmOptions) ([]*entities.NetworkRmReport, error) {
|
func (ic *ContainerEngine) NetworkRm(ctx context.Context, namesOrIds []string, options entities.NetworkRmOptions) ([]*entities.NetworkRmReport, error) {
|
||||||
reports := make([]*entities.NetworkRmReport, 0, len(namesOrIds))
|
reports := make([]*entities.NetworkRmReport, 0, len(namesOrIds))
|
||||||
|
|
||||||
for _, name := range namesOrIds {
|
for _, name := range namesOrIds {
|
||||||
report := entities.NetworkRmReport{Name: name}
|
report := entities.NetworkRmReport{Name: name}
|
||||||
containers, err := ic.Libpod.GetAllContainers()
|
containers, err := ic.Libpod.GetAllContainers()
|
||||||
@ -164,9 +164,16 @@ func (ic *ContainerEngine) NetworkRm(ctx context.Context, namesOrIds []string, o
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
net, err := ic.Libpod.Network().NetworkInspect(name)
|
||||||
|
if err != nil && !errors.Is(err, define.ErrNoSuchNetwork) {
|
||||||
|
return reports, err
|
||||||
|
}
|
||||||
if err := ic.Libpod.Network().NetworkRemove(name); err != nil {
|
if err := ic.Libpod.Network().NetworkRemove(name); err != nil {
|
||||||
report.Err = err
|
report.Err = err
|
||||||
}
|
}
|
||||||
|
if len(net.Name) != 0 {
|
||||||
|
ic.Libpod.NewNetworkEvent(events.Remove, net.Name, net.ID, net.Driver)
|
||||||
|
}
|
||||||
reports = append(reports, &report)
|
reports = append(reports, &report)
|
||||||
}
|
}
|
||||||
return reports, nil
|
return reports, nil
|
||||||
@ -180,6 +187,7 @@ func (ic *ContainerEngine) NetworkCreate(ctx context.Context, network types.Netw
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
ic.Libpod.NewNetworkEvent(events.Create, network.Name, network.ID, network.Driver)
|
||||||
return &network, nil
|
return &network, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -242,7 +242,8 @@ var _ = Describe("Podman events", func() {
|
|||||||
|
|
||||||
It("podman events network connection", func() {
|
It("podman events network connection", func() {
|
||||||
network := stringid.GenerateRandomID()
|
network := stringid.GenerateRandomID()
|
||||||
result := podmanTest.Podman([]string{"create", "--network", "bridge", ALPINE, "top"})
|
networkDriver := "bridge"
|
||||||
|
result := podmanTest.Podman([]string{"create", "--network", networkDriver, ALPINE, "top"})
|
||||||
result.WaitWithDefaultTimeout()
|
result.WaitWithDefaultTimeout()
|
||||||
Expect(result).Should(ExitCleanly())
|
Expect(result).Should(ExitCleanly())
|
||||||
ctrID := result.OutputToString()
|
ctrID := result.OutputToString()
|
||||||
@ -259,11 +260,16 @@ var _ = Describe("Podman events", func() {
|
|||||||
result.WaitWithDefaultTimeout()
|
result.WaitWithDefaultTimeout()
|
||||||
Expect(result).Should(ExitCleanly())
|
Expect(result).Should(ExitCleanly())
|
||||||
|
|
||||||
|
result = podmanTest.Podman([]string{"network", "rm", network})
|
||||||
|
result.WaitWithDefaultTimeout()
|
||||||
|
Expect(result).Should(ExitCleanly())
|
||||||
|
|
||||||
result = podmanTest.Podman([]string{"events", "--stream=false", "--since", "30s"})
|
result = podmanTest.Podman([]string{"events", "--stream=false", "--since", "30s"})
|
||||||
result.WaitWithDefaultTimeout()
|
result.WaitWithDefaultTimeout()
|
||||||
Expect(result).Should(ExitCleanly())
|
Expect(result).Should(ExitCleanly())
|
||||||
|
|
||||||
eventDetails := fmt.Sprintf(" %s (container=%s, name=%s)", ctrID, ctrID, network)
|
eventDetails := fmt.Sprintf(" %s (container=%s, name=%s)", ctrID, ctrID, network)
|
||||||
|
networkCreateRemoveDetails := fmt.Sprintf("(name=%s, type=%s)", network, networkDriver)
|
||||||
// Workaround for #23634, event order not guaranteed when remote.
|
// Workaround for #23634, event order not guaranteed when remote.
|
||||||
// Although the issue is closed, the bug is a real one. It seems
|
// Although the issue is closed, the bug is a real one. It seems
|
||||||
// unlikely ever to be fixed.
|
// unlikely ever to be fixed.
|
||||||
@ -274,9 +280,11 @@ var _ = Describe("Podman events", func() {
|
|||||||
Expect(lines).To(MatchRegexp(" network connect .* network disconnect "))
|
Expect(lines).To(MatchRegexp(" network connect .* network disconnect "))
|
||||||
} else {
|
} else {
|
||||||
lines := result.OutputToStringArray()
|
lines := result.OutputToStringArray()
|
||||||
Expect(lines).To(HaveLen(5))
|
Expect(lines).To(HaveLen(7))
|
||||||
Expect(lines[3]).To(ContainSubstring("network connect" + eventDetails))
|
Expect(lines[3]).To(And(ContainSubstring("network create"), ContainSubstring(networkCreateRemoveDetails)))
|
||||||
Expect(lines[4]).To(ContainSubstring("network disconnect" + eventDetails))
|
Expect(lines[4]).To(ContainSubstring("network connect" + eventDetails))
|
||||||
|
Expect(lines[5]).To(ContainSubstring("network disconnect" + eventDetails))
|
||||||
|
Expect(lines[6]).To(And(ContainSubstring("network remove"), ContainSubstring(networkCreateRemoveDetails)))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user