コード例 #1
0
ファイル: f5_cli.py プロジェクト: jdubs/f5-cli
def main():
    parser = ArgumentParser(description="F5 Deployer")
    parser.add_argument('obj', action='store', metavar='object_type',
                        choices=objects,
                        help='Object type. One of %(choices)s.')
    parser.add_argument('action', action='store', metavar='action',
                        choices=actions,
                        help='Action. One of %(choices)s.')
    parser.add_argument('--formatter', action='store', metavar='formatter',
                        choices=ListFormatters.keys(),
                        default='columns',
                        help='Output format for lists. One of %(choices)s.')
    parser.add_argument('--user', action="store", dest="user",
                        required=False,
                        help="User name. Defaults to current user.")
    parser.add_argument('--password', action="store", dest="password",
                        help="Password")
    parser.add_argument('--verify', dest='verify', action='store_true',
                        help='Do SSL cert validation')
    parser.add_argument('--no-verify', dest='verify', action='store_false',
                        help='Do not do SSL cert validation')
    parser.set_defaults(verify=None)
    parser.add_argument('--host', action="store", dest="host",
                        help='FQDN of the LB you are targeting')
    parser.add_argument('--partition', action="store", dest="partition",
                        default="Common", required=False,
                        help='The target partition. Defaults to Common')
    parser.add_argument('--strip-prefix', action="store", dest="strip_prefix",
                        default="/Common/", required=False,
                        help='Prefix to strip off each item in list')
    args, unknown = parser.parse_known_args()

    config = get_config()
    host = args.host or config.get('defaults', 'host')
    user = args.user or config.get(host, 'user')
    password = args.password or config.get(host, 'password')
    verify = args.verify
    if verify is None:
        verify = config.getboolean(host, 'verify')

    if password is None:
        prompt = 'Password for {user}@{host}: '.format(user=user, host=host)
        password = getpass.getpass(prompt)

    connection = get_f5_connection(
        host, user, password, args.partition,
        debug=True, verify=verify)
    if not connection:
        raise Exception("Unable to get F5 connection")

    device = Device(connection)
    if device.is_current_node_active(args.partition):
        # This call only works in F5 1.4<
        # if client:
        #     print device.get_config_sync_status()
        object_connection = get_object_connection(args.obj, connection,
                                                  args.partition, parser)

        if args.action == "list":
            obj_list = []
            for item in object_connection.list():
                if item.startswith(args.strip_prefix):
                    item = item[len(args.strip_prefix):]
                obj_list.append(item)
            formatter = ListFormatters.get(args.formatter)
            print(formatter(obj_list))
        elif args.action == "list-members":
            obj_list = []
            for item in object_connection.list_members():
                if item['address'].startswith(args.strip_prefix):
                    item['address'] = item['address'][len(args.strip_prefix):]
                node = '{}:{}'.format(item['address'], item['port'])
                obj_list.append(node)
            formatter = ListFormatters.get(args.formatter)
            print(formatter(obj_list))
        elif args.action == "create":
            result = object_connection.create(parser)
            if result:
                print("Added {} Succesfully".format(args.obj))
                print(device.sync_to_group())
            else:
                print("Error, operation did not succeed")
        elif args.action == "delete":
            result = object_connection.delete(parser)
            if result:
                print("Deleted {} Succesfully".format(args.obj))
                print(device.sync_to_group())
            else:
                print("Error, operation did not succeed")
    else:
        print("The device you connected to is NOT THE MASTER")
        print("The master is currently %s") % (device.get_active_node())
        raise Exception("Specified host is not the master")
