Source code for jnpr.junos.cfg.user
# 3rd-party modules
from lxml.builder import E
# module packages
from jnpr.junos.cfg import Resource
from jnpr.junos import jxml as JXML
from jnpr.junos.cfg.user_ssh_key import UserSSHKey
[docs]class User(Resource):
"""
[edit system login user <name>]
Resource name: str
<name> is the user login name
Manages resources:
sshkey, UserSSHKey
"""
PROPERTIES = [
'uid',
'fullname', # the full-name field
'userclass', # user class
'password', # write-only clear-text password, will get crypt'd
'$password', # read-only crypt'd password
'$sshkeys', # read-only names of ssh-keys
]
MANAGES = {'sshkey': UserSSHKey}
# -----------------------------------------------------------------------
# XML readers
# -----------------------------------------------------------------------
def _xml_at_top(self):
return E.system(E.login(E.user(E.name(self._name))))
def _xml_at_res(self, xml):
return xml.find('.//user')
def _xml_to_py(self, has_xml, has_py):
Resource._r_has_xml_status(has_xml, has_py)
has_py['userclass'] = has_xml.findtext('class')
Resource.copyifexists(has_xml, 'full-name', has_py, 'fullname')
Resource.copyifexists(has_xml, 'uid', has_py)
if 'uid' in has_py:
has_py['uid'] = int(has_py['uid'])
auth = has_xml.find('authentication')
if auth is not None:
# plain-text password
Resource.copyifexists(
auth,
'encrypted-password',
has_py,
'$password')
# ssh-keys
sshkeys = auth.xpath('ssh-rsa | ssh-dsa')
if sshkeys is not None:
has_py['$sshkeys'] = [(sshkey.tag,
sshkey.findtext('name').strip())
for sshkey in sshkeys
]
# -----------------------------------------------------------------------
# XML property writers
# -----------------------------------------------------------------------
def _xml_change_fullname(self, xml):
xml.append(E('full-name', self['fullname']))
return True
def _xml_change_userclass(self, xml):
xml.append(E('class', self['userclass']))
return True
def _xml_change_password(self, xml):
xml.append(E.authentication(
E('plain-text-password-value', self['password'])
))
return True
def _xml_change_uid(self, xml):
xml.append(E.uid(str(self['uid'])))
return True
# -----------------------------------------------------------------------
# Manager List, Catalog
# -----------------------------------------------------------------------
def _r_list(self):
get = E.system(E.login(E.user(JXML.NAMES_ONLY)))
got = self.R.get_config(get)
self._rlist = [name.text for name in got.xpath('.//user/name')]