ChangeState apply changes to current objects state
(newRawState string)
| 56 | |
| 57 | // ChangeState apply changes to current objects state |
| 58 | func (c *StateController) ChangeState(newRawState string) error { |
| 59 | newManifests, err := manifest.ListFromYamlDocs(newRawState) |
| 60 | if err != nil { |
| 61 | return fmt.Errorf("error while changing state: %v", err) |
| 62 | } |
| 63 | |
| 64 | newState := make(map[string]manifest.Manifest) |
| 65 | |
| 66 | // Create new objects in FakeCluster |
| 67 | for _, m := range newManifests { |
| 68 | // save manifest to new State |
| 69 | newState[m.Id()] = m |
| 70 | |
| 71 | currM, ok := c.CurrentState[m.Id()] |
| 72 | if !ok { |
| 73 | // Create object if not exist |
| 74 | if err := c.fakeCluster.Create(m.Namespace(defaultNamespace), m); err != nil { |
| 75 | return err |
| 76 | } |
| 77 | c.CurrentState[m.Id()] = m |
| 78 | } else if !reflect.DeepEqual(currM, m) { |
| 79 | // Update object |
| 80 | if err := c.fakeCluster.Update(m.Namespace(defaultNamespace), m); err != nil { |
| 81 | return err |
| 82 | } |
| 83 | c.CurrentState[m.Id()] = m |
| 84 | } |
| 85 | } |
| 86 | // Remove obsolete objects |
| 87 | for currID, currM := range c.CurrentState { |
| 88 | if _, ok := newState[currID]; !ok { |
| 89 | // Delete object |
| 90 | if err := c.fakeCluster.Delete(currM.Namespace(defaultNamespace), currM); err != nil { |
| 91 | return err |
| 92 | } |
| 93 | delete(c.CurrentState, currID) |
| 94 | } |
| 95 | } |
| 96 | |
| 97 | go func() { |
| 98 | time.Sleep(100 * time.Millisecond) |
| 99 | c.stopCh <- types.KubeEvent{MonitorId: "STOP_EVENTS"} |
| 100 | }() |
| 101 | |
| 102 | return nil |
| 103 | } |