Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Side by Side Diff: services/catalog/public/tools/generate_manifest.py

Issue 2651953002: Revert of [Service Manager] Get rid of dynamic service discovery (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « services/catalog/public/tools/catalog.gni ('k') | services/catalog/reader.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2016 The Chromium Authors. All rights reserved. 2 # Copyright 2016 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Generates a static catalog manifest to be loaded at runtime. This includes 6 """Generates a static catalog manifest to be loaded at runtime. This includes
7 embedded service manifests for every supported service, as well as information 7 embedded service manifests for every supported service, as well as information
8 indicating how to start each service.""" 8 indicating how to start each service."""
9 9
10 import argparse 10 import argparse
(...skipping 25 matching lines...) Expand all
36 raise Exception("Manifest %s missing \"name\" key." % filename) 36 raise Exception("Manifest %s missing \"name\" key." % filename)
37 return manifest["name"], manifest 37 return manifest["name"], manifest
38 38
39 39
40 def AddServiceEntryToCatalog(services, name, entry): 40 def AddServiceEntryToCatalog(services, name, entry):
41 if name in services: 41 if name in services:
42 raise Exception("Duplicate service entry for %s" % name) 42 raise Exception("Duplicate service entry for %s" % name)
43 services[name] = entry 43 services[name] = entry
44 44
45 45
46 def SanityCheckCatalog(catalog):
47 """Ensures any given service name appears only once within the catalog."""
48 known_services = set()
49
50 def has_no_dupes(root):
51 if "name" in root:
52 name = root["name"]
53 if name in known_services:
54 raise ValueError("Duplicate catalog entry found for service: %s" % name)
55 known_services.add(name)
56
57 if "services" not in root:
58 return True
59
60 return all(has_no_dupes(service) for service in root["services"])
61
62 return all(has_no_dupes(service["manifest"])
63 for service in catalog["services"].itervalues())
64
65
66 def main(): 46 def main():
67 parser = argparse.ArgumentParser( 47 parser = argparse.ArgumentParser(
68 description="Generates a Service Manager catalog manifest.") 48 description="Generates a Service Manager catalog manifest.")
69 parser.add_argument("--output") 49 parser.add_argument("--output")
50 parser.add_argument("--packages-dir")
70 parser.add_argument("--pretty", action="store_true") 51 parser.add_argument("--pretty", action="store_true")
71 parser.add_argument("--embedded-services", nargs="+", 52 parser.add_argument("--embedded-services", nargs="+",
72 dest="embedded_services", default=[]) 53 dest="embedded_services", default=[])
73 parser.add_argument("--standalone-services", nargs="+", 54 parser.add_argument("--standalone-services", nargs="+",
74 dest="standalone_services", default=[]) 55 dest="standalone_services", default=[])
75 parser.add_argument("--include-catalogs", nargs="+", dest="included_catalogs", 56 parser.add_argument("--include-catalogs", nargs="+", dest="included_catalogs",
76 default=[]) 57 default=[])
77 parser.add_argument("--override-service-executables", nargs="+", 58 parser.add_argument("--override-service-executables", nargs="+",
78 dest="executable_override_specs", default=[]) 59 dest="executable_override_specs", default=[])
79 args, _ = parser.parse_known_args() 60 args, _ = parser.parse_known_args()
80 61
81 if args.output is None: 62 if args.output is None or args.packages_dir is None:
82 raise Exception("--output required") 63 raise Exception("--output and --packages-dir required")
83 64
84 services = {} 65 services = {}
85 for subcatalog_path in args.included_catalogs: 66 for subcatalog_path in args.included_catalogs:
86 subcatalog = ParseJSONFile(subcatalog_path) 67 subcatalog = ParseJSONFile(subcatalog_path)
87 for name, entry in subcatalog["services"].iteritems(): 68 for name, entry in subcatalog["services"].iteritems():
88 AddServiceEntryToCatalog(services, name, entry) 69 AddServiceEntryToCatalog(services, name, entry)
89 70
90 executable_overrides = {} 71 executable_overrides = {}
91 for override_spec in args.executable_override_specs: 72 for override_spec in args.executable_override_specs:
92 service_name, exe_path = override_spec.split(":", 1) 73 service_name, exe_path = override_spec.split(":", 1)
93 executable_overrides[service_name] = exe_path 74 executable_overrides[service_name] = exe_path
94 75
95 for manifest_path in args.embedded_services: 76 for name in args.embedded_services:
77 manifest_path = os.path.join(args.packages_dir, name, "manifest.json")
96 service_name, manifest = ParseManifest(manifest_path) 78 service_name, manifest = ParseManifest(manifest_path)
97 entry = { "embedded": True, "manifest": manifest } 79 entry = { "embedded": True, "manifest": manifest }
98 AddServiceEntryToCatalog(services, service_name, entry) 80 AddServiceEntryToCatalog(services, service_name, entry)
99 81
100 for manifest_path in args.standalone_services: 82 for name in args.standalone_services:
83 manifest_path = os.path.join(args.packages_dir, name, "manifest.json")
101 service_name, manifest = ParseManifest(manifest_path) 84 service_name, manifest = ParseManifest(manifest_path)
102 entry = { "embedded": False, "manifest": manifest } 85 entry = { "embedded": False, "manifest": ParseJSONFile(manifest_path) }
103 name = manifest["name"]
104 if name in executable_overrides: 86 if name in executable_overrides:
105 entry["executable"] = executable_overrides[name] 87 entry["executable"] = executable_overrides[name]
106 AddServiceEntryToCatalog(services, service_name, entry) 88 AddServiceEntryToCatalog(services, service_name, entry)
107 89
108 catalog = { "services": services } 90 catalog = { "services": services }
109 with open(args.output, 'w') as output_file: 91 with open(args.output, 'w') as output_file:
110 json.dump(catalog, output_file, indent=2 if args.pretty else -1) 92 json.dump(catalog, output_file, indent=2 if args.pretty else -1)
111 93
112 # NOTE: We do the sanity check and possible failure *after* outputting the
113 # catalog manifest so it's easier to inspect erroneous output.
114 SanityCheckCatalog(catalog);
115
116 return 0 94 return 0
117 95
118 if __name__ == "__main__": 96 if __name__ == "__main__":
119 sys.exit(main()) 97 sys.exit(main())
OLDNEW
« no previous file with comments | « services/catalog/public/tools/catalog.gni ('k') | services/catalog/reader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698