In addition to looking at examples (or maybe replace examples since that parsing is quite brittle), use intercepted argument_spec values from AnsibleModule to form better metadata. Here is an example script that could be used for this:
{
"kernel":{
},
"ramdisk":{
},
"image":{
},
"monitoring":{
"default":false,
"type":"bool"
},
"user_data":{
},
"termination_protection":{
"default":null,
"type":"bool"
},
"private_ip":{
},
"spot_type":{
"default":"one-time",
"choices":[
"one-time",
"persistent"
]
},
"ec2_url":{
},
"id":{
},
"source_dest_check":{
"default":true,
"type":"bool"
},
"aws_secret_key":{
"no_log":true,
"aliases":[
"ec2_secret_key",
"secret_key"
]
},
"spot_wait_timeout":{
"default":600
},
"group":{
"type":"list",
"aliases":[
"groups"
]
},
"zone":{
"aliases":[
"aws_zone",
"ec2_zone"
]
},
"exact_count":{
"default":null,
"type":"int"
},
"ebs_optimized":{
"default":false,
"type":"bool"
},
"state":{
"default":"present",
"choices":[
"present",
"absent",
"running",
"restarted",
"stopped"
]
},
"placement_group":{
},
"spot_launch_group":{
},
"key_name":{
"aliases":[
"keypair"
]
},
"profile":{
},
"count_tag":{
},
"vpc_subnet_id":{
},
"instance_ids":{
"type":"list",
"aliases":[
"instance_id"
]
},
"tenancy":{
"default":"default"
},
"assign_public_ip":{
"default":false,
"type":"bool"
},
"spot_price":{
},
"wait":{
"default":false,
"type":"bool"
},
"count":{
"default":"1",
"type":"int"
},
"aws_access_key":{
"aliases":[
"ec2_access_key",
"access_key"
]
},
"instance_profile_name":{
},
"security_token":{
"no_log":true,
"aliases":[
"access_token"
]
},
"region":{
"aliases":[
"aws_region",
"ec2_region"
]
},
"network_interfaces":{
"type":"list",
"aliases":[
"network_interface"
]
},
"instance_initiated_shutdown_behavior":{
"default":null,
"choices":[
"stop",
"terminate"
]
},
"instance_type":{
"aliases":[
"type"
]
},
"wait_timeout":{
"default":300
},
"volumes":{
"type":"list"
},
"instance_tags":{
"type":"dict"
},
"group_id":{
"type":"list"
},
"validate_certs":{
"default":true,
"type":"bool"
}
}
In addition to looking at examples (or maybe replace examples since that parsing is quite brittle), use intercepted
argument_specvalues fromAnsibleModuleto form better metadata. Here is an example script that could be used for this:Then run
PYTHONPATH=/usr/local/lib/python2.7/site-packages/ansible/modules/core/cloud/amazon python test.py ec2Output:
{ "kernel":{ }, "ramdisk":{ }, "image":{ }, "monitoring":{ "default":false, "type":"bool" }, "user_data":{ }, "termination_protection":{ "default":null, "type":"bool" }, "private_ip":{ }, "spot_type":{ "default":"one-time", "choices":[ "one-time", "persistent" ] }, "ec2_url":{ }, "id":{ }, "source_dest_check":{ "default":true, "type":"bool" }, "aws_secret_key":{ "no_log":true, "aliases":[ "ec2_secret_key", "secret_key" ] }, "spot_wait_timeout":{ "default":600 }, "group":{ "type":"list", "aliases":[ "groups" ] }, "zone":{ "aliases":[ "aws_zone", "ec2_zone" ] }, "exact_count":{ "default":null, "type":"int" }, "ebs_optimized":{ "default":false, "type":"bool" }, "state":{ "default":"present", "choices":[ "present", "absent", "running", "restarted", "stopped" ] }, "placement_group":{ }, "spot_launch_group":{ }, "key_name":{ "aliases":[ "keypair" ] }, "profile":{ }, "count_tag":{ }, "vpc_subnet_id":{ }, "instance_ids":{ "type":"list", "aliases":[ "instance_id" ] }, "tenancy":{ "default":"default" }, "assign_public_ip":{ "default":false, "type":"bool" }, "spot_price":{ }, "wait":{ "default":false, "type":"bool" }, "count":{ "default":"1", "type":"int" }, "aws_access_key":{ "aliases":[ "ec2_access_key", "access_key" ] }, "instance_profile_name":{ }, "security_token":{ "no_log":true, "aliases":[ "access_token" ] }, "region":{ "aliases":[ "aws_region", "ec2_region" ] }, "network_interfaces":{ "type":"list", "aliases":[ "network_interface" ] }, "instance_initiated_shutdown_behavior":{ "default":null, "choices":[ "stop", "terminate" ] }, "instance_type":{ "aliases":[ "type" ] }, "wait_timeout":{ "default":300 }, "volumes":{ "type":"list" }, "instance_tags":{ "type":"dict" }, "group_id":{ "type":"list" }, "validate_certs":{ "default":true, "type":"bool" } }