1#!/usr/bin/env python3
2"""
3Quickstart for creating an/or extending the functionality of your SaltStack installation
4
5    usage: salt-extend [-h] [--extension EXTENSION]
6                   [--salt-directory SALT_DIRECTORY] [--name NAME]
7                   [--description DESCRIPTION] [--no-merge]
8
9    optional arguments:
10      -h, --help            show this help message and exit
11      --extension EXTENSION, -e EXTENSION
12                            Extension type, e.g. 'module', 'state'.
13      --salt-directory SALT_DIRECTORY, -o SALT_DIRECTORY
14                            Directory where your salt installation is kept
15                            (defaults to .).
16      --name NAME, -n NAME  Module name.
17      --description DESCRIPTION, -d DESCRIPTION
18                            Short description of what the module does.
19      --no-merge            Don't merge the module into the salt directory, keep
20                            in a temp location
21"""
22import logging
23import sys
24
25from salt.scripts import salt_extend
26
27PY26 = sys.version_info[0] == 2 and sys.version_info[1] == 6
28
29
30def _parse_args_argparse():
31    import argparse
32
33    parser = argparse.ArgumentParser(
34        description="Quickly boilerplate an extension to SaltStack"
35    )
36    parser.add_argument(
37        "--extension", "-e", help="Extension type, e.g. 'module', 'state'."
38    )
39    parser.add_argument(
40        "--salt-directory",
41        "-o",
42        help="Directory where your salt installation is kept (defaults to .).",
43    )
44    parser.add_argument("--name", "-n", help="Module name.")
45    parser.add_argument(
46        "--description", "-d", help="Short description of what the module does."
47    )
48    parser.add_argument(
49        "--no-merge",
50        help="Don't merge the module into the salt directory, keep in a temp location",
51        action="store_true",
52    )
53    parser.add_argument(
54        "--debug",
55        help="Display detailed logs whilst applying templates",
56        action="store_true",
57    )
58    return parser.parse_args()
59
60
61def _parse_args_optparse():
62    from optparse import OptionParser
63
64    parser = OptionParser(usage="Quickly boilerplate an extension to SaltStack")
65    parser.add_option(
66        "--extension", "-e", help="Extension type, e.g. 'module', 'state'."
67    )
68    parser.add_option(
69        "--salt-directory",
70        "-o",
71        help="Directory where your salt installation is kept (defaults to .).",
72    )
73    parser.add_option("--name", "-n", help="Module name.")
74    parser.add_option(
75        "--description", "-d", help="Short description of what the module does."
76    )
77    parser.add_option(
78        "--no-merge",
79        help="Don't merge the module into the salt directory, keep in a temp location",
80        action="store_true",
81    )
82    parser.add_option(
83        "--debug",
84        help="Display detailed logs whilst applying templates",
85        action="store_true",
86    )
87    return parser.parse_args()
88
89
90if __name__ == "__main__":
91    if PY26:
92        (args, _) = _parse_args_optparse()
93    else:
94        args = _parse_args_argparse()
95    if args.debug:
96        logging.basicConfig(level=logging.DEBUG)
97    salt_extend(
98        extension=args.extension,
99        name=args.name,
100        description=args.description,
101        salt_dir=args.salt_directory,
102        merge=not args.no_merge,
103    )
104