¿Equivalente al write-mime-multipart de Ubuntu?

Me gustaría generar un documento codificado en MIME de varias partes para usarlo como datos de usuario en instancias EC2.

En Ubuntu, se supone que uno debe usar write-mime-multipartpara hacer esto, según estas instrucciones .

¿Alguien sabe cuál sería el equivalente de la línea de comandos de OSX?

¡Gracias!

Respuestas (2)

He encontrado una solución simple. El comando de Ubuntu write-mime-multipartes en realidad un script de Python, disponible aquí (o en una distribución de Ubuntu, supongo).

Simplemente descargué este script para usarlo. Quizás no sea ideal con respecto al control de versiones, pero creo que está bien para un script simple.

¡Mejores enfoques bienvenidos!

¡Gracias! Esto es genial. Lo cambié a #!/usr/local/bin/python (en lugar de especificar v2.6) e instalé el script en /usr/local/Cellar/write-mime-multipart, chmod +x y lo vinculé en /usr/ local/bin para ser más como brew. Funcionó bien. También puede ejecutar una instancia Docker de Ubuntu para obtenerlo. ;-)
Salud. ¡Suena como un buen enfoque!

No pude hacer que el guión funcionara, así que preparé uno diferente aquí .

#!/usr/local/bin/python
# Usage
# python utils/multi.py /path/to/cloud.cfg:text/cloud-config /path/to/script.sh:text/x-shellscript

import sys
import email
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

if len(sys.argv) == 1:
    print("%s input-file:type ..." % (sys.argv[0]))
    sys.exit(1)

combined_message = MIMEMultipart()
for i in sys.argv[1:]:
    (filename, format_type) = i.split(":", 1)
    with open(filename) as fh:
        contents = fh.read()
    sub_message = MIMEText(contents, format_type, sys.getdefaultencoding())
    sub_message.add_header('Content-Disposition', 'attachment; file    name="%s"' % (filename))
    combined_message.attach(sub_message)

msg = email.message_from_string(combined_message.as_string())

for part in msg.walk():
    if part.get_content_maintype() == 'text':
        if part['Content-Transfer-Encoding'] in {'quoted-printable', 'base64'}:
            payload = part.get_payload(decode=True)
            del part['Content-Transfer-Encoding']
            part.set_payload(payload)
            email.encoders.encode_7or8bit(part)

# Send the modified message to stdout
print(msg.as_bytes().decode(encoding='UTF-8'))

Fuentes: StackOverflow Pregunta CloudInit Docks

Por favor, responda con más de un enlace. La respuesta debe ser comprensible cuando desaparecen los enlaces.