मैंने एक पायथन स्क्रिप्ट (नीचे) लिखी है जो कॉन्फ़िगरेशन आइटमों के एक समूह का उपयोग करके निर्यात करता हैdrush
। यह आपके मामले में उपयोगी हो सकता है (यह मेरे मामले में रहा है)। उपयोग:
export_config_group.py -s something -m foobar
यह निष्पादित करता है drush config-list
, उन सभी वस्तुओं को प्राप्त करता है जिनके नाम में शब्द होता है something
, फिर उन्हें बचाता है modules/custom/foobar/config/install
।
स्क्रिप्ट निम्नानुसार yml को भी समायोजित करती है:
default_config_hash
मौजूद होने पर प्रविष्टि को हटा देता है;
uuid
मौजूद होने पर प्रविष्टि को हटा देता है।
स्क्रिप्ट कॉन्फ़िगरेशन को लोड और डंप करने के लिए ruamel.yaml पर निर्भर करता है। सुनिश्चित करें कि आप pip install
इसे पहले से कर रहे हैं।
import os
import argparse
import subprocess
import ruamel.yaml
MODULES_ROOT = "/var/www/html/dm/web/modules/custom"
def main():
search_term, module, keep_uuid = parse_arguments()
module_config_path = os.path.join(MODULES_ROOT, module, 'config/install')
items = run_process(['drush', 'config-list']).splitlines()
for item in items:
if search_term in item:
print "Config item:", item
yml = run_process(['drush', 'config-get', item])
new_yml = adjust_yml(yml, keep_uuid)
full_path = os.path.join(module_config_path, item + '.yml')
with open(full_path, 'w') as f:
f.write(new_yml)
def parse_arguments():
ap = argparse.ArgumentParser(description="Export config group.")
ap.add_argument("-s", "--search", required=True, help="Search term")
ap.add_argument("-m", "--module", required=True, help="Destination module")
ap.add_argument("-u", "--uuid", help="Keep UUID",
action='store_true', default=False)
args = ap.parse_args()
return args.search, args.module, args.uuid
def run_process(params):
process = subprocess.Popen(params, stdout=subprocess.PIPE)
stdout, _ = process.communicate()
return stdout
def adjust_yml(yml, keep_uuid):
loader = ruamel.yaml.RoundTripLoader
config = ruamel.yaml.load(yml, loader, preserve_quotes=True)
remove_core_config_hash(config)
if not keep_uuid:
remove_uuid(config)
dumper = Dumper = ruamel.yaml.RoundTripDumper
return ruamel.yaml.dump(config, Dumper=dumper, indent=2, block_seq_indent=2)
def remove_core_config_hash(config):
if '_core' in config:
if 'default_config_hash' in config['_core']:
config['_core'].pop('default_config_hash')
# Also remove '_core' node if empty
if not config['_core']:
config.pop('_core')
def remove_uuid(config):
if 'uuid' in config:
config.pop('uuid')
if __name__ == "__main__":
main()