@@ -7,6 +7,16 @@
 import click
 
 
+def format_output(i, flag):
+    """return formatted string for instance"""
+    tag_name = get_tag_value(i.tags, 'Name')
+    if flag:
+        return '{0:<40}{1:<10}{2:<13}{3:<13}{4:<10}'.format(
+            tag_name, i.state['Name'], i.id, i.private_ip_address, str(i.public_ip_address))
+    return '{}\t{}\t{}\t{}\t{}'.format(
+        tag_name, i.state['Name'], i.id, i.private_ip_address, i.public_ip_address)
+
+
 def get_tag_value(x, key):
     """Get a value from tag"""
     if x is None:
@@ -25,7 +35,8 @@ def cli():
 
 @cli.command(help='List EC2 instances')
 @click.argument('name', default='*')
-def ls(name):
+@click.option('--list-formatted', '-l', 'is_formatted_output', is_flag=True)
+def ls(name, is_formatted_output):
     """List EC2 instances"""
     ec2 = boto3.resource('ec2')
     if name == '*':
@@ -34,9 +45,7 @@ def ls(name):
         instances = ec2.instances.filter(
             Filters=[{'Name': 'tag:Name', 'Values': [name]}])
     for i in instances:
-        tag_name = get_tag_value(i.tags, 'Name')
-        click.echo('{}\t{}\t{}\t{}\t{}'.format(
-            tag_name, i.state['Name'], i.id, i.private_ip_address, i.public_ip_address))
+        click.echo(format_output(i, is_formatted_output))
 
 
 @cli.command(help='Start EC2 instance')