user764357
user764357

Reputation:

Is is possible to use shorthand option_settings with boto3?

When writing .ebextensions .config files, Amazon allows for long and shortform entries, for example these two configurations are identical:

Long form:

"option_settings": [
    {
        'Namespace': 'aws:rds:dbinstance',
        'OptionName': 'DBEngine',
        'Value': 'postgres'
    },
    {
        'Namespace': 'aws:rds:dbinstance',
        'OptionName': 'DBInstanceClass',
        'Value': 'db.t2.micro'
    }
]

Shortform:

"option_settings": {
  "aws:rds:dbinstance": {
    "DBEngine": "postgres",
    "DBInstanceClass": "db.t2.micro"
   }
}

However, all of the configurations I've seen only specify using a long form with boto3:

response = eb_client.create_environment(
... trimmed ...
    OptionSettings=[
        {
            'Namespace': 'aws:rds:dbinstance',
            'OptionName': 'DBEngineVersion',
            'Value': '5.6'
        },
... trimmed ...
)

Is it possible to use a dictionary with shortform entries with boto3?

Bonus: If not, why not?

Upvotes: 0

Views: 66

Answers (1)

user764357
user764357

Reputation:

Trial and error suggests no, you can not use the shortform config type.

However, if you are of that sort of persuasion you can do this:

def short_to_long(_in):
    out = []
    for namespace,key_vals in _in.items():
        for optname,value in key_vals.items():
            out.append(
                {
                    'Namespace': namespace,
                    'OptionName': optname,
                    'Value': value
                }
            )
    return out

Then elsewhere:

response = eb_client.create_environment(

    OptionSettings=short_to_long({
      "aws:rds:dbinstance": {
        "DBDeletionPolicy": "Delete", # or snapshot
        "DBEngine": "postgres",
        "DBInstanceClass": "db.t2.micro"
        },
    })

Upvotes: 2

Related Questions