Keith,

The purposed changes sound good.

Thanks,

John

On May 5, 2011, at 11:39 AM, Keith Mitchell wrote:

> Hi John,
> 
> Thanks for reviewing! Responses are inline. An updated webrev will be made 
> available after Sue responds to the man page questions.
> 
> - Keith
> 
> 
> On 05/ 4/11 04:41 PM, John Fischer wrote:
>> Sue, Keith, Jesse,
>> 
>> Y'all have been busy making changes which look really good.
>> 
>> Here are my comments on the webrev.
>> 
>> Thanks,
>> 
>> John
>> 
>> 
>> 
>> 
>> 
>> ================================================================================
>>  
>> usr/src/cmd/ai-webserver/AI_database.py
>> ================================================================================
>>  
>> Looks good.
>> 
>> I'll try to remember to use the 'as' syntax for exceptions.
>> ================================================================================
>>  
>> usr/src/cmd/ai-webserver/cgi_get_manifest.py
>> ================================================================================
>>  
>> 1. Should the following be changed to use the 'as' syntax:
>> 
>> 320     except OSError, err:
>> 418             except IOError, err:
>> 436             except lxml.etree.XMLSyntaxError, err:
>> 460                 except lxml.etree.XMLSyntaxError, err:
> 
> 'as' syntax is preferred as it is less ambiguous when catching multiple 
> exception classes ("except (A, B) as C" vs "except (A, B), C" vs "except A, 
> C" vs "except A as C"). The cases I changed were the ones I saw while merging 
> various things; the ones I missed weren't omitted for any particular reason, 
> but I'll go ahead and update now that you've mentioned them.
> 
>> ================================================================================
>>  
>> usr/src/cmd/ai-webserver/common_profile.py
>> ================================================================================
>>  
>> 1.  The comments should be consistent:
>> 
>>  34 # profiles stored here internally
>>  35 INTERNAL_PROFILE_DIRECTORY = '/var/ai/profile'
>>  36 # MIME attachment name for manifest
>>  37 AI_MANIFEST_ATTACHMENT_NAME = 'manifest.xml'
>>  38 WEBSERVD_UID = 80 # user ID of webserver daemon
>>  39 WEBSERVD_GID = 80 # group ID of webserver daemon
>> 
>>    Please either more the comment for lines 38 & 39 to be above.
>> 
>> 2.  These values should not be hard coded:
>> 
>>  38 WEBSERVD_UID = 80 # user ID of webserver daemon
>>  39 WEBSERVD_GID = 80 # group ID of webserver daemon
>> 
>>    Instead the values should be retreived from the system.  This should be
>>    done like it is for the webserverd UID in publish_manifest.py:
>> 
>> 641         webserver_id = pwd.getpwnam('webservd').pw_uid
>> 642         # change to user/group webserver/root (uid/gid 0)
>> 643         os.chown(manifest_path, webserver_id, 0)
> 
> I agree with the above statements and will make the changes as they're 
> relatively straightforward, though note that those aren't actually from ISIM.
> 
>> ================================================================================
>>  
>> usr/src/cmd/ai-webserver/create_profile.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/ai-webserver/delete_manifest.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/ai-webserver/delete_profile.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/ai-webserver/export.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/ai-webserver/export_profile.py
>> ================================================================================
>>  
>> I was wondering how to do multiple values for options.  Cool.
>> 
>> 1.  Not sure about the usage statement showing ... for the -p options to
>>    imply that the -p can be repeated.
>> 
>>        "export\t\t-p|--profile <profile_name> ... -n|--service <svcname>"
>> 
>>    Should the options be grouped by using  '[' and ']'?  set_criteria.py 
>> usage
>>    statement style might work better:
>> 
>>  47     return _('set-criteria\t-m|--manifest <manifest/script name>\n'
>>  48              '\t\t-p|--profile <profile_name> ...\n'
>>  49              '\t\t-n|--service <svcname>\n'
>>  50              '\t\t-c|--criteria <criteria=value|range> ... |\n'
>>  51              '\t\t-C|--criteria-file <criteria.xml> |\n'
>>  52              '\t\t-a|--append-criteria <criteria=value|range> ... ')
> 
> Looks like we had a mismerge; I believe this file should actually be gone... 
> it became export.py.
> 
>> 
>> ================================================================================
>>  
>> usr/src/cmd/ai-webserver/publish_manifest.py
>> ================================================================================
>>  
>> 1.  Please either move line 169 down to line 174 or move lines 174 & 175 up
>>    to line 168.  Unless there is a good reason to have them separate.
> 
> 169 is actually what will raise the KeyError. I'll move 168 to before the 
> 'try' block though.
> 
>> 
>> 167     try:
>> 168         service = AIService(options.service_name)
>> 169         image_path = service.image.path
>> 170     except KeyError as err:
>> 171         raise SystemExit(_("Data for service %s is corrupt. Missing "
>> 172                            "property: %s\n") % (options.service_name, 
>> err))
>> 173
>> 174     service_dir = service.config_dir
>> 175     dbname = service.database_path
>> 
>> 2.  Are the following not within a try/except block because by these points 
>> we
>>    know the service_name is valid?
> 
> Hopefully the lack of try/except for these make more sense now given the 
> prior comment. Though actually, the try/except from above is of minimal value.
> 
>> 
>> 622     service = AIService(files.service_name)
>> 623     manifest_path = os.path.join(service.manifest_dir, 
>> files.manifest_name)
>> 
>> 1541     service = AIService(data.service_name)
>> 
>> 1578     service = AIService(data.service_name)
>> 
>> 
>> ================================================================================
>>  
>> usr/src/cmd/ai-webserver/set_criteria.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/ai-webserver/test/test_set_criteria.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/ai-webserver/validate_profile.py
>> ================================================================================
>>  
>> 1.  The following should probably be moved before the try/except block:
>> 
>> 140     if verbose:
>> 141         print >> sys.stderr, (_("Validating static profile %s...") %
>> 142                               profile_name)
> 
> Done
> 
>> 
>> 2.  Should the blank line be indented at line 177?
>> 
>> 175         if verbose:
>> 176             print raw_profile # dump unparsed profile for perusal
>> 177         print >> sys.stderr
>> 178         print >> sys.stderr, errmsg  # print error message
> 
> No, it's correct. I'll add a blank line of code to separate the print of 
> raw_profile to stdout from the messaging sent to stderr.
> 
>> 
>> ================================================================================
>>  
>> usr/src/cmd/auto-install/svc/manifest-locator
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/auto-install/version
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/Makefile
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/ai_smf_service.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/aimdns.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/aimdns_mod.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/aimdnsd.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/create_client.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/create_service.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/delete_client.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/delete_service.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/grub.py
>> ================================================================================
>>  
>> 0.  Should this be more generalized so that other components can use the
>>    grub menu generation?
> 
> Nope. That's what pybootmgmt will be doing.
> 
>> 
>> 1.  Should the following be present in the push or should it be a comment
>>    instead:
>> 
>> 143     print "\nXXX Dev note: install pxegrub in %s (per 6960345)\n\n" % \
>> 144           os.path.join(image_path, "boot/grub")
>> 
>>    Or perhaps a logging.debug() statement?
> 
> This will be removed prior to the push. Actually, I think I can remove it now.
> 
>> 
>> 2.  Should the default and timeout be retrieved from some OS environment
>>    variable?  Probably not but thought I would ask.
>> 
>> 149         menu.write("default=0\n")
>> 150         menu.write("timeout=30\n")
> 
> Possibly set as constants, or parameters to setup_grub, but it's a minor 
> issue, and I expect a lot of this to change when installadm moves to adopt 
> pybootmgmt later.
> 
>> 
>> 
>> ================================================================================
>>  
>> usr/src/cmd/installadm/image.py
>> ================================================================================
>>  
>> 1.  Should we simply raise an exception if the file exists so as to not cause
>>    an issue rather then removing the destination?
>> 
>> 173         dest = os.path.join(com.WEBSERVER_DOCROOT,
>> 174                             self.image_area.lstrip("/"))
>> 175         try:
>> 176             os.symlink(self.image_area, dest)
>> 177         except OSError as err:
>> 178             if err.errno == errno.EEXIST:
>> 179                 os.remove(dest)
>> 180                 os.symlink(self.image_area, dest)
>> 181             else:
>> 182                 raise
> 
> No, we should remove the old symlink. WEBSERVER_DOCROOT is a private 
> directory; if EEXIST comes up, it means a prior service 
> creation/deletion/modification failed. The best approach is to just fix it 
> up, so that's what's done.
> 
>> 
>>    Yes, I am paranoid?  What was that? /me looks around.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/installadm-common.sh
>> ================================================================================
>>  
>> Looks fine.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/installadm.py
>> ================================================================================
>>  
>> 1. Is it safe to assume that the service is an alias in this case?
>> 
>> 132     except InvalidServiceError as err:
>> 133         raise SystemExit(_("This alias may not be enabled until all "
>> 134                            " invalid manifests and profiles have been"
>> 135                            " corrected or removed."))
>> 
>>    Or can a service end up in this invalid state?
> 
> Changed alias to service to 'future proof' this.
> 
>> ================================================================================
>>  
>> usr/src/cmd/installadm/installadm_common.py
>> ================================================================================
>>  
>> 1.  Please use the 'as' syntax:
>> 
>> 795         except CalledProcessError, e:
>> 815         except CalledProcessError, e:
>> 852         except CalledProcessError, e:
> 
> Done.
> 
>> ================================================================================
>>  
>> usr/src/cmd/installadm/list.py
>> ================================================================================
>>  
>> 1.  s/of/off/
>> 
>> 234             # strip of the leading '01' and reinsert ':'s
> 
> Fixed.
> 
>> 
>> 2.  My assumption is that the err contains the service name for the 
>> following:
>> 
>> 337             try:
>> 338                 config.verify_key_properties(akey, serv)
>> 339             except config.ServiceCfgError as err:
>> 340                 print >> sys.stderr, err
>> 341                 continue
> 
> Correct.
> 
>> 
>> 3.  Should aliasofwidth be reset after line 365?
>> 
>> 363                     aliasofwidth = max(len(aliasof), aliasofwidth)
>> 364                 else:
>> 365                     info['aliasof'] = '-'
>> 
>>    Initially aliasofwidth is 0.  This it should now be 1, right?  Not a big
>>    deal because of line 387 takes care of this case.
> 
> Good point though. I went ahead and updated aliasofwidth to start at 1.
> 
>> 
>> 
>> ================================================================================
>>  
>> usr/src/cmd/installadm/properties.py (deleted)
>> ================================================================================
>>  
>> Makes sense as all functionality moved elsewhere.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/rename_service.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/service.py
>> ================================================================================
>>  
>> 1.  Comment does not seem to match the functionality of unmount_all:
>> 
>> 220             # If this installadm server doesn't understand this
>> 221             # service, do not mount it.
> 
> Updated.
> 
>> 
>> 2.  Something does not parse in my brain with the following comment:
>> 
>> 344         # _check_version should ONLY by AIService.create during service
>> 345         # creation. Bypassing the version check when the service has 
>> already
>> 346         # been created may lead to indeterminate results.
> 
> Does it make more sense phrased as:
> 
>        # _check_version should ONLY be used by AIService.create during service
>        # creation. Bypassing the version check when the service has already
>        # been created may lead to indeterminate results.
> 
>> 
>> 3.  Should there be a set of version constants or a dictionary for:
>> 
>> 265         if alias is not None and service.image.version < 3:
>> 271         compatibility_port = (service.image.version < 1)
>> 751         if newbasesvc.image.version < 3:
>> 854         if self.image.version < 2:
>> 977         if self.image.version < 3:
>> 
>>    like:
>> 
>> 353         elif version < self.EARLIEST_VERSION:
>> 355         elif version > self.LATEST_VERSION:
> 
> I suppose would be worth defining, in image.py, constants for the versions 
> like so:
> 
> PORT_VERSION = 1.0
> SC_PROFILE_VERSION = 2.0
> SYSCONF_VERSION = 3.0
> 
>> 
>> 4.  Is it time to fix the imports:
>> 
>> 1108         # XXX fix imports later
>> 1109         from osol_install.auto_install.publish_manifest import \
>> 1110                 insert_SQL, place_manifest, DataFiles
> 
> Not quite. We're planning on doing that just prior to push (we should have 
> mentioned that in the initial code review email).
> 
> Moving them now just creates noise in the webrevs.
> 
>> 
>> 
>> ================================================================================
>>  
>> usr/src/cmd/installadm/service_config.py
>> ================================================================================
>>  
>> 5.  Can is_enabled() and get_service_props() use _read_config_file()?
> 
> I believe so.
> 
>> ================================================================================
>>  
>> usr/src/cmd/installadm/set_service.py
>> ================================================================================
>>  
>> 1.  Seems like the usage statement could be rewritten to better handle the
>>    repeating option:
>> 
>>  49         'set-service\t-o|--option <prop>=<value> ... <svcname>\n'
> 
> The option actually isn't currently repeatable. I'll update the usage.
> 
>> 
>> ================================================================================
>>  
>> usr/src/cmd/installadm/setup-image.sh
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/setup-service.sh
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/setup-sparc.sh
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/setup-tftp-links.sh (deleted)
>> ================================================================================
>>  
>> Makes sense.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/svc-install-server
>> ================================================================================
>>  
>> 1.  Should install/debug be a variable to be consistent with line 61?
>> 
>>  61 SMF_PORT=$($SVCPROP -p $PORT $SMF_FMRI 2>/dev/null)
>>  62 export PYLOG_LEVEL=$($SVCPROP -p "install/debug" $SMF_FMRI 2>/dev/null)
>> 
> 
> Sure
> 
>> 2.  Should mount-all be called before the aimdnsd is started?
>> 
>> 144         $PYTHON $SVC_MODULE mount-all || exit $SMF_EXIT_ERR_FATAL
>> 
>>    This would match the refresh section of the service.
> 
> Done
> 
>> 
>> 3.  ECHO is not defined within the scope of the file.  Is there any reason
>>    why the builtin echo can not be used?
>> 
>> 205         ${ECHO} "Usage: $0 { start | stop | refresh }"
> 
> Dunno. I didn't write that, but I'll fix it.
> 
>> ================================================================================
>>  
>> usr/src/cmd/installadm/test/test_aimdns.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/test/test_create_service.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/installadm/test/test_rename_service.py
>> ================================================================================
>>  
>> 1.  Comment  does not seem to match function name:
>> 
>>  49     def test_parse_three_args(self):
>>  50         '''Ensure one args caught'''
>>  51         myargs = ["mysvc", "newsvc", "threesacrowd"]
>>  52         self.assertRaises(SystemExit, rename_service.parse_options, 
>> myargs)
> 
> Fixed.
> 
>> ================================================================================
>>  
>> usr/src/cmd/installadm/test/test_service_config.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/cmd/slim-install/svc/net-assembly
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/lib/install_common/__init__.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/lib/netif/Makefile
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/lib/netif/_netif.c
>> ================================================================================
>>  
>> 0.  The netif.so interface was intended to be short lived which Python proper
>>    incorporated the if_* interfaces.  Thus originally the getifaddrs() was 
>> not
>>    included within this library but in libaimdns.so.  So if netif.so is
>>    sticking around and getifaddrs() is added to it then please remove
>>    getifaddrs() from libaimdns.so.
> 
> I shuffled this around at the start of the project while we were getting our 
> heads wrapped around things, and the changes were unneeded. I'll be reverting 
> all the netif changes, as they don't appear to be needed by any of what we've 
> done with ISIM.
> 
>> 
>> 1.  Update the copyright:
>> 
>>  22  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
>> 
>> 2.  Should netif_methods be changed to _netif_methods to keep the naming
>>    consistent?
>> 
>> 344 static PyMethodDef netif_methods[] = {
>> 377         module = Py_InitModule("_netif", netif_methods);
>> ================================================================================
>>  
>> usr/src/lib/netif/_netif.h
>> ================================================================================
>>  
>> 1.  Does the copyright need to be updated?
>> 
>>  22  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
>> 
>> ================================================================================
>>  
>> usr/src/lib/netif/mapfile-vers
>> ================================================================================
>>  
>> 1.  Update the copyright:
>> 
>>  21 # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
>> 
>> ================================================================================
>>  
>> usr/src/lib/netif/netif.py
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/lib/netif/test/test_netif.py
>> ================================================================================
>>  
>> 1.  Update the copyright:
>> 
>>  22 # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
>> ================================================================================
>>  
>> usr/src/man/installadm.1m.txt
>> ================================================================================
>>  
> 
> I'll let Sue respond to man page questions.
> 
>> 1.  Comma needed before '...'
>> 
>>  22          -o|--option <prop>=<value>... <svcname>
>> 
>> 2.  Long options should be added for all subcommands.  Both in the subcommand
>>    summary list at the beginning and in the description section for each
>>    subcommand.
>> 
>> 3.  Comma needed before '...'
>> 
>>  54          -f <profile_file> ...
>>  56          [-c <criteria=value|range> ... |
>> 
>> 4.  Should aliasing be added to the list of tasks:
>> 
>> 122      The installadm utility can be used to accomplish the
>> 123      following tasks:
>> 124      - Set up installation services
>> 125      - Set up installation images
>> 126      - Set up or delete clients
>> 127      - Add or delete manifests
>> 128      - Specify or modify criteria for a manifest
>> 129      - Add or delete system configuration profiles
>> 130      - Validate profiles
>> 131      - Add or modify criteria for a manifest or profile
>> 132      - Export profiles
>> 133      - Enable or disable installation services
>> 134      - List installation services
>> 135      - List clients for an installation service
>> 136      - List manifests for an installation service
>> 137      - List profiles for an installation service
>> 
>> 5.  Probably should be dhcp_ip_count:
>> 
>> 219          -c|--ip-count <dhcp_ip_cont>
>> 
>> 
>> 6.  Service name should either be listed first or last to match the summary
>>    section and be consistent within the description section for the list
>>    command.
>> 
>> 321      installadm list [-n <svcname>] [-c] [-m] [-p]
>> 322
>> 323          Lists all enabled installation services on a server.
>> 324
>> 325          -c
>> 326              Lists the clients of the installation services on a
>> 327              local server.
>> 328
>> 329          -m
>> 330              Lists the manifests associated with the installation
>> 331              services on a local server.
>> 332
>> 333          -n <svcname>
>> 334              Lists information about the specific installation
>> 335              service on a local server. Or:
>> 336                - if the -c option is specified, lists the client
>> 337                  information associated with the installation
>> 338                  service.
>> 339                - if the -m option is specified, lists the
>> 340                  manifests associated with the installation
>> 341                  service.
>> 342                - if the -p option is specified, lists the
>> 343                  profiles associated with the installation
>> 344                  service.
>> 345
>> 346          -p
>> 347              Lists the profiles associated with the installation
>> 348              services on a local server.
>> 
>>    Other commands have similar issues within the man page for example
>>    add-manifest.  Alphabetical order for options doesn't seem correct
>>    but since that appears to be what is done here that would be ok too.
>> 
>> 7.  Required should be added for all commands that require a service name:
>> 
>> 500          -n <svcname>
>> 501               Specifies the name of the installation service this
>> 502               manifest or profile is associated with.
>> 
>>    This is inconsistent throughout the man page.
>> 
>> 7.  Are commas needed after ...
>> 
>> 563          -P <profile_file> ... |
>> 564          -n <svcname> -p <profile_name> ...
>> 
>> 
>> ================================================================================
>>  
>> usr/src/pkg/manifests/install-installadm.mf
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> usr/src/pkg/manifests/system-install-auto-install-auto-install-common.mf
>> ================================================================================
>>  
>> Looks good.
>> ================================================================================
>>  
>> On 05/ 2/11 03:36 PM, Sue Sohn wrote:
>>> We are requesting a code review of the ISIM project (minus the DHCP related
>>> modifications which will be sent out for review separately).
>>> 
>>> Webrev location:
>>> http://cr.opensolaris.org/~kemitche/webrev.ISIM.1/
>>> 
>>> Please provide your comments by May 16.
>>> 
>>> The code can be divided into the following sections:
>>> 1) ai-webserver subdir
>>> usr/src/cmd/ai-webserver/AI_database.py
>>> usr/src/cmd/ai-webserver/cgi_get_manifest.py
>>> usr/src/cmd/ai-webserver/common_profile.py
>>> usr/src/cmd/ai-webserver/create_profile.py
>>> usr/src/cmd/ai-webserver/delete_manifest.py
>>> usr/src/cmd/ai-webserver/delete_profile.py
>>> usr/src/cmd/ai-webserver/export.py
>>> usr/src/cmd/ai-webserver/export_profile.py
>>> usr/src/cmd/ai-webserver/publish_manifest.py
>>> usr/src/cmd/ai-webserver/set_criteria.py
>>> usr/src/cmd/ai-webserver/test/test_set_criteria.py
>>> usr/src/cmd/ai-webserver/validate_profile.py
>>> 
>>> 2) installadm subdir - commands plus service_config.py:
>>> usr/src/cmd/installadm/create_client.py
>>> usr/src/cmd/installadm/create_service.py
>>> usr/src/cmd/installadm/delete_client.py
>>> usr/src/cmd/installadm/delete_service.py
>>> usr/src/cmd/installadm/installadm.py
>>> usr/src/cmd/installadm/list.py
>>> usr/src/cmd/installadm/rename_service.py
>>> usr/src/cmd/installadm/service_config.py
>>> usr/src/cmd/installadm/set_service.py
>>> 
>>> 3) Rest of installadm subdir, including service.py and image.py
>>> usr/src/cmd/installadm/ai_smf_service.py
>>> usr/src/cmd/installadm/aimdns.py
>>> usr/src/cmd/installadm/aimdns_mod.py
>>> usr/src/cmd/installadm/aimdnsd.py
>>> usr/src/cmd/installadm/grub.py
>>> usr/src/cmd/installadm/image.py
>>> usr/src/cmd/installadm/installadm-common.sh
>>> usr/src/cmd/installadm/installadm_common.py
>>> usr/src/cmd/installadm/properties.py
>>> usr/src/cmd/installadm/service.py
>>> usr/src/cmd/installadm/setup-image.sh
>>> usr/src/cmd/installadm/setup-service.sh
>>> usr/src/cmd/installadm/setup-sparc.sh
>>> usr/src/cmd/installadm/setup-tftp-links.sh
>>> usr/src/cmd/installadm/svc-install-server
>>> 
>>> 4) Other (Makefiles, packaging changes, lib changes, man page)
>>> usr/src/cmd/auto-install/svc/manifest-locator
>>> usr/src/cmd/auto-install/version
>>> usr/src/cmd/installadm/Makefile
>>> usr/src/cmd/installadm/test/test_aimdns.py
>>> usr/src/cmd/installadm/test/test_create_service.py
>>> usr/src/cmd/installadm/test/test_rename_service.py
>>> usr/src/cmd/installadm/test/test_service_config.py
>>> usr/src/cmd/slim-install/svc/net-assembly
>>> usr/src/lib/install_common/__init__.py
>>> usr/src/lib/netif/Makefile
>>> usr/src/lib/netif/_netif.c
>>> usr/src/lib/netif/_netif.h
>>> usr/src/lib/netif/mapfile-vers
>>> usr/src/lib/netif/netif.py
>>> usr/src/lib/netif/test/test_netif.py
>>> usr/src/man/installadm.1m.txt
>>> usr/src/pkg/manifests/install-installadm.mf
>>> usr/src/pkg/manifests/system-install-auto-install-auto-install-common.mf
>>> 
>>> 
>>> Thanks,
>>> Sue, Keith, Jesse, and Harold
>>> _______________________________________________
>>> caiman-discuss mailing list
>>> [email protected]
>>> http://mail.opensolaris.org/mailman/listinfo/caiman-discuss
>> 
>> _______________________________________________
>> caiman-discuss mailing list
>> [email protected]
>> http://mail.opensolaris.org/mailman/listinfo/caiman-discuss
> 

_______________________________________________
caiman-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/caiman-discuss

Reply via email to