19.4. Utiliser LMIShell
19.4.1. Lancer, utiliser, et quitter LMIShell
Lancer le LMIShell en mode interactif
lmishell
sans argument supplémentaire :
lmishell
lmishell
avec l'option de ligne de commande --noverify
ou -n
:
lmishell --noverify
Utiliser la saisie semi-automatique avec la touche « Tab »
Historique de navigation
~/.lmishell_history
. Cela vous permet de parcourir l'historique des commandes et de réutiliser les lignes déjà saisies en mode interactif sans avoir à les réécrire dans l'invite. Pour reculer dans l'historique, veuillez appuyer sur la Flèche vers le haut ou sur la combinaison de touches Ctrl+p. Pour avancer dans l'historique des commandes, veuillez appuyer sur la touche Flèche vers le bas ou sur la combinaison de touches Ctrl+n.
> (reverse-i-search)`connect
':c = connect("server.example.com", "pegasus")
clear_history()
comme suit :
clear_history
()
history_length
dans le fichier de configuration ~/.lmishellrc
. En outre, vous pouvez modifier l'emplacement du fichier de l'historique en changeant la valeur de l'option history_file
dans ce fichier de configuration. Par exemple, pour paramétrer l'emplacement du fichier de l'historique sur ~/.lmishell_history
et pour configurer LMIShell pour qu'un maximum de 1000
lignes y soient stockées, veuillez ajouter les lignes suivantes au fichier ~/.lmishellrc
:
history_file = "~/.lmishell_history" history_length = 1000
Gestion des exceptions
use_exceptions()
comme suit :
use_exceptions
()
use_exception
(False
)
use_exceptions
dans le fichier de configuration ~/.lmishellrc
sur True
:
use_exceptions = True
Configurer un cache temporaire
clear_cache()
comme suit :
object_name.clear_cache
()
use_cache()
comme suit :
object_name.use_cache
(False
)
object_name.use_cache
(True
)
use_cache
dans le fichier de configuration ~/.lmishellrc
sur False
:
use_cache = False
Quitter LMIShell
quit()
comme suit :
> quit()
~]$
Exécuter un script LMIShell
lmishell
comme suit :
lmishell file_name
--interact
ou -i
:
lmishell --interact file_name
.lmi
.
19.4.2. Connexion à un CIMOM
Connexion à un CIMOM distant
connect()
comme suit :
connect
(host_name, user_name[, password])
LMIConnection
.
Exemple 19.1. Connexion à un CIMOM distant
server.example.com
en tant qu'utilisateur pegasus
, veuillez saisir ce qui suit dans l'invite interactive :
> c = connect("server.example.com", "pegasus")
password:
>
Connexion à un CIMOM local
root
et le socket /var/run/tog-pegasus/cimxml.socket
doit exister.
connect()
comme suit :
connect
(host_name)
localhost
, 127.0.0.1
, ou ::1
. la fonction retourne un objet LMIConnection
ou None
.
Exemple 19.2. Connexion à un CIMOM local
localhost
en tant qu'utilisateur root
, veuillez saisir ce qui suit dans l'invite interactive :
> c = connect("localhost")
>
Vérifier une connexion sur un CIMOM
connect()
retourne soit un objet LMIConnection
, ou None
si la connexion n'a pas pu être établie. En outre, lorsque la fonction connect()
ne parvient pas à établir une connexion, un message d'erreur est imprimé sur la sortie d'erreur standard.
isinstance()
comme suit :
isinstance
(object_name,LMIConnection
)
True
si object_name est un objet LMIConnection
, sinon elle retournera False
.
Exemple 19.3. Vérifier une connexion sur un CIMOM
c
, créée dans l'Exemple 19.1, « Connexion à un CIMOM distant », contient un objet LMIConnection
, veuillez saisir ce qui suit dans l'invite interactive :
> isinstance(c, LMIConnection)
True
>
c
n'est pas égal à None
:
> c is None
False
>
19.4.3. Utiliser des espaces de noms
root
est le premier point d'entrée d'un objet de connexion.
Répertorier les espaces de noms disponibles
print_namespaces()
, comme suit :
object_name.print_namespaces
()
namespaces
:
object_name.namespaces
Exemple 19.4. Répertorier les espaces de noms disponibles
root
de l'objet de connexion c
créé dans l'Exemple 19.1, « Connexion à un CIMOM distant » et pour répertorier les espaces de noms disponibles, veuillez saisir ce qui suit dans l'invite interactive :
> c.root.print_namespaces()
cimv2
interop
PG_InterOp
PG_Internal
>
root_namespaces
, veuillez saisir :
> root_namespaces = c.root.namespaces
>
Accéder aux objets d'espaces de noms
object_name.namespace_name
LMINamespace
sera retourné.
Exemple 19.5. Accéder aux objets d'espaces de noms
cimv2
de l'objet de connexion c
créé dans l'Exemple 19.1, « Connexion à un CIMOM distant » et l'assigner à une variable nommée ns
, veuillez saisir ce qui suit dans l'invite interactive :
> ns = c.root.cimv2
>
19.4.4. Utiliser des classes
Répertorier les classes disponibles
print_classes()
comme suit :
namespace_object.print_classes()
classes()
:
namespace_object.classes
()
Exemple 19.6. Répertorier les classes disponibles
ns
de l'objet de connexion créé dans l'Exemple 19.5, « Accéder aux objets d'espaces de noms » et pour répertorier les classes disponibles, veuillez saisir ce qui suit dans l'invite interactive :
> ns.print_classes()
CIM_CollectionInSystem
CIM_ConcreteIdentity
CIM_ControlledBy
CIM_DeviceSAPImplementation
CIM_MemberOfStatusCollection
...
>
cimv2_classes
, veuillez saisir :
> cimv2_classes = ns.classes()
>
Accéder aux objets de classe
namespace_object.class_name
Exemple 19.7. Accéder aux objets de classe
LMI_IPNetworkConnection
de l'objet de l'espace de noms ns
créé dans l'Exemple 19.5, « Accéder aux objets d'espaces de noms » et l'assigner à une variable nommée cls
, veuillez saisir ce qui suit dans l'invite interactive :
> cls = ns.LMI_IPNetworkConnection
>
Examiner les objets de classe
class_object.classname
class_object.namespace
doc()
comme suit :
class_object.doc
()
Exemple 19.8. Examiner les objets de classe
cls
créé dans l'Exemple 19.7, « Accéder aux objets de classe » et pour afficher son nom et son espace de noms correspondant, veuillez saisir ce qui suit dans l'invite interactive :
>cls.classname
'LMI_IPNetworkConnection' >cls.namespace
'root/cimv2' >
> cls.doc()
Class: LMI_IPNetworkConnection
SuperClass: CIM_IPNetworkConnection
[qualifier] string UMLPackagePath: 'CIM::Network::IP'
[qualifier] string Version: '0.1.0'
...
Répertorier les méthodes disponibles
print_methods()
, comme suit :
class_object.print_methods
()
methods()
:
class_object.methods()
Exemple 19.9. Répertorier les méthodes disponibles
cls
créé dans l'Exemple 19.7, « Accéder aux objets de classe » et pour répertorier toutes les méthodes disponibles, veuillez saisir ce qui suit dans l'invite interactive :
> cls.print_methods()
RequestStateChange
>
service_methods
, veuillez saisir :
> service_methods = cls.methods()
>
Répertorier les propriétés disponibles
print_properties()
comme suit :
class_object.print_properties
()
properties()
:
class_object.properties
()
Exemple 19.10. Répertorier les propriétés disponibles
cls
créé dans l'Exemple 19.7, « Accéder aux objets de classe » et pour répertorier toutes les propriétés disponibles, veuillez saisir ce qui suit dans l'invite interactive :
> cls.print_properties()
RequestedState
HealthState
StatusDescriptions
TransitioningToState
Generation
...
>
service_properties
, veuillez saisir :
> service_properties = cls.properties()
>
Répertorier et afficher les propriétés ValueMap
print_valuemap_properties()
, comme suit :
class_object.print_valuemap_properties
()
valuemap_properties()
:
class_object.valuemap_properties
()
Exemple 19.11. Répertorier les propriétés ValueMap
cls
créé dans l'Exemple 19.7, « Accéder aux objets de classe » et pour répertorier toutes les propriétés ValueMap disponibles, veuillez saisir ce qui suit dans l'invite interactive :
> cls.print_valuemap_properties()
RequestedState
HealthState
TransitioningToState
DetailedStatus
OperationalStatus
...
>
service_valuemap_properties
, veuillez saisir :
> service_valuemap_properties = cls.valuemap_properties()
>
class_object.valuemap_propertyValues
print_values()
, comme suit :
class_object.valuemap_propertyValues
.print_values
()
values()
:
class_object.valuemap_propertyValues
.values
()
Exemple 19.12. Accéder aux propriétés ValueMap
RequestedState
. Pour inspecter cette propriété et répertorier les valeurs constantes disponibles, veuillez saisir ce qui suit dans l'invite interactive :
> cls.RequestedStateValues.print_values()
Reset
NoChange
NotApplicable
Quiesce
Unknown
...
>
requested_state_values
, veuillez saisir :
> requested_state_values = cls.RequestedStateValues.values()
>
class_object.valuemap_propertyValues
.constant_value_name
value()
comme suit :
class_object.valuemap_propertyValues
.value
("constant_value_name")
value_name()
:
class_object.valuemap_propertyValues
.value_name
("constant_value")
Exemple 19.13. Accéder à des valeurs constantes
RequestedState
fournit une valeur constante nommée Reset
. Pour accéder à cette valeur constante nommée, veuillez saisir ce qui suit dans l'invite interactive :
>cls.RequestedStateValues.Reset
11 >cls.RequestedStateValues.value("Reset")
11 >
> cls.RequestedStateValues.value_name(11)
u'Reset'
>
Rechercher un objet CIMClass
CIMClass
, ce qui explique pourquoi LMIShell recherche uniquement cet objet dans le CIMOM lorsqu'une méthode appelée en a besoin. Pour rechercher l'objet CIMClass
manuellement, veuillez utiliser la méthode fetch()
, comme suit :
class_object.fetch
()
CIMClass
le recherchent automatiquement.
19.4.5. Utiliser des instances
Accéder à des instances
instances()
comme suit :
class_object.instances
()
LMIInstance
.
first_instance()
:
class_object.first_instance
()
LMIInstance
.
instances()
et first_instance()
prennent en charge un argument optionnel vous permettant de filtrer les résultats :
class_object.instances
(criteria)
class_object.first_instance
(criteria)
Exemple 19.14. Accéder à des instances
cls
créé dans l'Exemple 19.7, « Accéder aux objets de classe » dont la propriété ElementName
est égale à eth0
et pour l'assigner à une variable nommée device
, veuillez saisir ce qui suit dans l'invite interactive :
> device = cls.first_instance({"ElementName": "eth0"})
>
Examiner des instances
instance_object.classname
instance_object.namespace
instance_object.path
LMIInstanceName
.
doc()
comme suit :
instance_object.doc
()
Exemple 19.15. Examiner des instances
device
créé dans l'Exemple 19.14, « Accéder à des instances » et pour afficher son nom de classe et son espace de nom correspondant, veuillez saisir ce qui suit dans l'invite interactive :
>device.classname
u'LMI_IPNetworkConnection' >device.namespace
'root/cimv2' >
> device.doc()
Instance of LMI_IPNetworkConnection
[property] uint16 RequestedState = '12'
[property] uint16 HealthState
[property array] string [] StatusDescriptions
...
Créer de nouvelles instances
create_instance()
comme suit :
class_object.create_instance
(properties)
LMIInstance
.
Exemple 19.16. Créer de nouvelles instances
LMI_Group
représente les groupes de système et la classe LMI_Account
représente les comptes utilisateurs sur le système géré. Pour utiliser l'objet d'espace de noms ns
créé dans l'Exemple 19.5, « Accéder aux objets d'espaces de noms », veuillez créer des instances de ces deux classes pour le groupe de systèmes nommé pegasus
et l'utilisateur nommé lmishell-user
, et assignez-les aux variables nommées group
et user
, puis saisissez ce qui suit dans l'invite interactive :
>group = ns.LMI_Group.first_instance({"Name" : "pegasus"})
>user = ns.LMI_Account.first_instance({"Name" : "lmishell-user"})
>
LMI_Identity
pour l'utilisateur lmishell-user
, veuillez utiliser :
> identity = user.first_associator(ResultClass="LMI_Identity")
>
LMI_MemberOfGroup
représente l'adhésion au groupe de systèmes. Pour utiliser la classe LMI_MemberOfGroup
pour ajouter lmishell-user
au groupe pegasus
, veuillez créer une nouvelle instance de cette classe comme suit :
>ns.LMI_MemberOfGroup.create_instance({
..."Member" : identity.path,
..."Collection" : group.path})
LMIInstance(classname="LMI_MemberOfGroup", ...) >
Supprimer des instances individuelles
delete()
, comme suit :
instance_object.delete
()
Exemple 19.17. Supprimer des instances individuelles
LMI_Account
représente les comptes utilisateurs sur le système géré. Pour utiliser l'objet d'espace de noms ns
créé dans l'Exemple 19.5, « Accéder aux objets d'espaces de noms », veuillez créer une instance de la classe LMI_Account
pour l'utilisateur nommé lmishell-user
, et assignez-la à une variable nommée user
, puis saisissez ce qui suit dans l'invite interactive :
> user = ns.LMI_Account.first_instance({"Name" : "lmishell-user"})
>
lmishell-user
du système, veuillez saisir :
> user.delete()
True
>
Répertorier et accéder aux propriétés disponibles
print_properties()
, comme suit :
instance_object.print_properties
()
properties()
:
instance_object.properties
()
Exemple 19.18. Répertorier les propriétés disponibles
device
créé dans l'Exemple 19.14, « Accéder à des instances » et pour répertorier toutes les propriétés disponibles, veuillez saisir ce qui suit dans l'invite interactive :
> device.print_properties()
RequestedState
HealthState
StatusDescriptions
TransitioningToState
Generation
...
>
device_properties
, veuillez saisir :
> device_properties = device.properties()
>
instance_object.property_name
instance_object.property_name = value
push()
:
instance_object.push
()
Exemple 19.19. Accéder aux propriétés individuelles
device
créé dans l'Exemple 19.14, « Accéder à des instances » et pour afficher la valeur de la propriété nommée SystemName
, veuillez saisir ce qui suit dans l'invite interactive :
> device.SystemName
u'server.example.com'
>
Répertorier et utiliser les méthodes disponibles
print_methods()
, comme suit :
instance_object.print_methods
()
methods()
:
instance_object.methods
()
Exemple 19.20. Répertorier les méthodes disponibles
device
créé dans l'Exemple 19.14, « Accéder à des instances » et pour répertorier toutes les méthodes disponibles, veuillez saisir ce qui suit dans l'invite interactive :
> device.print_methods()
RequestStateChange
>
network_device_methods
, veuillez saisir :
> network_device_methods = device.methods()
>
instance_object.method_name( parameter=value, ...)
Important
LMIInstance
ne réactualisent pas automatiquement leur contenu (propriétés, méthodes, qualificateurs, et ainsi de suite). Pour cela, veuillez utiliser la méthode refresh()
comme décrit ci-dessous.
Exemple 19.21. Utiliser des méthodes
PG_ComputerSystem
représente le système. Pour créer une instance de cette classe en utilisant l'objet d'espace de noms ns
créé dans l'Exemple 19.5, « Accéder aux objets d'espaces de noms » et pour l'assigner à une variable nommée sys
, veuillez saisir ce qui suit dans l'invite interactive :
> sys = ns.PG_ComputerSystem.first_instance()
>
LMI_AccountManagementService
implémente les méthodes qui vous permettent de gérer des utilisateurs et des groupes dans le système. Pour créer une instance de cette classe et l'assigner à une variable nommée acc
, veuillez saisir :
> acc = ns.LMI_AccountManagementService.first_instance()
>
lmishell-user
dans le système, veuillez utiliser la méthode CreateAccount()
, comme suit :
> acc.CreateAccount(Name="lmishell-user", System=sys)
LMIReturnValue(rval=0, rparams=NocaseDict({u'Account': LMIInstanceName(classname="LMI_Account"...), u'Identities': [LMIInstanceName(classname="LMI_Identity"...), LMIInstanceName(classname="LMI_Identity"...)]}), errorstr='')
LMI_StorageJob
LMI_SoftwareInstallationJob
LMI_NetworkJob
instance_object.Sync
method_name(
parameter=value,
...)
Sync
dans leur nom et retournent un tuple à trois éléments consistant de la valeur de retour de la tâche, des paramètres de retour de la tâche, et de la chaîne d'erreur de celle-ci.
PreferPolling
, comme suit :
instance_object.Sync
method_name(PreferPolling
=True
parameter=value, ...)
Répertorier et afficher les paramètres ValueMap
print_valuemap_parameters()
, comme suit :
instance_object.method_name.print_valuemap_parameters
()
valuemap_parameters()
:
instance_object.method_name.valuemap_parameters
()
Exemple 19.22. Répertorier les paramètres ValueMap
acc
créé dans l'Exemple 19.21, « Utiliser des méthodes » et pour répertorier tous les paramètres ValueMap disponibles de la méthode CreateAccount()
, veuillez saisir ce qui suit dans l'invite interactive :
> acc.CreateAccount.print_valuemap_parameters()
CreateAccount
>
create_account_parameters
, veuillez saisir :
> create_account_parameters = acc.CreateAccount.valuemap_parameters()
>
instance_object.method_name.valuemap_parameterValues
print_values()
, comme suit :
instance_object.method_name.valuemap_parameterValues
.print_values
()
values()
:
instance_object.method_name.valuemap_parameterValues
.values
()
Exemple 19.23. Accéder aux paramètres ValueMap
CreateAccount
. Pour inspecter ce paramètre et répertorier les valeurs constantes disponibles, veuillez saisir ce qui suit dans l'invite interactive :
> acc.CreateAccount.CreateAccountValues.print_values()
Operationunsupported
Failed
Unabletosetpasswordusercreated
Unabletocreatehomedirectoryusercreatedandpasswordset
Operationcompletedsuccessfully
>
create_account_values
, veuillez saisir :
> create_account_values = acc.CreateAccount.CreateAccountValues.values()
>
instance_object.method_name.valuemap_parameterValues
.constant_value_name
value()
comme suit :
instance_object.method_name.valuemap_parameterValues
.value
("constant_value_name")
value_name()
:
instance_object.method_name.valuemap_parameterValues
.value_name
("constant_value")
Exemple 19.24. Accéder à des valeurs constantes
CreateAccount
fournit une valeur constante nommée Failed
. Pour accéder à cette valeur constante nommée, veuillez saisir ce qui suit dans l'invite interactive :
>acc.CreateAccount.CreateAccountValues.Failed
2 >acc.CreateAccount.CreateAccountValues.value("Failed")
2 >
> acc.CreateAccount.CreateAccountValues.value_name(2)
u'Failed'
>
Actualiser les objets d'instances
refresh()
, comme suit :
instance_object.refresh
()
Exemple 19.25. Actualiser les objets d'instances
device
créé dans l'Exemple 19.14, « Accéder à des instances », veuillez saisir ce qui suit dans l'invite interactive :
> device.refresh()
LMIReturnValue(rval=True, rparams=NocaseDict({}), errorstr='')
>
Afficher la représentation MOF
tomof()
comme suit :
instance_object.tomof
()
Exemple 19.26. Afficher la représentation MOF
device
créé dans l'Exemple 19.14, « Accéder à des instances », veuillez saisir ce qui suit dans l'invite interactive :
> device.tomof()
instance of LMI_IPNetworkConnection {
RequestedState = 12;
HealthState = NULL;
StatusDescriptions = NULL;
TransitioningToState = 12;
...
19.4.6. Utiliser des noms d'instance
Accéder aux noms d'instances
CIMInstance
sont identifiés par des objets CIMInstanceName
. Pour obtenir une liste de tous les objets des noms d'instances disponibles, veuillez utiliser la méthode instance_names()
, comme suit :
class_object.instance_names
()
LMIInstanceName
.
first_instance_name()
:
class_object.first_instance_name
()
LMIInstanceName
.
instances_names()
et first_instance_name()
prennent en charge un argument optionnel vous permettant de filtrer les résultats :
class_object.instance_names
(criteria)
class_object.first_instance_name
(criteria)
Exemple 19.27. Accéder aux noms d'instances
cls
créé dans l'Exemple 19.7, « Accéder aux objets de classe » dont la propriété clé Name
est égale à eth0
et pour l'assigner à une variable nommée device_name
, veuillez saisir ce qui suit dans l'invite interactive :
> device_name = cls.first_instance_name({"Name": "eth0"})
>
Examiner des noms d'instance
instance_name_object.classname
instance_name_object.namespace
Exemple 19.28. Examiner des noms d'instance
device_name
créé dans l'Exemple 19.27, « Accéder aux noms d'instances » et pour afficher son nom de classe et son espace de nom correspondant, veuillez saisir ce qui suit dans l'invite interactive :
>device_name.classname
u'LMI_IPNetworkConnection' >device_name.namespace
'root/cimv2' >
Créer de nouveaux noms d'instance
CIMInstanceName
encapsulé (« wrapped ») si vous connaissez toutes les clés principales d'un objet distant. Cet objet de nom d'instance peut ensuite être utilisé pour récupérer l'objet d'instance entier.
new_instance_name()
, comme suit :
class_object.new_instance_name
(key_properties)
LMIInstanceName
.
Exemple 19.29. Créer de nouveaux noms d'instance
LMI_Account
représente les comptes utilisateurs sur le système géré. Pour utiliser l'objet d'espace de noms ns
créé dans l'Exemple 19.5, « Accéder aux objets d'espaces de noms », et pour créer une nouvelle instance de la classe LMI_Account
représentant l'utilisateur lmishell-user
sur le système géré, veuillez saisir ce qui suit dans l'invite interactive :
>instance_name = ns.LMI_Account.new_instance_name({
..."CreationClassName" : "LMI_Account",
..."Name" : "lmishell-user",
..."SystemCreationClassName" : "PG_ComputerSystem",
..."SystemName" : "server"})
>
Répertorier et accéder aux propriétés clés
print_key_properties()
, comme suit :
instance_name_object.print_key_properties
()
key_properties()
:
instance_name_object.key_properties
()
Exemple 19.30. Répertorier les propriétés clés disponibles
device_name
créé dans l'Exemple 19.27, « Accéder aux noms d'instances » et pour répertorier toutes les propriétés clés disponibles, veuillez saisir ce qui suit dans l'invite interactive :
> device_name.print_key_properties()
CreationClassName
SystemName
Name
SystemCreationClassName
>
device_name_properties
, veuillez saisir :
> device_name_properties = device_name.key_properties()
>
instance_name_object.key_property_name
Exemple 19.31. Accéder aux propriétés clés individuelles
device_name
créé dans l'Exemple 19.27, « Accéder aux noms d'instances » et pour afficher la valeur de la propriété clé nommée SystemName
, veuillez saisir ce qui suit dans l'invite interactive :
> device_name.SystemName
u'server.example.com'
>
Convertir des noms d'instances en instances
to_instance()
comme suit :
instance_name_object.to_instance
()
LMIInstance
.
Exemple 19.32. Convertir des noms d'instances en instances
device_name
créé dans l'Exemple 19.27, « Accéder aux noms d'instances » en objet d'instance et pour l'assigner à une variable nommée device
, veuillez saisir ce qui suit dans l'invite interactive :
> device = device_name.to_instance()
>
19.4.7. Utiliser des objets associés
Accéder à des instances associées
associators()
comme suit :
instance_object.associators
(AssocClass
=class_name,ResultClass
=class_name,ResultRole
=role,IncludeQualifiers
=include_qualifiers,IncludeClassOrigin
=include_class_origin,PropertyList
=property_list)
first_associator()
:
instance_object.first_associator
(AssocClass
=class_name,ResultClass
=class_name,ResultRole
=role,IncludeQualifiers
=include_qualifiers,IncludeClassOrigin
=include_class_origin,PropertyList
=property_list)
AssocClass
— chaque objet retourné doit être associé à l'objet source à travers une instance de cette classe ou de l'une de ses sous-classes. La valeur par défaut estNone
.ResultClass
— chaque objet retourné doit être une instance de cette classe ou de l'une de ses sous-classes, ou doit être cette classe ou l'une de ses sous-classes. La valeur par défaut estNone
.Role
— chaque objet retourné doit être associé à l'objet source à travers une association dans laquelle l'objet source joue le rôle spécifié. Le nom de la propriété dans la classe d'association faisant référence à l'objet source doit correspondre à la valeur de ce paramètre. La valeur par défaut estNone
.ResultRole
— chaque objet retourné doit être associé à l'objet source à travers une association pour laquelle l'objet retourné joue le rôle spécifié. Le nom de la propriété dans la classe d'association faisant référence à l'objet retourné doit correspondre à la valeur de ce paramètre. La valeur par défaut estNone
.
IncludeQualifiers
— un booléen indiquant si les qualificateurs de chaque objet (y compris les qualificateurs de l'objet et de toute propriété retournée) doivent être inclus en tant qu'éléments « QUALIFIER » dans la réponse. La valeur par défaut estFalse
.IncludeClassOrigin
— un booléen indiquant si l'attribut CLASSORIGIN doit être présent sur tous les éléments correspondants de chaque objet retourné. La valeur par défaut estFalse
.PropertyList
— les membres de cette liste définissent un ou plusieurs noms de propriétés. Les objets retournés n'inclueront pas d'éléments pour toute propriété manquante à cette liste. SiPropertyList
est une liste vide, aucune propriété ne sera incluse dans les objets retournés. SiNone
, aucun filtre supplémentaire ne sera défini. La valeur par défaut estNone
.
Exemple 19.33. Accéder à des instances associées
LMI_StorageExtent
représente les périphériques blocs disponibles sur le système. Pour utiliser l'objet d'espace de nom ns
créé dans l'Exemple 19.5, « Accéder aux objets d'espaces de noms », veuillez créer une instance de la classe LMI_StorageExtent
pour le périphérique bloc nommé /dev/vda
, et assignez-la à une variable nommée vda
, puis saisissez ce qui suit dans l'invite interactive :
>vda = ns.LMI_StorageExtent.first_instance({
..."DeviceID" : "/dev/vda"})
>
vda_partitions
, veuillez utiliser la méthode associators()
comme suit :
> vda_partitions = vda.associators(ResultClass="LMI_DiskPartition")
>
Accéder aux noms d'instances associés
associator_names()
comme suit :
instance_object.associator_names
(AssocClass
=class_name,ResultClass
=class_name,Role
=role,ResultRole
=role)
first_associator_name()
:
instance_object.first_associator_name
(AssocClass
=class_object,ResultClass
=class_object,Role
=role,ResultRole
=role)
AssocClass
— chaque nom retourné identifie un objet devant être associé à l'objet source à travers une instance de cette classe ou de l'une de ses sous-classes. La valeur par défaut estNone
.ResultClass
— chaque nom retourné identifie un objet qui est une instance de cette classe ou l'une de ses sous-classes, ou qui doit être cette classe ou l'une de ses sous-classes. La valeur par défaut estNone
.Role
— chaque nom retourné identifie un objet devant être associé à l'objet source à travers une association dans laquelle l'objet source joue le rôle spécifié. Le nom de la propriété dans la classe d'association faisant référence à l'objet source doit correspondre à la valeur de ce paramètre. La valeur par défaut estNone
.ResultRole
— chaque nom retourné identifie un objet devant être associé à l'objet source à travers une association dans laquelle l'objet nommé retourné joue le rôle spécifié. Le nom de la propriété dans la classe d'association faisant référence à l'objet retourné doit correspondre à la valeur de ce paramètre. La valeur par défaut estNone
.
Exemple 19.34. Accéder aux noms d'instances associés
vda
créé dans l'Exemple 19.33, « Accéder à des instances associées », veuillez obtenir une liste de ses noms d'instances associés, puis assignez-la à une variable nommée vda_partitions
, saisissez :
> vda_partitions = vda.associator_names(ResultClass="LMI_DiskPartition")
>
19.4.8. Utiliser des objets d'association
Accéder à des instances d'association
references()
, comme suit :
instance_object.references
(ResultClass
=class_name,Role
=role,IncludeQualifiers
=include_qualifiers,IncludeClassOrigin
=include_class_origin,PropertyList
=property_list)
first_reference()
:
instance_object.first_reference
( ...ResultClass
=class_name, ...Role
=role, ...IncludeQualifiers
=include_qualifiers, ...IncludeClassOrigin
=include_class_origin, ...PropertyList
=property_list) >
ResultClass
— chaque objet retourné doit être une instance de cette classe ou de l'une de ses sous-classes, ou doit être cette classe ou l'une de ses sous-classes. La valeur par défaut estNone
.Role
— chaque objet retourné doit faire référence à l'objet cible à travers une propriété avec un nom correspondant à la valeur de ce paramètre. La valeur par défaut estNone
.
IncludeQualifiers
— un booléen indiquant si chaque objet (y compris les qualificateurs de l'objet et de toute propriété retournée) doit être inclus en tant qu'élément « QUALIFIER » dans la réponse. La valeur par défaut estFalse
.IncludeClassOrigin
— un booléen indiquant si l'attribut CLASSORIGIN doit être présent sur tous les éléments correspondants de chaque objet retourné. La valeur par défaut estFalse
.PropertyList
— les membres de cette liste définissent un ou plusieurs noms de propriété. Les objets retournés n'inclueront pas d'éléments pour toute propriété manquante de cette liste. SiPropertyList
est une liste vide, aucune propriété ne sera incluse dans les objets retournés. SiNone
, aucun filtre supplémentaire ne sera défini. La valeur par défaut estNone
.
Exemple 19.35. Accéder à des instances d'association
LMI_LANEndpoint
représente un point de terminaison de communication associé à un certain périphérique d'interface réseau. Pour utiliser l'objet d'espace de noms ns
créé dans l'Exemple 19.5, « Accéder aux objets d'espaces de noms », veuillez créer une instance de la classe LMI_LANEndpoint
pour le périphérique d'interface réseau nommé eth0, et assignez-la à une variable nommée lan_endpoint
, puis saisissez ce qui suit dans l'invite interactive :
>lan_endpoint = ns.LMI_LANEndpoint.first_instance({
..."Name" : "eth0"})
>
LMI_BindsToLANEndpoint
et pour l'assigner à une variable nommée bind
, veuillez saisir :
>bind = lan_endpoint.first_reference(
...ResultClass="LMI_BindsToLANEndpoint")
>
Dependent
pour accéder à la classe dépendante LMI_IPProtocolEndpoint
qui représente l'adresse IP du périphérique de l'interface réseau correspondant :
>ip = bind.Dependent.to_instance()
>print ip.IPv4Address
192.168.122.1 >
Accéder aux noms d'instances d'associations
reference_names()
comme suit :
instance_object.reference_names
(ResultClass
=class_name,Role
=role)
first_reference_name()
:
instance_object.first_reference_name
(ResultClass
=class_name,Role
=role)
ResultClass
— chaque objet retourné doit identifier une instance de cette classe ou de l'une de ses sous-classes, ou cette classe ou l'une de ses sous-classes. La valeur par défaut estNone
.Role
— chaque objet retourné doit identifier un objet ui se réfère à une instance cible à travers une propriété avec un nom correspondant à la valeur de ce paramètre. La valeur par défaut estNone
.
Exemple 19.36. Accéder aux noms d'instances d'associations
Ian_endpoint
créé dans l'Exemple 19.35, « Accéder à des instances d'association », accéder au premier nom d'instance d'association faisant référence à un objet LMI_BindsToLANEndpoint
, et l'assigner à une variable nommée bind
, veuillez saisir :
>bind = lan_endpoint.first_reference_name(
...ResultClass="LMI_BindsToLANEndpoint")
Dependent
pour accéder à la classe dépendante LMI_IPProtocolEndpoint
qui représente l'adresse IP du périphérique de l'interface réseau correspondant :
>ip = bind.Dependent.to_instance()
>print ip.IPv4Address
192.168.122.1 >
19.4.9. Travailler avec des indications
S'abonner à des indications
subscribe_indication()
, comme suit :
connection_object.subscribe_indication
(QueryLanguage
="WQL"
,Query
='SELECT * FROM CIM_InstModification'
,Name
="cpu"
,CreationNamespace
="root/interop"
,SubscriptionCreationClassName
="CIM_IndicationSubscription"
,FilterCreationClassName
="CIM_IndicationFilter"
,FilterSystemCreationClassName
="CIM_ComputerSystem"
,FilterSourceNamespace
="root/cimv2"
,HandlerCreationClassName
="CIM_IndicationHandlerCIMXML"
,HandlerSystemCreationClassName
="CIM_ComputerSystem"
,Destination
="http://host_name:5988"
)
connection_object.subscribe_indication
(Query
='SELECT * FROM CIM_InstModification'
,Name
="cpu"
,Destination
="http://host_name:5988"
)
permanente = True
à l'appel de méthode subscribe_indication()
. Cela empêchera LMIShell de supprimer l'abonnement.
Exemple 19.37. S'abonner à des indications
c
créé dans Exemple 19.1, « Connexion à un CIMOM distant » et pour vous abonner à une indication nommée cpu
, veuillez saisir ce qui suit dans l'invite interactive :
>c.subscribe_indication(
...QueryLanguage="WQL",
...Query='SELECT * FROM CIM_InstModification',
...Name="cpu",
...CreationNamespace="root/interop",
...SubscriptionCreationClassName="CIM_IndicationSubscription",
...FilterCreationClassName="CIM_IndicationFilter",
...FilterSystemCreationClassName="CIM_ComputerSystem",
...FilterSourceNamespace="root/cimv2",
...HandlerCreationClassName="CIM_IndicationHandlerCIMXML",
...HandlerSystemCreationClassName="CIM_ComputerSystem",
...Destination="http://server.example.com:5988")
LMIReturnValue(rval=True, rparams=NocaseDict({}), errorstr='') >
Répertorier les indications abonnées
print_subscribed_indications()
, comme suit :
connection_object.print_subscribed_indications
()
subscribed_indications()
comme suit :
connection_object.subscribed_indications
()
Exemple 19.38. Répertorier les indications abonnées
c
créé dans l'Exemple 19.1, « Connexion à un CIMOM distant » et pour répertorier les indications abonnées, veuillez saisir ce qui suit dans l'invite interactive :
> c.print_subscribed_indications()
>
indications
, veuillez saisir :
> indications = c.subscribed_indications()
>
Se désabonner des indications
unsubscribe_indication()
comme suit :
connection_object.unsubscribe_indication
(indication_name)
unsubscribe_all_indications()
:
connection_object.unsubscribe_all_indications
()
Exemple 19.39. Se désabonner des indications
c
créé dans Exemple 19.1, « Connexion à un CIMOM distant » et pour vous désabonner de l'indication créée dans l' Exemple 19.37, « S'abonner à des indications », veuillez saisir ce qui suit dans l'invite interactive :
> c.unsubscribe_indication('cpu')
LMIReturnValue(rval=True, rparams=NocaseDict({}), errorstr='')
>
Implémenter un gestionnaire d'indications (« Indication Handler »)
subscribe_indication()
vous permet de spécifier le nom d'hôte du système sur lequel vous souhaitez remettre les indications. L'exemple ci-dessous montre comment implémenter un gestionnaire d'indications :
>def handler(ind, arg1, arg2, **kwargs):
...exported_objects = ind.exported_objects()
...do_something_with(exported_objects)
>listener = LmiIndicationListener("0.0.0.0", listening_port)
>listener.add_handler("indication-name-XXXXXXXX", handler, arg1, arg2, **kwargs)
>listener.start()
>
LmiIndication
, qui contient une liste de méthodes et d'objets exportés par l'indication. D'autres paramètres sont spécifiques à l'utilisateur : ces arguments devront être spécifiés lors de l'ajout d'un gestionnaire au listener.
add_handler()
utilise une chaîne spéciale avec huit caractères « X ». Ces caractères sont remplacés par une chaîne aléatoire générée par des listeners afin d'éviter une collision possible de noms de gestionnaire. Pour utiliser la chaîne aléatoire, commencez par lancer le listener d'indications, puis abonnez-vous à une indication afin que la propriété Destination
de l'objet du gestionnaire contienne la valeur suivante : schema://host_name/random_string
.
Exemple 19.40. Implémenter un gestionnaire d'indications (« Indication Handler »)
192.168.122.1
et qui appelle la fonction indication_callback()
lorsqu'un nouveau compte utilisateur est créé :
#!/usr/bin/lmishell import sys from time import sleep from lmi.shell.LMIUtil import LMIPassByRef from lmi.shell.LMIIndicationListener import LMIIndicationListener # These are passed by reference to indication_callback var1 = LMIPassByRef("some_value") var2 = LMIPassByRef("some_other_value") def indication_callback(ind, var1, var2): # Do something with ind, var1 and var2 print ind.exported_objects() print var1.value print var2.value c = connect("hostname", "username", "password") listener = LMIIndicationListener("0.0.0.0", 65500) unique_name = listener.add_handler( "demo-XXXXXXXX", # Creates a unique name for me indication_callback, # Callback to be called var1, # Variable passed by ref var2 # Variable passed by ref ) listener.start() print c.subscribe_indication( Name=unique_name, Query="SELECT * FROM LMI_AccountInstanceCreationIndication WHERE SOURCEINSTANCE ISA LMI_Account", Destination="192.168.122.1:65500" ) try: while True: sleep(60) except KeyboardInterrupt: sys.exit(0)
19.4.10. Exemple d'utilisation
c = connect("host_name", "user_name", "password") ns = c.root.cimv2
Utiliser le fournisseur du service OpenLMI
Exemple 19.41. Répertorier les services disponibles
TRUE
) ou est arrêté (FALSE
), et la chaîne de statut, veuillez utiliser l'extrait de code suivant :
for service in ns.LMI_Service.instances(): print "%s:\t%s" % (service.Name, service.Status)
cls = ns.LMI_Service for service in cls.instances(): if service.EnabledDefault == cls.EnabledDefaultValues.Enabled: print service.Name
EnabledDefault
est égale à 2
pour les services activés et à 3
pour les services désactivés.
cups
, veuillez utiliser :
cups = ns.LMI_Service.first_instance({"Name": "cups.service"}) cups.doc()
Exemple 19.42. Lancer et arrêter des services
cups
et pour afficher son statut actuel, veuillez utiliser l'extrait de code suivant :
cups = ns.LMI_Service.first_instance({"Name": "cups.service"}) cups.StartService() print cups.Status cups.StopService() print cups.Status
Exemple 19.43. Activer et désactiver des services
cups
et pour afficher sa propriété EnabledDefault
, veuillez utiliser l'extrait de code suivant :
cups = ns.LMI_Service.first_instance({"Name": "cups.service"}) cups.TurnServiceOff() print cups.EnabledDefault cups.TurnServiceOn() print cups.EnabledDefault
Utiliser le fournisseur réseau OpenLMI
Exemple 19.44. Répertorier les adresses IP associées à un numéro de port donné
device = ns.LMI_IPNetworkConnection.first_instance({'ElementName': 'eth0'}) for endpoint in device.associators(AssocClass="LMI_NetworkSAPSAPDependency", ResultClass="LMI_IPProtocolEndpoint"): if endpoint.ProtocolIFType == ns.LMI_IPProtocolEndpoint.ProtocolIFTypeValues.IPv4: print "IPv4: %s/%s" % (endpoint.IPv4Address, endpoint.SubnetMask) elif endpoint.ProtocolIFType == ns.LMI_IPProtocolEndpoint.ProtocolIFTypeValues.IPv6: print "IPv6: %s/%d" % (endpoint.IPv6Address, endpoint.IPv6SubnetPrefixLength)
LMI_IPProtocolEndpoint
associée à une classe LMI_IPNetworkConnection
donnée.
for rsap in device.associators(AssocClass="LMI_NetworkRemoteAccessAvailableToElement", ResultClass="LMI_NetworkRemoteServiceAccessPoint"): if rsap.AccessContext == ns.LMI_NetworkRemoteServiceAccessPoint.AccessContextValues.DefaultGateway: print "Default Gateway: %s" % rsap.AccessInfo
LMI_NetworkRemoteServiceAccessPoint
dont la propriété AccessContext
est égale à DefaultGateway
.
- Obtenez les instances
LMI_IPProtocolEndpoint
associées avecLMI_IPNetworkConnection
en utilisantLMI_NetworkSAPSAPDependency
. - Utilisez la même association pour les instances
LMI_DNSProtocolEndpoint
.
LMI_NetworkRemoteServiceAccessPoint
dont la propriété AccessContext
est égale au serveur DNS associé à travers LMI_NetworkRemoteAccessAvailableToElement
possèdent l'adresse du serveur DNS dans la propriété AccessInfo
.
RemoteServiceAccessPath
et les entrées peuvent être dupliquées. L'extrait de code suivant utilise la fonction set()
pour supprimer les entrées dupliquées de la liste des serveurs DNS :
dnsservers = set() for ipendpoint in device.associators(AssocClass="LMI_NetworkSAPSAPDependency", ResultClass="LMI_IPProtocolEndpoint"): for dnsedpoint in ipendpoint.associators(AssocClass="LMI_NetworkSAPSAPDependency", ResultClass="LMI_DNSProtocolEndpoint"): for rsap in dnsedpoint.associators(AssocClass="LMI_NetworkRemoteAccessAvailableToElement", ResultClass="LMI_NetworkRemoteServiceAccessPoint"): if rsap.AccessContext == ns.LMI_NetworkRemoteServiceAccessPoint.AccessContextValues.DNSServer: dnsservers.add(rsap.AccessInfo) print "DNS:", ", ".join(dnsservers)
Exemple 19.45. Créer une nouvelle connexion et configurer une adresse IP statique
capability = ns.LMI_IPNetworkConnectionCapabilities.first_instance({ 'ElementName': 'eth0' }) result = capability.LMI_CreateIPSetting(Caption='eth0 Static', IPv4Type=capability.LMI_CreateIPSetting.IPv4TypeValues.Static, IPv6Type=capability.LMI_CreateIPSetting.IPv6TypeValues.Stateless) setting = result.rparams["SettingData"].to_instance() for settingData in setting.associators(AssocClass="LMI_OrderedIPAssignmentComponent"): if setting.ProtocolIFType == ns.LMI_IPAssignmentSettingData.ProtocolIFTypeValues.IPv4: # Set static IPv4 address settingData.IPAddresses = ["192.168.1.100"] settingData.SubnetMasks = ["255.255.0.0"] settingData.GatewayAddresses = ["192.168.1.1"] settingData.push()
LMI_CreateIPSetting()
sur l'instance de LMI_IPNetworkConnectionCapabilities
, qui est associée avec LMI_IPNetworkConnection
à travers LMI_IPNetworkConnectionElementCapabilities
. Il utilise également la méthode push()
pour modifier le paramètre.
Exemple 19.46. Activer une connexion
ApplySettingToIPNetworkConnection()
de la classe LMI_IPConfigurationService
. Cette méthode est asynchrone et retourne une tâche. Les extraits de code suivants illustrent comment appeler cette méthode de manière synchrone :
setting = ns.LMI_IPAssignmentSettingData.first_instance({ "Caption": "eth0 Static" }) port = ns.LMI_IPNetworkConnection.first_instance({ 'ElementName': 'ens8' }) service = ns.LMI_IPConfigurationService.first_instance() service.SyncApplySettingToIPNetworkConnection(SettingData=setting, IPNetworkConnection=port, Mode=32768)
Mode
affecte la manière dont le paramètre est appliqué. Les valeurs les plus couramment utilisées de ce paramètre sont comme suit :
1
— applique le paramètre immédiatement et le rend automatiquement actif.2
— rend le paramètre automatiquement actif mais ne l'applique pas immédiatement.4
— déconnecte et désactive l'activation automatique.5
— ne modifie pas l'état du paramètre, désactive uniquement l'activation automatique.32768
— applique le paramètre.32769
— déconnexion.
Utiliser le fournisseur de stockage OpenLMI
c
et ns
, ces exemples utilisent les définitions de variables suivantes :
MEGABYTE = 1024*1024 storage_service = ns.LMI_StorageConfigurationService.first_instance() filesystem_service = ns.LMI_FileSystemConfigurationService.first_instance()
Exemple 19.47. Créer un groupe de volumes
/dev/myGroup/
qui possède trois membres et une taille d'extension par défaut de 4 Mo, veuillez utiliser l'extrait de code suivant :
# Find the devices to add to the volume group # (filtering the CIM_StorageExtent.instances() # call would be faster, but this is easier to read): sda1 = ns.CIM_StorageExtent.first_instance({"Name": "/dev/sda1"}) sdb1 = ns.CIM_StorageExtent.first_instance({"Name": "/dev/sdb1"}) sdc1 = ns.CIM_StorageExtent.first_instance({"Name": "/dev/sdc1"}) # Create a new volume group: (ret, outparams, err) = storage_service.SyncCreateOrModifyVG( ElementName="myGroup", InExtents=[sda1, sdb1, sdc1]) vg = outparams['Pool'].to_instance() print "VG", vg.PoolID, \ "with extent size", vg.ExtentSize, \ "and", vg.RemainingExtents, "free extents created."
Exemple 19.48. Créer un volume logique
# Find the volume group: vg = ns.LMI_VGStoragePool.first_instance({"Name": "/dev/mapper/myGroup"}) # Create the first logical volume: (ret, outparams, err) = storage_service.SyncCreateOrModifyLV( ElementName="Vol1", InPool=vg, Size=100 * MEGABYTE) lv = outparams['TheElement'].to_instance() print "LV", lv.DeviceID, \ "with", lv.BlockSize * lv.NumberOfBlocks,\ "bytes created." # Create the second logical volume: (ret, outparams, err) = storage_service.SyncCreateOrModifyLV( ElementName="Vol2", InPool=vg, Size=100 * MEGABYTE) lv = outparams['TheElement'].to_instance() print "LV", lv.DeviceID, \ "with", lv.BlockSize * lv.NumberOfBlocks, \ "bytes created."
Exemple 19.49. Créer un système de fichiers
ext3
sur un volume logique lv
selon l'Exemple 19.48, « Créer un volume logique », veuillez utiliser l'extrait de code suivant :
(ret, outparams, err) = filesystem_service.SyncLMI_CreateFileSystem( FileSystemType=filesystem_service.LMI_CreateFileSystem.FileSystemTypeValues.EXT3, InExtents=[lv])
Exemple 19.50. Monter un système de fichiers
# Find the file system on the logical volume: fs = lv.first_associator(ResultClass="LMI_LocalFileSystem") mount_service = ns.LMI_MountConfigurationService.first_instance() (rc, out, err) = mount_service.SyncCreateMount( FileSystemType='ext3', Mode=32768, # just mount FileSystem=fs, MountPoint='/mnt/test', FileSystemSpec=lv.Name)
Exemple 19.51. Répertorier les périphériques blocs
devices = ns.CIM_StorageExtent.instances() for device in devices: if lmi_isinstance(device, ns.CIM_Memory): # Memory and CPU caches are StorageExtents too, do not print them continue print device.classname, print device.DeviceID, print device.Name, print device.BlockSize*device.NumberOfBlocks
Utiliser le fournisseur de matériel OpenLMI
Exemple 19.52. Afficher les informations du CPU
cpu = ns.LMI_Processor.first_instance() cpu_cap = cpu.associators(ResultClass="LMI_ProcessorCapabilities")[0] print cpu.Name print cpu_cap.NumberOfProcessorCores print cpu_cap.NumberOfHardwareThreads
Exemple 19.53. Afficher les informations de mémoire
mem = ns.LMI_Memory.first_instance() for i in mem.associators(ResultClass="LMI_PhysicalMemory"): print i.Name
Exemple 19.54. Afficher les informations du châssis
chassis = ns.LMI_Chassis.first_instance() print chassis.Manufacturer print chassis.Model
Exemple 19.55. Répertorier les périphériques PCI
for pci in ns.LMI_PCIDevice.instances(): print pci.Name