Я немного погуглил и не могу найти полезной информации.По сути, мне нужно взять пользовательский ввод из моих аргументов argparse из скрипта python (как показано ниже) и вставить эти значения в файл json (packerfile.json), расположенный в том же рабочем каталоге.Я экспериментировал с библиотеками subprocess
, invoke
и plumbum
, но не смог "найти подходящую туфлю".
Из следующего кода я удалил все, кроме аргументов дляclean up:
#!/usr/bin/python
import os, sys, subprocess
import argparse
import json
from invoke import run
import packer
parser = argparse.ArgumentParser()
parser._positionals.title = 'Positional arguments'
parser._optionals.title = 'Optional arguments'
parser.add_argument("--access_key",
required=False,
action='store',
default=os.environ['AWS_ACCESS_KEY_ID'],
help="AWS access key id")
parser.add_argument("--secret_key",
required=False,
action='store',
default=os.environ['AWS_SECRET_ACCESS_KEY'],
help="AWS secret access key")
parser.add_argument("--region",
required=False,
action='store',
help="AWS region")
parser.add_argument("--guest_os_type",
required=True,
action='store',
help="Operating system to install on guest machine")
parser.add_argument("--ami_id",
required=False,
help="AMI ID for image base")
parser.add_argument("--instance_type",
required=False,
action='store',
help="Type of instance determines overall performance (e.g. t2.medium)")
parser.add_argument("--ssh_key_path",
required=False,
action='store',
default=os.environ['HOME']+'/.ssh',
help="SSH key path (e.g. ~/.ssh)")
parser.add_argument("--ssh_key_name",
required=True,
action='store',
help="SSH key name (e.g. mykey)")
args = parser.parse_args()
print(vars(args))
json пример кода:
{
"variables": {
"aws_access_key": "{{ env `AWS_ACCESS_KEY_ID` }}",
"aws_secret_key": "{{ env `AWS_SECRET_ACCESS_KEY` }}",
"magic_reference_date": "{{ isotime \"2006-01-02\" }}",
"aws_region": "{{ env 'AWS_REGION' }}",
"aws_ami_id": "ami-036affea69a1101c9",
"aws_instance_type": "t2.medium",
"image_version" : "0.1.0",
"guest_os_type": "centos7",
"home": "{{ env `HOME` }}"
},
, поэтому пользовательский ввод для --region
, как показано в скрипте python, будет подключен к значению для aws_region
в файле json.
Я знаю, как напечатать значение аргументов.Полная команда, которую я предоставляю сценарию: python packager.py --region us-west-2 --guest_os_type rhel7 --ssh_key_name test_key
, и напечатанные результаты {'access_key': 'REDACTED', 'secret_key': 'REDACTED', 'region': 'us-west-2', 'guest_os_type': 'rhel7', 'ami_id': None, 'instance_type': None, 'ssh_key_path': '/Users/REDACTEDt/.ssh', 'ssh_key_name': 'test_key'}
.. мне нужно импортировать эти значения в список переменных packerfile.json
, желательно таким образом, чтобы я мог использовать его повторно.это (так что он не должен перезаписывать файл)
Примечание: я также экспериментировал с использованием python для экспорта переменных локальной среды, а затем с помощью файла JSON, но это не похоже нажизнеспособное решение.
Я думаю, что наилучшим решением может быть принятие всех этих аргументов и их экспорт в собственный файл JSON с именем variables.json
и импорт этих переменных из JSON (variables.json) в JSON (packerfile)..json) как отдельный процесс.Тем не менее, здесь можно использовать руководство:)