// Runs root service func Run(configFileName string) (chan common.ServiceMessage, string, error) { fullConfig, err := common.ReadConfig(configFileName) if err != nil { return nil, "", err } rootService := &Root{} rootServiceConfig := common.ServiceConfig{fullConfig.Services["root"].Common, make(map[string]interface{})} rootServiceConfig.ServiceSpecific[fullConfigKey] = fullConfig return common.InitializeService(rootService, rootServiceConfig) }
// Runs IPAM service func Run(rootServiceUrl string) (chan common.ServiceMessage, string, error) { client, err := common.NewRestClient(rootServiceUrl, common.DefaultRestTimeout) if err != nil { return nil, "", err } ipam := &IPAMSvc{} config, err := client.GetServiceConfig(rootServiceUrl, ipam) if err != nil { return nil, "", err } return common.InitializeService(ipam, *config) }
// Runs Tenant service func Run(rootServiceUrl string) (chan common.ServiceMessage, string, error) { tsvc := &TenantSvc{} client, err := common.NewRestClient(rootServiceUrl, common.DefaultRestTimeout) if err != nil { return nil, "", err } config, err := client.GetServiceConfig(rootServiceUrl, tsvc) if err != nil { return nil, "", err } return common.InitializeService(tsvc, *config) }
// Run configures and runs listener service. func Run(rootServiceURL string, cred *common.Credential) (*common.RestServiceInfo, error) { clientConfig := common.GetDefaultRestClientConfig(rootServiceURL) clientConfig.Credential = cred client, err := common.NewRestClient(clientConfig) if err != nil { return nil, err } KubeListener := &KubeListener{} KubeListener.restClient = client config, err := client.GetServiceConfig(KubeListener.Name()) if err != nil { return nil, err } return common.InitializeService(KubeListener, *config, cred) }
// Run configures and starts root service. func Run(configFileName string) (*common.RestServiceInfo, error) { log.Printf("Entering root.Run()") fullConfig, err := common.ReadConfig(configFileName) if err != nil { return nil, err } rootService := &Root{} log.Printf("Initializing root config") rootServiceConfig := common.ServiceConfig{ Common: fullConfig.Services["root"].Common, ServiceSpecific: make(map[string]interface{}), } rootServiceConfig.ServiceSpecific[fullConfigKey] = fullConfig return common.InitializeService(rootService, rootServiceConfig, nil) }
// Run runs the agent service. func Run(rootServiceURL string) (chan common.ServiceMessage, string, error) { client, err := common.NewRestClient("", common.DefaultRestTimeout) if err != nil { return nil, "", err } agent := &Agent{} helper := NewAgentHelper(agent) agent.Helper = &helper log.Printf("Agent: Getting configuration from %s", rootServiceURL) config, err := client.GetServiceConfig(rootServiceURL, agent) if err != nil { return nil, "", err } return common.InitializeService(agent, *config) }
func (s *MySuite) TestPolicy(c *check.C) { cfg := &common.ServiceConfig{Common: common.CommonConfig{Api: &common.Api{Port: 0, RestTimeoutMillis: 100}}} log.Printf("Test: Mock service config:\n\t%#v\n\t%#v\n", cfg.Common.Api, cfg.ServiceSpecific) svc := &mockSvc{mySuite: s} svc.tenants = make(map[uint64]string) svc.tenantsStr = make(map[string]uint64) svc.segments = make(map[uint64]string) svc.segmentsStr = make(map[string]uint64) svcInfo, err := common.InitializeService(svc, *cfg, nil) if err != nil { c.Error(err) c.FailNow() } msg := <-svcInfo.Channel log.Printf("Test: Mock service says %s; listening on %s\n", msg, svcInfo.Address) addrComponents := strings.Split(svcInfo.Address, ":") portStr := addrComponents[len(addrComponents)-1] s.servicePort, err = strconv.ParseUint(portStr, 10, 64) if err != nil { c.Error(err) c.FailNow() } s.serviceURL = fmt.Sprintf("http://%s", svcInfo.Address) log.Printf("Test: Mock service listens at %s\n", s.serviceURL) polSvc := &PolicySvc{} err = common.SimpleOverwriteSchema(polSvc, s.serviceURL) if err != nil { c.Fatal(err) } log.Printf("Policy schema created.") svcInfo, err = common.SimpleStartService(polSvc, s.serviceURL) if err != nil { c.Fatal(err) } msg = <-svcInfo.Channel fmt.Printf("Policy service listening %s on said: %s", svcInfo.Address, msg) clientConfig := common.GetDefaultRestClientConfig(s.serviceURL) client, err := common.NewRestClient(clientConfig) if err != nil { c.Fatal(err) } polURL := "http://" + svcInfo.Address + "/policies" log.Println("1. Add policy pol1") policyIn := common.Policy{} err = json.Unmarshal([]byte(romanaPolicy1), &policyIn) if err != nil { c.Fatal(err) c.FailNow() } policyOut := common.Policy{} err = client.Post(polURL, policyIn, &policyOut) if err != nil { c.Error(err) c.FailNow() } log.Printf("Added policy result: %s", policyOut) c.Assert(policyOut.Name, check.Equals, "pol1") c.Assert(policyOut.ID, check.Equals, uint64(1)) c.Assert(len(policyOut.AppliedTo), check.Equals, len(policyIn.AppliedTo)) c.Assert(len(policyOut.Ingress[0].Peers), check.Equals, len(policyIn.Ingress[0].Peers)) c.Assert(client.GetStatusCode(), check.Equals, 200) pol1ExternalID := policyIn.ExternalID policyIn.ExternalID = "asdfghjkl" policyIn.ID = policyOut.ID log.Printf("2. Add policy again with different External ID %s but same ID %d", policyIn.ExternalID, policyIn.ID) err = client.Post(polURL, policyIn, &policyOut) c.Assert(err.(common.HttpError).StatusCode, check.Equals, http.StatusConflict) log.Printf("2. Result: %+v", policyOut) log.Println("3. Add policy again") policyIn.ExternalID = pol1ExternalID policyIn.ID = 0 err = client.Post(polURL, policyIn, &policyOut) c.Assert(err.(common.HttpError).StatusCode, check.Equals, http.StatusConflict) log.Printf("3. Result: %+v", policyOut) log.Println("4. Add policy pol2") err = json.Unmarshal([]byte(romanaPolicy2), &policyIn) if err != nil { c.Fatal(err) } err = client.Post(polURL, policyIn, &policyOut) if err != nil { c.Fatal(err) } log.Printf("Added policy result: %s", policyOut) c.Assert(client.GetStatusCode(), check.Equals, 200) c.Assert(policyOut.Name, check.Equals, "pol2") log.Println("5. Add default policy") one := uint64(1) defPol := common.Policy{ Direction: common.PolicyDirectionIngress, Name: "default", ExternalID: "default", AppliedTo: []common.Endpoint{{TenantNetworkID: &one}}, Ingress: []common.RomanaIngress{ common.RomanaIngress{ Peers: []common.Endpoint{{Peer: common.Wildcard}}, Rules: []common.Rule{{Protocol: common.Wildcard}}, }, }, } err = client.Post(polURL, defPol, &policyOut) if err != nil { c.Fatal(err) } log.Printf("Added policy result: %s", policyOut) c.Assert(client.GetStatusCode(), check.Equals, 200) c.Assert(policyOut.Name, check.Equals, "default") log.Println("6. Test list policies - should have 3.") var policies []common.Policy err = client.Get(polURL, &policies) if err != nil { c.Fatal(err) } c.Assert(len(policies), check.Equals, 3) c.Assert(client.GetStatusCode(), check.Equals, 200) c.Assert(policies[0].Name, check.Equals, "pol1") c.Assert(policies[1].Name, check.Equals, "pol2") c.Assert(policies[2].Name, check.Equals, "default") log.Println("7. Test get policy.") policyGet := common.Policy{} err = client.Get(polURL+"/1", &policyGet) if err != nil { c.Fatal(err) } c.Assert(policyGet.Name, check.Equals, policies[0].Name) c.Assert(client.GetStatusCode(), check.Equals, 200) log.Println("8. Test delete by ID - delete pol1") policyOut = common.Policy{} err = client.Delete(polURL+"/1", nil, &policyOut) if err != nil { c.Fatal(err) } log.Printf("Deleted policy result: %s", policyOut) c.Assert(policyOut.Name, check.Equals, "pol1") c.Assert(policyOut.ID, check.Equals, uint64(1)) c.Assert(client.GetStatusCode(), check.Equals, 200) log.Println("9. Test list policies - should have 2 now - pol2 and default.") err = client.Get(polURL, &policies) if err != nil { c.Fatal(err) } c.Assert(len(policies), check.Equals, 2) c.Assert(policies[0].Name, check.Equals, "pol2") c.Assert(policies[1].Name, check.Equals, "default") c.Assert(client.GetStatusCode(), check.Equals, 200) log.Println("10. Test delete by ExternalID - delete policy 2") err = json.Unmarshal([]byte(romanaPolicy2), &policyIn) if err != nil { c.Fatal(err) } log.Printf("Unmarshaled %s to %v", romanaPolicy2, policyIn) policyOut = common.Policy{} err = client.Delete(polURL, policyIn, &policyOut) if err != nil { c.Fatal(err) } log.Printf("Deleted policy result: %s", policyOut) c.Assert(client.GetStatusCode(), check.Equals, 200) c.Assert(policyOut.Name, check.Equals, policyIn.Name) log.Println("10. Test list policies - should have 1 now - only default") err = client.Get(polURL, &policies) if err != nil { c.Fatal(err) } c.Assert(client.GetStatusCode(), check.Equals, 200) c.Assert(len(policies), check.Equals, 1) c.Assert(policies[0].Name, check.Equals, "default") log.Println("11. Test find by name policies - should find it") findURL := "http://" + svcInfo.Address + "/find/policies" err = client.Get(findURL+"/default", &policyOut) if err != nil { c.Fatal(err) } c.Assert(policyOut.Name, check.Equals, "default") log.Println("12. Test find by name policies with non-existent policy - should NOT find it") err = client.Get(findURL+"/blabla", &policyOut) httpErr := err.(common.HttpError) c.Assert(client.GetStatusCode(), check.Equals, http.StatusNotFound) c.Assert(httpErr.ResourceType, check.Equals, "policy") c.Assert(httpErr.StatusCode, check.Equals, http.StatusNotFound) c.Assert(httpErr.ResourceID, check.Equals, "blabla") log.Printf("%v", err) log.Println("13. Test delete by ExternalID - delete default policy") policyOut = common.Policy{} err = client.Delete(polURL, defPol, &policyOut) if err != nil { c.Fatal(err) } log.Printf("Deleted policy result: %s", policyOut) c.Assert(policyOut.Name, check.Equals, defPol.Name) c.Assert(client.GetStatusCode(), check.Equals, 200) log.Println("14. Test list policies - should have 0 now") err = client.Get(polURL, &policies) if err != nil { c.Fatal(err) } c.Assert(len(policies), check.Equals, 0) log.Println("15. Test delete by ExternalID - delete default policy - should be Not Found error now") policyOut = common.Policy{} err = client.Delete(polURL, defPol, &policyOut) if err == nil { panic("Expected error") } httpErr = err.(common.HttpError) c.Assert(client.GetStatusCode(), check.Equals, http.StatusNotFound) c.Assert(httpErr.ResourceType, check.Equals, "policy") c.Assert(httpErr.StatusCode, check.Equals, http.StatusNotFound) // TODO // Important! This should really be done in policy agent. // Only done here as temporary measure. id := makeId(defPol.AppliedTo, defPol.Name) c.Assert(httpErr.ResourceID, check.Equals, id) // c.Assert(httpErr.ResourceID, check.Equals, "default") log.Printf("%v", err) }