Python Object Paths

The object classes used in the SDK directly correspond to the REST endpoints you’d use to access the objects via the API. Remembering the patterns below will help you easily derive an SDK object class from an object URI.

  1. Objects take the form f5.<product>.<organizing_collection>.<collection>.<resource>.<subcollection>.<resource>.

  2. The collection and the resource generally have the same name, so the collection is the plural version of the resource. This means that you add s to the end of the resource to get the collection, unless the resource already ends in s. If the resource is already plural, add _s to get the collection.

  3. The object itself is accessed by its CamelCase name, but the usage of the object is all lowercase.

  4. The characters . and - are always replaced with _ in the SDK.

Because the REST API endpoints have a hierarchical structure, you need to load/create the highest-level objects before you can load lower-level ones. The example below shows how the pieces of the URI correspond to the REST endpoints/SDK classes. The first part of the URI is the IP address of your BIG-IP®.

http://192.168.1.1/mgmt/tm/ltm/pool/~Common~mypool/members/~Common~m1:80
                  |----|--|---|----|--------------|-------|-------------|
                  |root|OC|OC |Coll| Resource     | SC    |SubColl Resrc|

OC

Organizing Collection

Coll

Collection

Resource

Resource

Unnamed Resrc

Unnamed Resource

SC

Subcollection

SubColl Resrc

Subcollection Resource

In the sections below, we’ll walk through the Python object paths using LTM® pools and pool members as examples. You can also skip straight to the Coding Example.

Organizing Collection

The tm and ltm organizing collections define what area of the BIG-IP® you’re going to work with. The tm organizing collection corresponds to the traffic management plane of your BIG-IP® (tmsh). Loading ltm indicates that we’re going to work with the BIG-IP®’s Local Traffic module.

Endpoint

http://192.168.1.1/mgmt/tm/

Kind

tm:restgroupresolverviewstate

Type

organizing collection

Class

f5.bigip.tm.Tm

Instantiation

tm = mgmt.tm

Endpoint

http://192.168.1.1/mgmt/tm/ltm

Kind

tm:ltm:collectionstate

Type

organizing collection

Class

f5.bigip.tm.ltm.Ltm

Instantiation

ltm = mgmt.tm.ltm

Collection

Now that the higher-level organizing collections are loaded (in other words, we signed in to the BIG-IP® and accessed the LTM® module), we can load the pool collection.

Endpoint

http://192.168.1.1/mgmt/tm/ltm/pool

Kind

tm:ltm:pool:poolcollectionstate

Type

collection

Class

f5.bigip.tm.ltm.pool.Pools

Instantiation

pools = mgmt.tm.ltm.pools

In the above example, we used the f5.bigip.tm.ltm.pool.Pools.get_collection() method to fetch the collection (in other words, a list of the pool resources configured on the BIG-IP®). Then, we instantiated the class f5.bigip.tm.ltm.pool.Pools.

Resource

In the SDK, we refer to a single instance of a configuration object as a resource. As shown in the previous sections, we are able to access the pool resources on the BIG-IP® after loading the /mgmt/tm/ltm/ organizing collections and the pools collection.

Endpoint

http://192.168.1.1/mgmt/tm/ltm/pool/~Common~mypool/

Kind

tm:ltm:pool:poolstate

Type

resource

Class

f5.bigip.tm.ltm.pool.Pool

Instantiation

pool = mgmt.tm.ltm.pools.pool.load(partition='<partition_name>', name='<pool_name>')

In the example above, we instantiated the class f5.bigip.tm.ltm.pool.Pool and used it to load the f5.bigip.tm.ltm.pools.pool object. The object is a python representation of an actual BIG-IP® pool in the Common partition (or, Common/pool1).

Tip

You can always see the representation of an object using the raw() method.