コード例 #2
0
ファイル: f5-cli.py プロジェクト: gvsurenderreddy/f5-cli
def main():
    parser = ArgumentParser(description="F5 Deployer")
    parser.add_argument('obj', action='store', help="The object you want to "
                        "work with. pool|virutal_server|node")
    parser.add_argument('action', action='store', help='list, create')
    parser.add_argument('--user', action="store", dest="username",
                        default=getpass.getuser(), required=False,
                        help="Rackspace SSO username. Defaults to current "
                        "user.")
    parser.add_argument('--password', action="store", dest="password", 
                        required=False, help="Username. Defaults "
                        "to current user.")
    parser.add_argument('--host', action="store", dest="host", required=True,
                        help='FQDN of the LB you are targeting')
    parser.add_argument('--partition', action="store", dest="partition",
                        default="Common", required=False,
                        help='The target partition. Defaults to Common')
    args, unknown = parser.parse_known_args()
    
    if args.password is None:
      print ("Enter Password")
      password = getpass.getpass()
    else:
      password = args.password
      
    if args.obj not in ["pool", "virtual_server", "node", "ssl_file", "ssl_profile", "profile"]:
        print "Please specify a valid object. pool|virtual_server|node"
        raise Exception("Invalid object specified: {}".format(args.obj))

    if args.action not in ["list", "create", "delete"]:
        print "Please specify a valid action. list|create, delete"
        raise Exception("Invalid action specified: {}".format(args.action))

    connection = get_f5_connection(args.host, args.username, password, args.partition)
    if connection is False:
        raise Exception("Unable to get F5 connection")

    device = Device(connection)
    if device.is_current_node_active(args.host, args.partition) == True:
        ##### This call only works in F5 1.4<
        #if client:
        #  print device.get_config_sync_status()
        object_connection = get_object_connection(args.obj, connection,
                                                  args.partition, parser)
        if args.action == "list":
            print object_connection.list()
        elif args.action == "create":
          result = object_connection.create(parser)
          if result == True:
            print "Added {} Succesfully".format(args.obj)
            print device.sync_to_group()
          else:
            print "Error, operation did not succeed"
        elif args.action == "delete":
          result = object_connection.delete(parser)
          if result == True:
            print "Deleted {} Succesfully".format(args.obj)
            print device.sync_to_group()
          else:
            print "Error, operation did not succeed"
    else:
        print "The device you connected to is NOT THE MASTER"
        print ("The master is currenlty %s") % (device.get_active_node())
        raise Exception("Specified host is not the master")
コード例 #3
0
ファイル: f5-cli.py プロジェクト: zemmali/f5-cli
def main():
    parser = ArgumentParser(description="F5 Deployer")
    parser.add_argument('obj',
                        action='store',
                        help="The object you want to "
                        "work with. pool|virutal_server|node")
    parser.add_argument('action', action='store', help='list, create')
    parser.add_argument('--user',
                        action="store",
                        dest="username",
                        default=getpass.getuser(),
                        required=False,
                        help="Rackspace SSO username. Defaults to current "
                        "user.")
    parser.add_argument('--password',
                        action="store",
                        dest="password",
                        required=False,
                        help="Username. Defaults "
                        "to current user.")
    parser.add_argument('--host',
                        action="store",
                        dest="host",
                        required=True,
                        help='FQDN of the LB you are targeting')
    parser.add_argument('--partition',
                        action="store",
                        dest="partition",
                        default="Common",
                        required=False,
                        help='The target partition. Defaults to Common')
    args, unknown = parser.parse_known_args()

    if args.password is None:
        print("Enter Password")
        password = getpass.getpass()
    else:
        password = args.password

    if args.obj not in [
            "pool", "virtual_server", "node", "ssl_file", "ssl_profile",
            "profile"
    ]:
        print "Please specify a valid object. pool|virtual_server|node"
        raise Exception("Invalid object specified: {}".format(args.obj))

    if args.action not in ["list", "create", "delete"]:
        print "Please specify a valid action. list|create, delete"
        raise Exception("Invalid action specified: {}".format(args.action))

    connection = get_f5_connection(args.host, args.username, password,
                                   args.partition)
    if connection is False:
        raise Exception("Unable to get F5 connection")

    device = Device(connection)
    if device.is_current_node_active(args.host, args.partition) == True:
        ##### This call only works in F5 1.4<
        #if client:
        #  print device.get_config_sync_status()
        object_connection = get_object_connection(args.obj, connection,
                                                  args.partition, parser)
        if args.action == "list":
            print object_connection.list()
        elif args.action == "create":
            result = object_connection.create(parser)
            if result == True:
                print "Added {} Succesfully".format(args.obj)
                print device.sync_to_group()
            else:
                print "Error, operation did not succeed"
        elif args.action == "delete":
            result = object_connection.delete(parser)
            if result == True:
                print "Deleted {} Succesfully".format(args.obj)
                print device.sync_to_group()
            else:
                print "Error, operation did not succeed"
    else:
        print "The device you connected to is NOT THE MASTER"
        print("The master is currenlty %s") % (device.get_active_node())
        raise Exception("Specified host is not the master")