diff options
author | Joshua Watt <JPEWhacker@gmail.com> | 2023-11-03 08:26:24 -0600 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2023-11-09 17:33:02 +0000 |
commit | e90fccfefd7693d8cdfa731fa7e170c8bd4b1a1b (patch) | |
tree | 57354f9150dd5c3d4a70891abc45f0ae2ce448ca /bitbake/bin | |
parent | 4cdb0f00f9c687337bd08b97022349f4dddadcc0 (diff) | |
download | poky-e90fccfefd7693d8cdfa731fa7e170c8bd4b1a1b.tar.gz |
bitbake: bitbake-hashserv: Allow arguments from environment
Allows the arguments to the bitbake-hashserv command to be specified in
environment variables. This is a very common idiom when running services
in containers as it allows the arguments to be specified from different
sources as desired by the service administrator
(Bitbake rev: f65c87fab07a730f2f4588764cb64508c2149b40)
Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/bin')
-rwxr-xr-x | bitbake/bin/bitbake-hashserv | 80 |
1 files changed, 60 insertions, 20 deletions
diff --git a/bitbake/bin/bitbake-hashserv b/bitbake/bin/bitbake-hashserv index 00af76b2d1..a916a90cb0 100755 --- a/bitbake/bin/bitbake-hashserv +++ b/bitbake/bin/bitbake-hashserv | |||
@@ -11,56 +11,96 @@ import logging | |||
11 | import argparse | 11 | import argparse |
12 | import sqlite3 | 12 | import sqlite3 |
13 | import warnings | 13 | import warnings |
14 | |||
14 | warnings.simplefilter("default") | 15 | warnings.simplefilter("default") |
15 | 16 | ||
16 | sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(__file__)), 'lib')) | 17 | sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(__file__)), "lib")) |
17 | 18 | ||
18 | import hashserv | 19 | import hashserv |
19 | 20 | ||
20 | VERSION = "1.0.0" | 21 | VERSION = "1.0.0" |
21 | 22 | ||
22 | DEFAULT_BIND = 'unix://./hashserve.sock' | 23 | DEFAULT_BIND = "unix://./hashserve.sock" |
23 | 24 | ||
24 | 25 | ||
25 | def main(): | 26 | def main(): |
26 | parser = argparse.ArgumentParser(description='Hash Equivalence Reference Server. Version=%s' % VERSION, | 27 | parser = argparse.ArgumentParser( |
27 | epilog='''The bind address is the path to a unix domain socket if it is | 28 | description="Hash Equivalence Reference Server. Version=%s" % VERSION, |
28 | prefixed with "unix://". Otherwise, it is an IP address | 29 | formatter_class=argparse.RawTextHelpFormatter, |
29 | and port in form ADDRESS:PORT. To bind to all addresses, leave | 30 | epilog=""" |
30 | the ADDRESS empty, e.g. "--bind :8686". To bind to a specific | 31 | The bind address may take one of the following formats: |
31 | IPv6 address, enclose the address in "[]", e.g. | 32 | unix://PATH - Bind to unix domain socket at PATH |
32 | "--bind [::1]:8686"''' | 33 | ws://ADDRESS:PORT - Bind to websocket on ADDRESS:PORT |
33 | ) | 34 | ADDRESS:PORT - Bind to raw TCP socket on ADDRESS:PORT |
34 | 35 | ||
35 | parser.add_argument('-b', '--bind', default=DEFAULT_BIND, help='Bind address (default "%(default)s")') | 36 | To bind to all addresses, leave the ADDRESS empty, e.g. "--bind :8686" or |
36 | parser.add_argument('-d', '--database', default='./hashserv.db', help='Database file (default "%(default)s")') | 37 | "--bind ws://:8686". To bind to a specific IPv6 address, enclose the address in |
37 | parser.add_argument('-l', '--log', default='WARNING', help='Set logging level') | 38 | "[]", e.g. "--bind [::1]:8686" or "--bind ws://[::1]:8686" |
38 | parser.add_argument('-u', '--upstream', help='Upstream hashserv to pull hashes from') | 39 | """, |
39 | parser.add_argument('-r', '--read-only', action='store_true', help='Disallow write operations from clients') | 40 | ) |
41 | |||
42 | parser.add_argument( | ||
43 | "-b", | ||
44 | "--bind", | ||
45 | default=os.environ.get("HASHSERVER_BIND", DEFAULT_BIND), | ||
46 | help='Bind address (default $HASHSERVER_BIND, "%(default)s")', | ||
47 | ) | ||
48 | parser.add_argument( | ||
49 | "-d", | ||
50 | "--database", | ||
51 | default=os.environ.get("HASHSERVER_DB", "./hashserv.db"), | ||
52 | help='Database file (default $HASHSERVER_DB, "%(default)s")', | ||
53 | ) | ||
54 | parser.add_argument( | ||
55 | "-l", | ||
56 | "--log", | ||
57 | default=os.environ.get("HASHSERVER_LOG_LEVEL", "WARNING"), | ||
58 | help='Set logging level (default $HASHSERVER_LOG_LEVEL, "%(default)s")', | ||
59 | ) | ||
60 | parser.add_argument( | ||
61 | "-u", | ||
62 | "--upstream", | ||
63 | default=os.environ.get("HASHSERVER_UPSTREAM", None), | ||
64 | help="Upstream hashserv to pull hashes from ($HASHSERVER_UPSTREAM)", | ||
65 | ) | ||
66 | parser.add_argument( | ||
67 | "-r", | ||
68 | "--read-only", | ||
69 | action="store_true", | ||
70 | help="Disallow write operations from clients ($HASHSERVER_READ_ONLY)", | ||
71 | ) | ||
40 | 72 | ||
41 | args = parser.parse_args() | 73 | args = parser.parse_args() |
42 | 74 | ||
43 | logger = logging.getLogger('hashserv') | 75 | logger = logging.getLogger("hashserv") |
44 | 76 | ||
45 | level = getattr(logging, args.log.upper(), None) | 77 | level = getattr(logging, args.log.upper(), None) |
46 | if not isinstance(level, int): | 78 | if not isinstance(level, int): |
47 | raise ValueError('Invalid log level: %s' % args.log) | 79 | raise ValueError("Invalid log level: %s" % args.log) |
48 | 80 | ||
49 | logger.setLevel(level) | 81 | logger.setLevel(level) |
50 | console = logging.StreamHandler() | 82 | console = logging.StreamHandler() |
51 | console.setLevel(level) | 83 | console.setLevel(level) |
52 | logger.addHandler(console) | 84 | logger.addHandler(console) |
53 | 85 | ||
54 | server = hashserv.create_server(args.bind, args.database, upstream=args.upstream, read_only=args.read_only) | 86 | read_only = (os.environ.get("HASHSERVER_READ_ONLY", "0") == "1") or args.read_only |
87 | |||
88 | server = hashserv.create_server( | ||
89 | args.bind, | ||
90 | args.database, | ||
91 | upstream=args.upstream, | ||
92 | read_only=read_only, | ||
93 | ) | ||
55 | server.serve_forever() | 94 | server.serve_forever() |
56 | return 0 | 95 | return 0 |
57 | 96 | ||
58 | 97 | ||
59 | if __name__ == '__main__': | 98 | if __name__ == "__main__": |
60 | try: | 99 | try: |
61 | ret = main() | 100 | ret = main() |
62 | except Exception: | 101 | except Exception: |
63 | ret = 1 | 102 | ret = 1 |
64 | import traceback | 103 | import traceback |
104 | |||
65 | traceback.print_exc() | 105 | traceback.print_exc() |
66 | sys.exit(ret) | 106 | sys.exit(ret) |