>>> pool1.raw
{
    u'generation': 208,
    u'minActiveMembers': 0,
    u'ipTosToServer': u'pass-through',
    u'loadBalancingMode': u'round-robin',
    u'allowNat': u'yes',
    u'queueDepthLimit': 0,
    u'membersReference': {
        u'isSubcollection': True,
        u'link': u'https://localhost/mgmt/tm/ltm/pool/~Common~pool1/members?ver=11.6.0'},
    u'minUpMembers': 0,
    u'slowRampTime': 10,
    u'minUpMembersAction': u'failover',
    '_meta_data': {
        'attribute_registry': {
            'tm:ltm:pool:memberscollectionstate': <class 'f5.bigip.tm.ltm.pool.Members_s'>
            },
        'container': <f5.bigip.tm.ltm.pool.Pools object at 0x102e6c550>,
        'exclusive_attributes': [],
        'read_only_attributes': [],
        'allowed_lazy_attributes': [<class 'f5.bigip.tm.ltm.pool.Members_s'>],
        'uri': u'https://10.190.7.161:443/mgmt/tm/ltm/pool/~Common~pool1/',
        'required_json_kind': 'tm:ltm:pool:poolstate',
        'bigip': <f5.bigip.ManagementRoot object at 0x1006e4bd0>,
        'icontrol_version': '',
        'icr_session': <icontrol.session.iControlRESTSession object at 0x1006e4c90>,
        'required_load_parameters': set(['name']),
        'required_creation_parameters': set(['name']),
        'creation_uri_frag': '',
        'creation_uri_qargs': {
            u'ver': [u'11.6.0']
        }
    },
    u'minUpMembersChecking': u'disabled',
    u'queueTimeLimit': 0,
    u'linkQosToServer': u'pass-through',
    u'description': u'This is my pool',
    u'queueOnConnectionLimit': u'disabled',
    u'fullPath': u'/Common/pool1',
    u'kind': u'tm:ltm:pool:poolstate',
    u'name': u'pool1',
    u'partition': u'Common',
    u'allowSnat': u'yes',
    u'ipTosToClient': u'pass-through',
    u'reselectTries': 0,
    u'selfLink': u'https://localhost/mgmt/tm/ltm/pool/~Common~pool1?ver=11.6.0',
    u'serviceDownAction': u'none',
    u'ignorePersistedWeight': u'disabled',
    u'linkQosToClient': u'pass-through'
}

Unnamed Resource

In the SDK, we refer to a single instance of a configuratino object with no name field as an unnamed resource. Unnamed resources cannot be created or deleted, but they can be loaded, updated, etc.

In the example above, we instantiated the class f5.bigip.tm.sys.httpd and used it to update the max clients to 5.

Subcollection

A subcollection is a collection of resources that can only be accessed via its parent resource. To continue our example:

The f5.bigip.tm.ltm.pool.Pool resource object contains f5.bigip.tm.ltm.pool.Members subcollection resource objects. These subcollection resources – the real-servers that are attached to the pool, or ‘pool members’ – are part of the members_s subcollection in the SDK. (Remember, we have to add _s to the end of collection object names if the name of the resource object it contains already ends in s).

Endpoint

http://192.168.1.1/mgmt/tm/ltm/pool/~Common~mypool/members

Kind

tm:ltm:pool:members:memberscollectionstate

Type

subcollection

Class

f5.bigip.tm.ltm.pool.Members_s

Instantiation

members = mgmt.tm.ltm.pools.pool.members_s

Subcollection Resource

As explained in the previous section, a subcollection contains subcollection resources. These subcollection resources can only be loaded after all of the parent objects (organizing collections, resource, and subcollection) have been loaded.

Endpoint

http://192.168.1.1/mgmt/tm/ltm/pool/~Common~mypool/members/~Common~member1

Kind

tm:ltm:pool:members:membersstate

Type

subcollection resource

Class

f5.bigip.tm.ltm.pool.Members

Instantiation

member = mgmt.tm.ltm.pool.members_s.members.load(partition='<partition_name>', name='<member_name>:<port>')

Coding Example