<?xml version="1.0" encoding="ascii"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>rtslib.utils</title> <link rel="stylesheet" href="epydoc.css" type="text/css" /> <script type="text/javascript" src="epydoc.js"></script> </head> <body bgcolor="white" text="black" link="blue" vlink="#204080" alink="#204080"> <!-- ==================== NAVIGATION BAR ==================== --> <table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0"> <tr valign="middle"> <!-- Home link --> <th> <a href="rtslib-module.html">Home</a> </th> <!-- Tree link --> <th> <a href="module-tree.html">Trees</a> </th> <!-- Index link --> <th> <a href="identifier-index.html">Indices</a> </th> <!-- Help link --> <th> <a href="help.html">Help</a> </th> <!-- Project homepage --> <th class="navbar" align="right" width="100%"> <table border="0" cellpadding="0" cellspacing="0"> <tr><th class="navbar" align="center" >rtslib</th> </tr></table></th> </tr> </table> <table width="100%" cellpadding="0" cellspacing="0"> <tr valign="top"> <td width="100%"> <span class="breadcrumbs"> <a href="rtslib-module.html">Package rtslib</a> :: Module utils </span> </td> <td> <table cellpadding="0" cellspacing="0"> <!-- hide/show private --> <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" onclick="toggle_private();">hide private</a>]</span></td></tr> <tr><td align="right"><span class="options" >[<a href="frames.html" target="_top">frames</a >] | <a href="rtslib.utils-module.html" target="_top">no frames</a>]</span></td></tr> </table> </td> </tr> </table> <!-- ==================== MODULE DESCRIPTION ==================== --> <h1 class="epydoc">Module utils</h1><p class="nomargin-top"></p> <pre class="literalblock"> Provides various utility functions. This file is part of RTSLib. Copyright (c) 2011-2013 by Datera, Inc Copyright (c) 2011-2014 by Red Hat, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. </pre> <!-- ==================== CLASSES ==================== --> <a name="section-Classes"></a> <table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr bgcolor="#70b0f0" class="table-header"> <td colspan="2" class="table-header"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tr valign="top"> <td align="left"><span class="table-header">Classes</span></td> <td align="right" valign="top" ><span class="options">[<a href="#section-Classes" class="privatelink" onclick="toggle_private();" >hide private</a>]</span></td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <a href="rtslib.utils.RTSLibError-class.html" class="summary-name">RTSLibError</a><br /> Generic rtslib error. </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <a href="rtslib.utils.RTSLibBrokenLink-class.html" class="summary-name">RTSLibBrokenLink</a><br /> Broken link in configfs, i.e. </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <a href="rtslib.utils.RTSLibNotInCFS-class.html" class="summary-name">RTSLibNotInCFS</a><br /> The underlying configfs object does not exist. </td> </tr> </table> <!-- ==================== FUNCTIONS ==================== --> <a name="section-Functions"></a> <table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr bgcolor="#70b0f0" class="table-header"> <td colspan="2" class="table-header"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tr valign="top"> <td align="left"><span class="table-header">Functions</span></td> <td align="right" valign="top" ><span class="options">[<a href="#section-Functions" class="privatelink" onclick="toggle_private();" >hide private</a>]</span></td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="rtslib.utils-module.html#fwrite" class="summary-sig-name">fwrite</a>(<span class="summary-sig-arg">path</span>, <span class="summary-sig-arg">string</span>)</span><br /> This function writes a string to a file, and takes care of opening it and closing it.</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="rtslib.utils-module.html#fread" class="summary-sig-name">fread</a>(<span class="summary-sig-arg">path</span>)</span><br /> This function reads the contents of a file.</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="rtslib.utils-module.html#is_dev_in_use" class="summary-sig-name">is_dev_in_use</a>(<span class="summary-sig-arg">path</span>)</span><br /> This function will check if the device or file referenced by path is already mounted or used as a storage object backend.</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="get_blockdev_size"></a><span class="summary-sig-name">get_blockdev_size</span>(<span class="summary-sig-arg">path</span>)</span><br /> Returns the size in logical blocks of a disk-type block device.</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="get_block_size"></a><span class="summary-sig-name">get_block_size</span>(<span class="summary-sig-arg">path</span>)</span><br /> Returns the size in logical blocks of a disk-type block device.</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="rtslib.utils-module.html#get_blockdev_type" class="summary-sig-name">get_blockdev_type</a>(<span class="summary-sig-arg">path</span>)</span><br /> This function returns a block device's type.</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="rtslib.utils-module.html#get_block_type" class="summary-sig-name">get_block_type</a>(<span class="summary-sig-arg">path</span>)</span><br /> This function returns a block device's type.</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="rtslib.utils-module.html#convert_scsi_path_to_hctl" class="summary-sig-name">convert_scsi_path_to_hctl</a>(<span class="summary-sig-arg">path</span>)</span><br /> This function returns the SCSI ID in H:C:T:L form for the block device being mapped to the udev path specified.</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="rtslib.utils-module.html#convert_scsi_hctl_to_path" class="summary-sig-name">convert_scsi_hctl_to_path</a>(<span class="summary-sig-arg">host</span>, <span class="summary-sig-arg">controller</span>, <span class="summary-sig-arg">target</span>, <span class="summary-sig-arg">lun</span>)</span><br /> This function returns a udev path pointing to the block device being mapped to the SCSI device that has the provided H:C:T:L.</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="rtslib.utils-module.html#generate_wwn" class="summary-sig-name">generate_wwn</a>(<span class="summary-sig-arg">wwn_type</span>)</span><br /> Generates a random WWN of the specified type:</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="colonize"></a><span class="summary-sig-name">colonize</span>(<span class="summary-sig-arg">str</span>)</span><br /> helper function to add colons every 2 chars</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr class="private"> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="rtslib.utils-module.html#_cleanse_wwn" class="summary-sig-name" onclick="show_private();">_cleanse_wwn</a>(<span class="summary-sig-arg">wwn_type</span>, <span class="summary-sig-arg">wwn</span>)</span><br /> Some wwns may have alternate text representations.</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="rtslib.utils-module.html#normalize_wwn" class="summary-sig-name">normalize_wwn</a>(<span class="summary-sig-arg">wwn_types</span>, <span class="summary-sig-arg">wwn</span>)</span><br /> Take a WWN as given by the user and convert it to a standard text representation.</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="list_loaded_kernel_modules"></a><span class="summary-sig-name">list_loaded_kernel_modules</span>()</span><br /> List all currently loaded kernel modules</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="rtslib.utils-module.html#modprobe" class="summary-sig-name">modprobe</a>(<span class="summary-sig-arg">module</span>)</span><br /> Load the specified kernel module if needed.</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="mount_configfs"></a><span class="summary-sig-name">mount_configfs</span>()</span></td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="dict_remove"></a><span class="summary-sig-name">dict_remove</span>(<span class="summary-sig-arg">d</span>, <span class="summary-sig-arg">items</span>)</span></td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="rtslib.utils-module.html#ignored" class="summary-sig-name">ignored</a>(<span class="summary-sig-arg">*args</span>, <span class="summary-sig-arg">**kwds</span>)</span></td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr class="private"> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="_get_auth_attr"></a><span class="summary-sig-name">_get_auth_attr</span>(<span class="summary-sig-arg">self</span>, <span class="summary-sig-arg">attribute</span>, <span class="summary-sig-arg">ignore</span>=<span class="summary-sig-default">False</span>)</span></td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr class="private"> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="_set_auth_attr"></a><span class="summary-sig-name">_set_auth_attr</span>(<span class="summary-sig-arg">self</span>, <span class="summary-sig-arg">value</span>, <span class="summary-sig-arg">attribute</span>, <span class="summary-sig-arg">ignore</span>=<span class="summary-sig-default">False</span>)</span></td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="set_attributes"></a><span class="summary-sig-name">set_attributes</span>(<span class="summary-sig-arg">obj</span>, <span class="summary-sig-arg">attr_dict</span>, <span class="summary-sig-arg">err_func</span>)</span></td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="set_parameters"></a><span class="summary-sig-name">set_parameters</span>(<span class="summary-sig-arg">obj</span>, <span class="summary-sig-arg">param_dict</span>, <span class="summary-sig-arg">err_func</span>)</span></td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> <tr class="private"> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a name="_test"></a><span class="summary-sig-name">_test</span>()</span><br /> Run the doctests</td> <td align="right" valign="top"> </td> </tr> </table> </td> </tr> </table> <!-- ==================== VARIABLES ==================== --> <a name="section-Variables"></a> <table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr bgcolor="#70b0f0" class="table-header"> <td colspan="2" class="table-header"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tr valign="top"> <td align="left"><span class="table-header">Variables</span></td> <td align="right" valign="top" ><span class="options">[<a href="#section-Variables" class="privatelink" onclick="toggle_private();" >hide private</a>]</span></td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <a name="__package__"></a><span class="summary-name">__package__</span> = <code title="'rtslib'"><code class="variable-quote">'</code><code class="variable-string">rtslib</code><code class="variable-quote">'</code></code> </td> </tr> </table> <!-- ==================== FUNCTION DETAILS ==================== --> <a name="section-FunctionDetails"></a> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr bgcolor="#70b0f0" class="table-header"> <td colspan="2" class="table-header"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tr valign="top"> <td align="left"><span class="table-header">Function Details</span></td> <td align="right" valign="top" ><span class="options">[<a href="#section-FunctionDetails" class="privatelink" onclick="toggle_private();" >hide private</a>]</span></td> </tr> </table> </td> </tr> </table> <a name="fwrite"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">fwrite</span>(<span class="sig-arg">path</span>, <span class="sig-arg">string</span>)</span> </h3> </td><td align="right" valign="top" > </td> </tr></table> <p>This function writes a string to a file, and takes care of opening it and closing it. If the file does not exist, it will be created.</p> <pre class="py-doctest"> <span class="py-prompt">>>> </span><span class="py-keyword">from</span> rtslib.utils <span class="py-keyword">import</span> * <span class="py-prompt">>>> </span>fwrite(<span class="py-string">"/tmp/test"</span>, <span class="py-string">"hello"</span>) <span class="py-prompt">>>> </span>fread(<span class="py-string">"/tmp/test"</span>) <span class="py-output">'hello'</span></pre> <dl class="fields"> <dt>Parameters:</dt> <dd><ul class="nomargin-top"> <li><strong class="pname"><code>path</code></strong> (string) - The file to write to.</li> <li><strong class="pname"><code>string</code></strong> (string) - The string to write to the file.</li> </ul></dd> </dl> </td></tr></table> </div> <a name="fread"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">fread</span>(<span class="sig-arg">path</span>)</span> </h3> </td><td align="right" valign="top" > </td> </tr></table> <p>This function reads the contents of a file. It takes care of opening and closing it.</p> <pre class="py-doctest"> <span class="py-prompt">>>> </span><span class="py-keyword">from</span> rtslib.utils <span class="py-keyword">import</span> * <span class="py-prompt">>>> </span>fwrite(<span class="py-string">"/tmp/test"</span>, <span class="py-string">"hello"</span>) <span class="py-prompt">>>> </span>fread(<span class="py-string">"/tmp/test"</span>) <span class="py-output">'hello'</span> <span class="py-output"></span><span class="py-prompt">>>> </span>fread(<span class="py-string">"/tmp/notexistingfile"</span>) <span class="py-comment"># doctest: +ELLIPSIS</span> <span class="py-except">Traceback (most recent call last):</span> <span class="py-except"> ...</span> <span class="py-except">IOError: [Errno 2] No such file or directory: '/tmp/notexistingfile'</span></pre> <dl class="fields"> <dt>Parameters:</dt> <dd><ul class="nomargin-top"> <li><strong class="pname"><code>path</code></strong> (string) - The path to the file to read from.</li> </ul></dd> <dt>Returns:</dt> <dd>A string containing the file's contents.</dd> </dl> </td></tr></table> </div> <a name="is_dev_in_use"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">is_dev_in_use</span>(<span class="sig-arg">path</span>)</span> </h3> </td><td align="right" valign="top" > </td> </tr></table> <p>This function will check if the device or file referenced by path is already mounted or used as a storage object backend. It works by trying to open the path with O_EXCL flag, which will fail if someone else already did. Note that the file is closed before the function returns, so this does not guaranteed the device will still be available after the check.</p> <dl class="fields"> <dt>Parameters:</dt> <dd><ul class="nomargin-top"> <li><strong class="pname"><code>path</code></strong> (string) - path to the file of device to check</li> </ul></dd> <dt>Returns:</dt> <dd>A boolean, True is we cannot get exclusive descriptor on the path, False if we can.</dd> </dl> </td></tr></table> </div> <a name="get_blockdev_type"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">get_blockdev_type</span>(<span class="sig-arg">path</span>)</span> </h3> </td><td align="right" valign="top" > </td> </tr></table> <p>This function returns a block device's type. Example: 0 is TYPE_DISK If no match is found, None is returned.</p> <pre class="py-doctest"> <span class="py-prompt">>>> </span><span class="py-keyword">from</span> rtslib.utils <span class="py-keyword">import</span> * <span class="py-prompt">>>> </span>get_blockdev_type(<span class="py-string">"/dev/sda"</span>) <span class="py-output">0</span> <span class="py-output"></span><span class="py-prompt">>>> </span>get_blockdev_type(<span class="py-string">"/dev/sr0"</span>) <span class="py-output">5</span> <span class="py-output"></span><span class="py-prompt">>>> </span>get_blockdev_type(<span class="py-string">"/dev/scd0"</span>) <span class="py-output">5</span> <span class="py-output"></span><span class="py-prompt">>>> </span>get_blockdev_type(<span class="py-string">"/dev/nodevicehere"</span>) <span class="py-keyword">is</span> None <span class="py-output">True</span></pre> <dl class="fields"> <dt>Parameters:</dt> <dd><ul class="nomargin-top"> <li><strong class="pname"><code>path</code></strong> (string) - path to the block device</li> </ul></dd> <dt>Returns:</dt> <dd>An int for the block device type, or None if not a block device.</dd> </dl> </td></tr></table> </div> <a name="get_block_type"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">get_block_type</span>(<span class="sig-arg">path</span>)</span> </h3> </td><td align="right" valign="top" > </td> </tr></table> <p>This function returns a block device's type. Example: 0 is TYPE_DISK If no match is found, None is returned.</p> <pre class="py-doctest"> <span class="py-prompt">>>> </span><span class="py-keyword">from</span> rtslib.utils <span class="py-keyword">import</span> * <span class="py-prompt">>>> </span>get_blockdev_type(<span class="py-string">"/dev/sda"</span>) <span class="py-output">0</span> <span class="py-output"></span><span class="py-prompt">>>> </span>get_blockdev_type(<span class="py-string">"/dev/sr0"</span>) <span class="py-output">5</span> <span class="py-output"></span><span class="py-prompt">>>> </span>get_blockdev_type(<span class="py-string">"/dev/scd0"</span>) <span class="py-output">5</span> <span class="py-output"></span><span class="py-prompt">>>> </span>get_blockdev_type(<span class="py-string">"/dev/nodevicehere"</span>) <span class="py-keyword">is</span> None <span class="py-output">True</span></pre> <dl class="fields"> <dt>Parameters:</dt> <dd><ul class="nomargin-top"> <li><strong class="pname"><code>path</code></strong> (string) - path to the block device</li> </ul></dd> <dt>Returns:</dt> <dd>An int for the block device type, or None if not a block device.</dd> </dl> </td></tr></table> </div> <a name="convert_scsi_path_to_hctl"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">convert_scsi_path_to_hctl</span>(<span class="sig-arg">path</span>)</span> </h3> </td><td align="right" valign="top" > </td> </tr></table> <p>This function returns the SCSI ID in H:C:T:L form for the block device being mapped to the udev path specified. If no match is found, None is returned.</p> <pre class="py-doctest"> <span class="py-prompt">>>> </span><span class="py-keyword">import</span> rtslib.utils <span class="py-keyword">as</span> utils <span class="py-prompt">>>> </span>utils.convert_scsi_path_to_hctl(<span class="py-string">'/dev/scd0'</span>) <span class="py-output">(2, 0, 0, 0)</span> <span class="py-output"></span><span class="py-prompt">>>> </span>utils.convert_scsi_path_to_hctl(<span class="py-string">'/dev/sr0'</span>) <span class="py-output">(2, 0, 0, 0)</span> <span class="py-output"></span><span class="py-prompt">>>> </span>utils.convert_scsi_path_to_hctl(<span class="py-string">'/dev/sda'</span>) <span class="py-output">(3, 0, 0, 0)</span> <span class="py-output"></span><span class="py-prompt">>>> </span>utils.convert_scsi_path_to_hctl(<span class="py-string">'/dev/sda1'</span>) <span class="py-prompt">>>> </span>utils.convert_scsi_path_to_hctl(<span class="py-string">'/dev/sdb'</span>) <span class="py-output">(3, 0, 1, 0)</span> <span class="py-output"></span><span class="py-prompt">>>> </span>utils.convert_scsi_path_to_hctl(<span class="py-string">'/dev/sdc'</span>) <span class="py-output">(3, 0, 2, 0)</span></pre> <dl class="fields"> <dt>Parameters:</dt> <dd><ul class="nomargin-top"> <li><strong class="pname"><code>path</code></strong> (string) - The udev path to the SCSI block device.</li> </ul></dd> <dt>Returns:</dt> <dd>An (host, controller, target, lun) tuple of integer values representing the SCSI ID of the device, or None if no match is found.</dd> </dl> </td></tr></table> </div> <a name="convert_scsi_hctl_to_path"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">convert_scsi_hctl_to_path</span>(<span class="sig-arg">host</span>, <span class="sig-arg">controller</span>, <span class="sig-arg">target</span>, <span class="sig-arg">lun</span>)</span> </h3> </td><td align="right" valign="top" > </td> </tr></table> <p>This function returns a udev path pointing to the block device being mapped to the SCSI device that has the provided H:C:T:L.</p> <pre class="py-doctest"> <span class="py-prompt">>>> </span><span class="py-keyword">import</span> rtslib.utils <span class="py-keyword">as</span> utils <span class="py-prompt">>>> </span>utils.convert_scsi_hctl_to_path(0,0,0,0) <span class="py-output">''</span> <span class="py-output"></span><span class="py-prompt">>>> </span>utils.convert_scsi_hctl_to_path(2,0,0,0) <span class="py-comment"># doctest: +ELLIPSIS</span> <span class="py-output">'/dev/s...0'</span> <span class="py-output"></span><span class="py-prompt">>>> </span>utils.convert_scsi_hctl_to_path(3,0,2,0) <span class="py-output">'/dev/sdc'</span></pre> <dl class="fields"> <dt>Parameters:</dt> <dd><ul class="nomargin-top"> <li><strong class="pname"><code>host</code></strong> (int) - The SCSI host id.</li> <li><strong class="pname"><code>controller</code></strong> (int) - The SCSI controller id.</li> <li><strong class="pname"><code>target</code></strong> (int) - The SCSI target id.</li> <li><strong class="pname"><code>lun</code></strong> (int) - The SCSI Logical Unit Number.</li> </ul></dd> <dt>Returns:</dt> <dd>A string for the canonical path to the device, or empty string.</dd> </dl> </td></tr></table> </div> <a name="generate_wwn"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">generate_wwn</span>(<span class="sig-arg">wwn_type</span>)</span> </h3> </td><td align="right" valign="top" > </td> </tr></table> <p>Generates a random WWN of the specified type:</p> <ul> <li> unit_serial: T10 WWN Unit Serial. </li> <li> iqn: iSCSI IQN </li> <li> naa: SAS NAA address </li> </ul> <dl class="fields"> <dt>Parameters:</dt> <dd><ul class="nomargin-top"> <li><strong class="pname"><code>wwn_type</code></strong> (str) - The WWN address type.</li> </ul></dd> <dt>Returns:</dt> <dd>A string containing the WWN.</dd> </dl> </td></tr></table> </div> <a name="_cleanse_wwn"></a> <div class="private"> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">_cleanse_wwn</span>(<span class="sig-arg">wwn_type</span>, <span class="sig-arg">wwn</span>)</span> </h3> </td><td align="right" valign="top" > </td> </tr></table> <p>Some wwns may have alternate text representations. Adjust to our preferred representation.</p> <dl class="fields"> </dl> </td></tr></table> </div> <a name="normalize_wwn"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">normalize_wwn</span>(<span class="sig-arg">wwn_types</span>, <span class="sig-arg">wwn</span>)</span> </h3> </td><td align="right" valign="top" > </td> </tr></table> <p>Take a WWN as given by the user and convert it to a standard text representation. If possible_wwns is not None, verify that the given WWN is on that list.</p> <p>Returns (normalized_wwn, wwn_type), or exception if invalid wwn.</p> <dl class="fields"> </dl> </td></tr></table> </div> <a name="modprobe"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">modprobe</span>(<span class="sig-arg">module</span>)</span> </h3> </td><td align="right" valign="top" > </td> </tr></table> <p>Load the specified kernel module if needed.</p> <dl class="fields"> <dt>Parameters:</dt> <dd><ul class="nomargin-top"> <li><strong class="pname"><code>module</code></strong> (str) - The name of the kernel module to be loaded.</li> </ul></dd> </dl> </td></tr></table> </div> <a name="ignored"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">ignored</span>(<span class="sig-arg">*args</span>, <span class="sig-arg">**kwds</span>)</span> </h3> </td><td align="right" valign="top" > </td> </tr></table> <dl class="fields"> <dt>Decorators:</dt> <dd><ul class="nomargin-top"> <li><code>@contextmanager</code></li> </ul></dd> </dl> </td></tr></table> </div> <br /> <!-- ==================== NAVIGATION BAR ==================== --> <table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0"> <tr valign="middle"> <!-- Home link --> <th> <a href="rtslib-module.html">Home</a> </th> <!-- Tree link --> <th> <a href="module-tree.html">Trees</a> </th> <!-- Index link --> <th> <a href="identifier-index.html">Indices</a> </th> <!-- Help link --> <th> <a href="help.html">Help</a> </th> <!-- Project homepage --> <th class="navbar" align="right" width="100%"> <table border="0" cellpadding="0" cellspacing="0"> <tr><th class="navbar" align="center" >rtslib</th> </tr></table></th> </tr> </table> <table border="0" cellpadding="0" cellspacing="0" width="100%%"> <tr> <td align="left" class="footer"> Generated by Epydoc 3.0.1 on Fri Oct 17 15:23:48 2014 </td> <td align="right" class="footer"> <a target="mainFrame" href="http://epydoc.sourceforge.net" >http://epydoc.sourceforge.net</a> </td> </tr> </table> <script type="text/javascript"> <!-- // Private objects are initially displayed (because if // javascript is turned off then we want them to be // visible); but by default, we want to hide them. So hide // them unless we have a cookie that says to show them. checkCookie(); // --> </script> </body> </html>