helpers.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from __future__ import absolute_import
  2. from __future__ import unicode_literals
  3. import os
  4. from compose.config.config import ConfigDetails
  5. from compose.config.config import ConfigFile
  6. from compose.config.config import load
  7. def build_config(contents, **kwargs):
  8. return load(build_config_details(contents, **kwargs))
  9. def build_config_details(contents, working_dir='working_dir', filename='filename.yml'):
  10. return ConfigDetails(
  11. working_dir,
  12. [ConfigFile(filename, contents)],
  13. )
  14. def create_custom_host_file(client, filename, content):
  15. dirname = os.path.dirname(filename)
  16. container = client.create_container(
  17. 'busybox:latest',
  18. ['sh', '-c', 'echo -n "{}" > {}'.format(content, filename)],
  19. volumes={dirname: {}},
  20. host_config=client.create_host_config(
  21. binds={dirname: {'bind': dirname, 'ro': False}},
  22. network_mode='none',
  23. ),
  24. )
  25. try:
  26. client.start(container)
  27. exitcode = client.wait(container)
  28. if exitcode != 0:
  29. output = client.logs(container)
  30. raise Exception(
  31. "Container exited with code {}:\n{}".format(exitcode, output))
  32. container_info = client.inspect_container(container)
  33. if 'Node' in container_info:
  34. return container_info['Node']['Name']
  35. finally:
  36. client.remove_container(container, force=True)
  37. def create_host_file(client, filename):
  38. with open(filename, 'r') as fh:
  39. content = fh.read()
  40. return create_custom_host_file(client, filename, content)