Esempio n. 1
0
    def deploy_ssh_pubkey(self, username, pubkey):
        """
        Deploy authorized_key
        """
        path, thumbprint, value = pubkey
        if path is None:
            raise OSUtilError("Publich key path is None")

        crytputil = CryptUtil(conf.get_openssl_cmd())

        path = self._norm_path(path)
        dir_path = os.path.dirname(path)
        fileutil.mkdir(dir_path, mode=0o700, owner=username)
        if value is not None:
            if not value.startswith("ssh-"):
                raise OSUtilError("Bad public key: {0}".format(value))
            fileutil.write_file(path, value)
        elif thumbprint is not None:
            lib_dir = conf.get_lib_dir()
            crt_path = os.path.join(lib_dir, thumbprint + '.crt')
            if not os.path.isfile(crt_path):
                raise OSUtilError("Can't find {0}.crt".format(thumbprint))
            pub_path = os.path.join(lib_dir, thumbprint + '.pub')
            pub = crytputil.get_pubkey_from_crt(crt_path)
            fileutil.write_file(pub_path, pub)
            self.set_selinux_context(pub_path, 
                                     'unconfined_u:object_r:ssh_home_t:s0')
            self.openssl_to_openssh(pub_path, path)
            fileutil.chmod(pub_path, 0o600)
        else:
            raise OSUtilError("SSH public key Fingerprint and Value are None")

        self.set_selinux_context(path, 'unconfined_u:object_r:ssh_home_t:s0')
        fileutil.chowner(path, username)
        fileutil.chmod(path, 0o644)
Esempio n. 2
0
    def copy_ovf_env(self):
        """
        Copy ovf env file from dvd to hard disk.
        Remove password before save it to the disk
        """
        dvd_mount_point = conf.get_dvd_mount_point()
        ovf_file_path_on_dvd = os.path.join(dvd_mount_point, OVF_FILE_NAME)
        tag_file_path_on_dvd = os.path.join(dvd_mount_point, TAG_FILE_NAME)
        try:
            self.distro.osutil.mount_dvd()
            ovfxml = fileutil.read_file(ovf_file_path_on_dvd, remove_bom=True)
            ovfenv = OvfEnv(ovfxml)
            ovfxml = re.sub("<UserPassword>.*?<", "<UserPassword>*<", ovfxml)
            ovf_file_path = os.path.join(conf.get_lib_dir(), OVF_FILE_NAME)
            fileutil.write_file(ovf_file_path, ovfxml)
            
            if os.path.isfile(tag_file_path_on_dvd):
                logger.info("Found {0} in provisioning ISO", TAG_FILE_NAME)
                tag_file_path = os.path.join(conf.get_lib_dir(), TAG_FILE_NAME)
                shutil.copyfile(tag_file_path_on_dvd, tag_file_path) 

        except (OSUtilError, IOError) as e:
            raise ProtocolError(ustr(e))

        try:
            self.distro.osutil.umount_dvd()
            self.distro.osutil.eject_dvd()
        except OSUtilError as e:
            logger.warn(ustr(e))

        return ovfenv
Esempio n. 3
0
    def run(self):
        #If provision is enabled, run default provision handler
        if conf.get_provision_enabled():
            super(UbuntuProvisionHandler, self).run()
            return

        logger.info("run Ubuntu provision handler")
        provisioned = os.path.join(conf.get_lib_dir(), "provisioned")
        if os.path.isfile(provisioned):
            return

        logger.info("Waiting cloud-init to copy ovf-env.xml.")
        self.wait_for_ovfenv()

        protocol = self.distro.protocol_util.detect_protocol()
        self.report_not_ready("Provisioning", "Starting")
        logger.info("Sleep 15 seconds to prevent throttling")
        time.sleep(15) #Sleep to prevent throttling
        try:
            logger.info("Wait for ssh host key to be generated.")
            thumbprint = self.wait_for_ssh_host_key()
            fileutil.write_file(provisioned, "")
            logger.info("Finished provisioning")
           
        except ProvisionError as e:
            logger.error("Provision failed: {0}", e)
            self.report_not_ready("ProvisioningFailed", ustr(e))
            self.report_event(ustr(e))
            return
            
        self.report_ready(thumbprint)
        self.report_event("Provision succeed", is_success=True)
    def copy_ovf_env(self):
        """
        Copy ovf env file from dvd to hard disk.
        Remove password before save it to the disk
        """
        dvd_mount_point = conf.get_dvd_mount_point()
        ovf_file_path_on_dvd = os.path.join(dvd_mount_point, OVF_FILE_NAME)
        tag_file_path_on_dvd = os.path.join(dvd_mount_point, TAG_FILE_NAME)
        try:
            self.distro.osutil.mount_dvd()
            ovfxml = fileutil.read_file(ovf_file_path_on_dvd, remove_bom=True)
            ovfenv = OvfEnv(ovfxml)
            ovfxml = re.sub("<UserPassword>.*?<", "<UserPassword>*<", ovfxml)
            ovf_file_path = os.path.join(conf.get_lib_dir(), OVF_FILE_NAME)
            fileutil.write_file(ovf_file_path, ovfxml)

            if os.path.isfile(tag_file_path_on_dvd):
                logger.info("Found {0} in provisioning ISO", TAG_FILE_NAME)
                tag_file_path = os.path.join(conf.get_lib_dir(), TAG_FILE_NAME)
                shutil.copyfile(tag_file_path_on_dvd, tag_file_path)

        except (OSUtilError, IOError) as e:
            raise ProtocolError(ustr(e))

        try:
            self.distro.osutil.umount_dvd()
            self.distro.osutil.eject_dvd()
        except OSUtilError as e:
            logger.warn(ustr(e))

        return ovfenv
Esempio n. 5
0
    def deploy_ssh_pubkey(self, username, pubkey):
        """
        Deploy authorized_key
        """
        path, thumbprint, value = pubkey
        if path is None:
            raise OSUtilError("Publich key path is None")

        crytputil = CryptUtil(conf.get_openssl_cmd())

        path = self._norm_path(path)
        dir_path = os.path.dirname(path)
        fileutil.mkdir(dir_path, mode=0o700, owner=username)
        if value is not None:
            if not value.startswith("ssh-"):
                raise OSUtilError("Bad public key: {0}".format(value))
            fileutil.write_file(path, value)
        elif thumbprint is not None:
            lib_dir = conf.get_lib_dir()
            crt_path = os.path.join(lib_dir, thumbprint + '.crt')
            if not os.path.isfile(crt_path):
                raise OSUtilError("Can't find {0}.crt".format(thumbprint))
            pub_path = os.path.join(lib_dir, thumbprint + '.pub')
            pub = crytputil.get_pubkey_from_crt(crt_path)
            fileutil.write_file(pub_path, pub)
            self.set_selinux_context(pub_path,
                                     'unconfined_u:object_r:ssh_home_t:s0')
            self.openssl_to_openssh(pub_path, path)
            fileutil.chmod(pub_path, 0o600)
        else:
            raise OSUtilError("SSH public key Fingerprint and Value are None")

        self.set_selinux_context(path, 'unconfined_u:object_r:ssh_home_t:s0')
        fileutil.chowner(path, username)
        fileutil.chmod(path, 0o644)
Esempio n. 6
0
 def openssl_to_openssh(self, input_file, output_file):
     pubkey = fileutil.read_file(input_file)
     try:
         cryptutil = CryptUtil(conf.get_openssl_cmd())
         ssh_rsa_pubkey = cryptutil.asn1_to_ssh(pubkey)
     except CryptError as e:
         raise OSUtilError(ustr(e))
     fileutil.write_file(output_file, ssh_rsa_pubkey)
Esempio n. 7
0
 def openssl_to_openssh(self, input_file, output_file):
     pubkey = fileutil.read_file(input_file)
     try:
         cryptutil = CryptUtil(conf.get_openssl_cmd())
         ssh_rsa_pubkey = cryptutil.asn1_to_ssh(pubkey)
     except CryptError as e:
         raise OSUtilError(ustr(e))
     fileutil.write_file(output_file, ssh_rsa_pubkey)
Esempio n. 8
0
    def test_rw_utf8_file(self):
        test_file=os.path.join(self.tmp_dir, 'test_file')
        content = u"\u6211"
        fileutil.write_file(test_file, content, encoding="utf-8")

        content_read = fileutil.read_file(test_file)
        self.assertEquals(content, content_read)
        os.remove(test_file)
Esempio n. 9
0
    def test_read_write_file(self):
        test_file=os.path.join(self.tmp_dir, 'test_file')
        content = ustr(uuid.uuid4())
        fileutil.write_file(test_file, content)

        content_read = fileutil.read_file(test_file)
        self.assertEquals(content, content_read)
        os.remove(test_file)
Esempio n. 10
0
 def set_block_device_timeout(self, dev, timeout):
     if dev is not None and timeout is not None:
         file_path = "/sys/block/{0}/device/timeout".format(dev)
         content = fileutil.read_file(file_path)
         original = content.splitlines()[0].rstrip()
         if original != timeout:
             fileutil.write_file(file_path, timeout)
             logger.info("Set block dev timeout: {0} with timeout: {1}",
                         dev, timeout)
Esempio n. 11
0
 def conf_sshd(self, disable_password):
     option = "no" if disable_password else "yes"
     conf_file_path = conf.get_sshd_conf_file_path()
     conf_file = fileutil.read_file(conf_file_path).split("\n")
     textutil.set_ssh_config(conf_file, "PasswordAuthentication", option)
     textutil.set_ssh_config(conf_file, "ChallengeResponseAuthentication",
                             option)
     fileutil.write_file(conf_file_path, "\n".join(conf_file))
     logger.info("Disabled SSH password-based authentication methods.")
Esempio n. 12
0
 def conf_sshd(self, disable_password):
     option = "no" if disable_password else "yes"
     conf_file_path = conf.get_sshd_conf_file_path()
     conf_file = fileutil.read_file(conf_file_path).split("\n")
     textutil.set_ssh_config(conf_file, "PasswordAuthentication", option)
     textutil.set_ssh_config(conf_file, "ChallengeResponseAuthentication", 
                             option)
     fileutil.write_file(conf_file_path, "\n".join(conf_file))
     logger.info("Disabled SSH password-based authentication methods.")
Esempio n. 13
0
 def set_block_device_timeout(self, dev, timeout):
     if dev is not None and timeout is not None:
         file_path = "/sys/block/{0}/device/timeout".format(dev)
         content = fileutil.read_file(file_path)
         original = content.splitlines()[0].rstrip()
         if original != timeout:
             fileutil.write_file(file_path, timeout)
             logger.info("Set block dev timeout: {0} with timeout: {1}",
                         dev, timeout)
Esempio n. 14
0
 def del_root_password(self):
     try:
         passwd_file_path = conf.get_passwd_file_path()
         passwd_content = fileutil.read_file(passwd_file_path)
         passwd = passwd_content.split('\n')
         new_passwd = [x for x in passwd if not x.startswith("root:")]
         new_passwd.insert(0, "root:*LOCK*:14600::::::")
         fileutil.write_file(passwd_file_path, "\n".join(new_passwd))
     except IOError as e:
         raise OSUtilError("Failed to delete root password:{0}".format(e))
Esempio n. 15
0
 def del_root_password(self):
     try:
         passwd_file_path = conf.get_passwd_file_path()
         passwd_content = fileutil.read_file(passwd_file_path)
         passwd = passwd_content.split('\n')
         new_passwd = [x for x in passwd if not x.startswith("root:")]
         new_passwd.insert(0, "root:*LOCK*:14600::::::")
         fileutil.write_file(passwd_file_path, "\n".join(new_passwd))
     except IOError as e:
         raise OSUtilError("Failed to delete root password:{0}".format(e))
Esempio n. 16
0
    def download(self):
        self.logger.info("Download extension package")
        self.set_operation(WALAEventOperation.Download)
        if self.pkg is None:
            raise ExtensionError("No package uri found")

        package = None
        for uri in self.pkg.uris:
            try:
                package = self.protocol.download_ext_handler_pkg(uri.uri)
            except ProtocolError as e:
                logger.warn("Failed download extension: {0}", e)

        if package is None:
            raise ExtensionError("Failed to download extension")

        self.logger.info("Unpack extension package")
        pkg_file = os.path.join(conf.get_lib_dir(),
                                os.path.basename(uri.uri) + ".zip")
        try:
            fileutil.write_file(pkg_file, bytearray(package), asbin=True)
            zipfile.ZipFile(pkg_file).extractall(self.get_base_dir())
        except IOError as e:
            raise ExtensionError(u"Failed to write and unzip plugin", e)

        chmod = "find {0} -type f | xargs chmod u+x".format(
            self.get_base_dir())
        shellutil.run(chmod)
        self.report_event(message="Download succeeded")

        self.logger.info("Initialize extension directory")
        #Save HandlerManifest.json
        man_file = fileutil.search_file(self.get_base_dir(),
                                        'HandlerManifest.json')

        if man_file is None:
            raise ExtensionError("HandlerManifest.json not found")

        try:
            man = fileutil.read_file(man_file, remove_bom=True)
            fileutil.write_file(self.get_manifest_file(), man)
        except IOError as e:
            raise ExtensionError(u"Failed to save HandlerManifest.json", e)

        #Create status and config dir
        try:
            status_dir = self.get_status_dir()
            fileutil.mkdir(status_dir, mode=0o700)
            conf_dir = self.get_conf_dir()
            fileutil.mkdir(conf_dir, mode=0o700)
        except IOError as e:
            raise ExtensionError(u"Failed to create status or config dir", e)

        #Save HandlerEnvironment.json
        self.create_handler_env()
Esempio n. 17
0
    def download(self):
        self.logger.info("Download extension package")
        self.set_operation(WALAEventOperation.Download)
        if self.pkg is None:
            raise ExtensionError("No package uri found")
        
        package = None
        for uri in self.pkg.uris:
            try:
                package = self.protocol.download_ext_handler_pkg(uri.uri)
            except ProtocolError as e: 
                logger.warn("Failed download extension: {0}", e)
        
        if package is None:
            raise ExtensionError("Failed to download extension")

        self.logger.info("Unpack extension package")
        pkg_file = os.path.join(conf.get_lib_dir(),
                                os.path.basename(uri.uri) + ".zip")
        try:
            fileutil.write_file(pkg_file, bytearray(package), asbin=True)
            zipfile.ZipFile(pkg_file).extractall(self.get_base_dir())
        except IOError as e:
            raise ExtensionError(u"Failed to write and unzip plugin", e)

        chmod = "find {0} -type f | xargs chmod u+x".format(self.get_base_dir())
        shellutil.run(chmod)
        self.report_event(message="Download succeeded")

        self.logger.info("Initialize extension directory")
        #Save HandlerManifest.json
        man_file = fileutil.search_file(self.get_base_dir(),
                                        'HandlerManifest.json')

        if man_file is None:
            raise ExtensionError("HandlerManifest.json not found")
        
        try:
            man = fileutil.read_file(man_file, remove_bom=True)
            fileutil.write_file(self.get_manifest_file(), man)
        except IOError as e:
            raise ExtensionError(u"Failed to save HandlerManifest.json", e)

        #Create status and config dir
        try:
            status_dir = self.get_status_dir()
            fileutil.mkdir(status_dir, mode=0o700)
            conf_dir = self.get_conf_dir()
            fileutil.mkdir(conf_dir, mode=0o700)
        except IOError as e:
            raise ExtensionError(u"Failed to create status or config dir", e)

        #Save HandlerEnvironment.json
        self.create_handler_env()
Esempio n. 18
0
    def check_pid(self):
        """Check whether daemon is already running"""
        pid = None
        pid_file = conf.get_agent_pid_file_path()
        if os.path.isfile(pid_file):
            pid = fileutil.read_file(pid_file)

        if pid is not None and os.path.isdir(os.path.join("/proc", pid)):
            logger.info("Daemon is already running: {0}", pid)
            sys.exit(0)
            
        fileutil.write_file(pid_file, ustr(os.getpid()))
Esempio n. 19
0
 def set_handler_state(self, handler_state):
     state_dir = self.get_handler_state_dir()
     if not os.path.exists(state_dir):
         try:
             fileutil.mkdir(state_dir, 0o700)
         except IOError as e:
             self.logger.error("Failed to create state dir: {0}", e)
     
     try:
         state_file = os.path.join(state_dir, "state")
         fileutil.write_file(state_file, handler_state)
     except IOError as e:
         self.logger.error("Failed to set state: {0}", e)
Esempio n. 20
0
    def set_handler_state(self, handler_state):
        state_dir = self.get_handler_state_dir()
        if not os.path.exists(state_dir):
            try:
                fileutil.mkdir(state_dir, 0o700)
            except IOError as e:
                self.logger.error("Failed to create state dir: {0}", e)

        try:
            state_file = os.path.join(state_dir, "state")
            fileutil.write_file(state_file, handler_state)
        except IOError as e:
            self.logger.error("Failed to set state: {0}", e)
Esempio n. 21
0
 def del_account(self, username):
     if self.is_sys_user(username):
         logger.error("{0} is a system user. Will not delete it.", username)
     shellutil.run("> /var/run/utmp")
     shellutil.run("userdel -f -r " + username)
     #Remove user from suders
     if os.path.isfile("/etc/suders.d/waagent"):
         try:
             content = fileutil.read_file("/etc/sudoers.d/waagent")
             sudoers = content.split("\n")
             sudoers = [x for x in sudoers if username not in x]
             fileutil.write_file("/etc/sudoers.d/waagent",
                                 "\n".join(sudoers))
         except IOError as e:
             raise OSUtilError("Failed to remove sudoer: {0}".format(e))
Esempio n. 22
0
 def del_account(self, username):
     if self.is_sys_user(username):
         logger.error("{0} is a system user. Will not delete it.", username)
     shellutil.run("> /var/run/utmp")
     shellutil.run("userdel -f -r " + username)
     #Remove user from suders
     if os.path.isfile("/etc/suders.d/waagent"):
         try:
             content = fileutil.read_file("/etc/sudoers.d/waagent")
             sudoers = content.split("\n")
             sudoers = [x for x in sudoers if username not in x]
             fileutil.write_file("/etc/sudoers.d/waagent",
                                      "\n".join(sudoers))
         except IOError as e:
             raise OSUtilError("Failed to remove sudoer: {0}".format(e))
Esempio n. 23
0
    def test_provision(self, distro_name, distro_version, distro_full_name):
        distro = get_distro(distro_name, distro_version, distro_full_name)
        distro.osutil = MagicMock()
        distro.osutil.decode_customdata = Mock(return_value="")

        distro.protocol_util.detect_protocol_by_file = MagicMock()
        distro.protocol_util.get_protocol = MagicMock()
        conf.get_dvd_mount_point = Mock(return_value=self.tmp_dir)

        ovfenv_file = os.path.join(self.tmp_dir, OVF_FILE_NAME)
        ovfenv_data = load_data("ovf-env.xml")
        fileutil.write_file(ovfenv_file, ovfenv_data)
         
        handler = distro.provision_handler
        handler.run()
Esempio n. 24
0
 def create_handler_env(self):
     env = [{
         "name": self.ext_handler.name,
         "version": HANDLER_ENVIRONMENT_VERSION,
         "handlerEnvironment": {
             "logFolder": self.get_log_dir(),
             "configFolder": self.get_conf_dir(),
             "statusFolder": self.get_status_dir(),
             "heartbeatFile": self.get_heartbeat_file()
         }
     }]
     try:
         fileutil.write_file(self.get_env_file(), json.dumps(env))
     except IOError as e:
         raise ExtensionError(u"Failed to save handler environment", e)
Esempio n. 25
0
 def create_handler_env(self):
     env = [{
         "name": self.ext_handler.name,
         "version" : HANDLER_ENVIRONMENT_VERSION,
         "handlerEnvironment" : {
             "logFolder" : self.get_log_dir(),
             "configFolder" : self.get_conf_dir(),
             "statusFolder" : self.get_status_dir(),
             "heartbeatFile" : self.get_heartbeat_file()
         }
     }]
     try:
         fileutil.write_file(self.get_env_file(), json.dumps(env))
     except IOError as e:
         raise ExtensionError(u"Failed to save handler environment", e)
    def test_provision(self, distro_name, distro_version, distro_full_name):
        distro = get_distro(distro_name, distro_version, distro_full_name)
        distro.osutil = MagicMock()
        distro.osutil.decode_customdata = Mock(return_value="")

        distro.protocol_util.detect_protocol_by_file = MagicMock()
        distro.protocol_util.get_protocol = MagicMock()
        conf.get_dvd_mount_point = Mock(return_value=self.tmp_dir)

        ovfenv_file = os.path.join(self.tmp_dir, OVF_FILE_NAME)
        ovfenv_data = load_data("ovf-env.xml")
        fileutil.write_file(ovfenv_file, ovfenv_data)

        handler = distro.provision_handler
        handler.run()
Esempio n. 27
0
    def save_customdata(self, ovfenv):
        customdata = ovfenv.customdata
        if customdata is None:
            return

        logger.info("Save custom data")
        lib_dir = conf.get_lib_dir()
        if conf.get_decode_customdata():
            customdata= self.distro.osutil.decode_customdata(customdata)
        customdata_file = os.path.join(lib_dir, CUSTOM_DATA_FILE)
        fileutil.write_file(customdata_file, customdata)
        
        if conf.get_execute_customdata():
            logger.info("Execute custom data")
            os.chmod(customdata_file, 0o700)
            shellutil.run(customdata_file)
Esempio n. 28
0
 def activate_resource_disk(self):
     logger.info("Activate resource disk")
     try:
         mount_point = conf.get_resourcedisk_mountpoint()
         fs = conf.get_resourcedisk_filesystem()
         mount_point = self.mount_resource_disk(mount_point, fs)
         warning_file = os.path.join(mount_point, DATALOSS_WARNING_FILE_NAME)
         try:
             fileutil.write_file(warning_file, DATA_LOSS_WARNING)
         except IOError as e:
             logger.warn("Failed to write data loss warnning:{0}", e)
         return mount_point
     except ResourceDiskError as e:
         logger.error("Failed to mount resource disk {0}", e)
         add_event(name="WALA", is_success=False, message=ustr(e),
                           op=WALAEventOperation.ActivateResourceDisk)
Esempio n. 29
0
 def activate_resource_disk(self):
     logger.info("Activate resource disk")
     try:
         mount_point = conf.get_resourcedisk_mountpoint()
         fs = conf.get_resourcedisk_filesystem()
         mount_point = self.mount_resource_disk(mount_point, fs)
         warning_file = os.path.join(mount_point,
                                     DATALOSS_WARNING_FILE_NAME)
         try:
             fileutil.write_file(warning_file, DATA_LOSS_WARNING)
         except IOError as e:
             logger.warn("Failed to write data loss warnning:{0}", e)
         return mount_point
     except ResourceDiskError as e:
         logger.error("Failed to mount resource disk {0}", e)
         add_event(name="WALA",
                   is_success=False,
                   message=ustr(e),
                   op=WALAEventOperation.ActivateResourceDisk)
Esempio n. 30
0
    def set_handler_status(self, status="NotReady", message="", code=0):
        state_dir = self.get_handler_state_dir()
        if not os.path.exists(state_dir):
            try:
                fileutil.mkdir(state_dir, 0o700)
            except IOError as e:
                self.logger.error("Failed to create state dir: {0}", e)

        handler_status = ExtHandlerStatus()
        handler_status.name = self.ext_handler.name
        handler_status.version = self.ext_handler.properties.version
        handler_status.message = message
        handler_status.code = code
        handler_status.status = status
        status_file = os.path.join(state_dir, "status")

        try:
            fileutil.write_file(status_file,
                                json.dumps(get_properties(handler_status)))
        except (IOError, ValueError, ProtocolError) as e:
            self.logger.error("Failed to save handler status: {0}", e)
Esempio n. 31
0
 def deploy_ssh_keypair(self, username, keypair):
     """
     Deploy id_rsa and id_rsa.pub
     """
     path, thumbprint = keypair
     path = self._norm_path(path)
     dir_path = os.path.dirname(path)
     fileutil.mkdir(dir_path, mode=0o700, owner=username)
     lib_dir = conf.get_lib_dir()
     prv_path = os.path.join(lib_dir, thumbprint + '.prv')
     if not os.path.isfile(prv_path):
         raise OSUtilError("Can't find {0}.prv".format(thumbprint))
     shutil.copyfile(prv_path, path)
     pub_path = path + '.pub'
     crytputil = CryptUtil(conf.get_openssl_cmd())
     pub = crytputil.get_pubkey_from_prv(prv_path)
     fileutil.write_file(pub_path, pub)
     self.set_selinux_context(pub_path, 'unconfined_u:object_r:ssh_home_t:s0')
     self.set_selinux_context(path, 'unconfined_u:object_r:ssh_home_t:s0')
     os.chmod(path, 0o644)
     os.chmod(pub_path, 0o600)
Esempio n. 32
0
 def deploy_ssh_keypair(self, username, keypair):
     """
     Deploy id_rsa and id_rsa.pub
     """
     path, thumbprint = keypair
     path = self._norm_path(path)
     dir_path = os.path.dirname(path)
     fileutil.mkdir(dir_path, mode=0o700, owner=username)
     lib_dir = conf.get_lib_dir()
     prv_path = os.path.join(lib_dir, thumbprint + '.prv')
     if not os.path.isfile(prv_path):
         raise OSUtilError("Can't find {0}.prv".format(thumbprint))
     shutil.copyfile(prv_path, path)
     pub_path = path + '.pub'
     crytputil = CryptUtil(conf.get_openssl_cmd())
     pub = crytputil.get_pubkey_from_prv(prv_path)
     fileutil.write_file(pub_path, pub)
     self.set_selinux_context(pub_path,
                              'unconfined_u:object_r:ssh_home_t:s0')
     self.set_selinux_context(path, 'unconfined_u:object_r:ssh_home_t:s0')
     os.chmod(path, 0o644)
     os.chmod(pub_path, 0o600)
Esempio n. 33
0
    def set_handler_status(self, status="NotReady", message="", 
                           code=0):
        state_dir = self.get_handler_state_dir()
        if not os.path.exists(state_dir):
            try:
                fileutil.mkdir(state_dir, 0o700)
            except IOError as e:
                self.logger.error("Failed to create state dir: {0}", e)
        
        handler_status = ExtHandlerStatus()
        handler_status.name = self.ext_handler.name
        handler_status.version = self.ext_handler.properties.version
        handler_status.message = message
        handler_status.code = code
        handler_status.status = status
        status_file = os.path.join(state_dir, "status")

        try:
            fileutil.write_file(status_file, 
                                json.dumps(get_properties(handler_status)))
        except (IOError, ValueError, ProtocolError) as e:
            self.logger.error("Failed to save handler status: {0}", e)
Esempio n. 34
0
    def run(self):
        #If provision is not enabled, return
        if not conf.get_provision_enabled():
            logger.info("Provisioning is disabled. Skip.")
            return 

        provisioned = os.path.join(conf.get_lib_dir(), "provisioned")
        if os.path.isfile(provisioned):
            return

        logger.info("Run provision handler.")
        logger.info("Copy ovf-env.xml.")
        try:
            ovfenv = self.distro.protocol_util.copy_ovf_env()
        except ProtocolError as e:
            self.report_event("Failed to copy ovf-env.xml: {0}".format(e))
            return
    
        self.distro.protocol_util.detect_protocol_by_file()

        self.report_not_ready("Provisioning", "Starting")
        
        try:
            logger.info("Start provisioning")
            self.provision(ovfenv)
            fileutil.write_file(provisioned, "")
            thumbprint = self.reg_ssh_host_key()
            logger.info("Finished provisioning")
        except ProvisionError as e:
            logger.error("Provision failed: {0}", e)
            self.report_not_ready("ProvisioningFailed", ustr(e))
            self.report_event(ustr(e))
            return

        self.report_ready(thumbprint)
        self.report_event("Provision succeed", is_success=True)
Esempio n. 35
0
 def set_ssh_client_alive_interval(self):
     conf_file_path = conf.get_sshd_conf_file_path()
     conf_file = fileutil.read_file(conf_file_path).split("\n")
     textutil.set_ssh_config(conf_file, "ClientAliveInterval", "180")
     fileutil.write_file(conf_file_path, '\n'.join(conf_file))
     logger.info("Configured SSH client probing to keep connections alive.")
Esempio n. 36
0
 def test_remove_bom(self):
     test_file=os.path.join(self.tmp_dir, 'test_file')
     data = b'\xef\xbb\xbfhehe'
     fileutil.write_file(test_file, data, asbin=True)
     data = fileutil.read_file(test_file, remove_bom=True)
     self.assertNotEquals(0xbb, ord(data[0]))
Esempio n. 37
0
 def set_ssh_client_alive_interval(self):
     conf_file_path = conf.get_sshd_conf_file_path()
     conf_file = fileutil.read_file(conf_file_path).split("\n")
     textutil.set_ssh_config(conf_file, "ClientAliveInterval", "180")
     fileutil.write_file(conf_file_path, '\n'.join(conf_file))
     logger.info("Configured SSH client probing to keep connections alive.")
Esempio n. 38
0
 def update_settings_file(self, settings_file, settings):
     settings_file = os.path.join(self.get_conf_dir(), settings_file)
     try:
         fileutil.write_file(settings_file, settings)
     except IOError as e:
         raise ExtensionError(u"Failed to update settings file", e)
Esempio n. 39
0
 def _set_wireserver_endpoint(self, endpoint):
     try:
         file_path = os.path.join(conf.get_lib_dir(), ENDPOINT_FILE_NAME)
         fileutil.write_file(file_path, endpoint)
     except IOError as e:
         raise OSUtilError(ustr(e))
Esempio n. 40
0
 def save_cache(self, local_file, data):
     try:
         fileutil.write_file(local_file, data)
     except IOError as e:
         raise ProtocolError("Failed to write cache: {0}".format(e))
Esempio n. 41
0
 def set_hostname(self, hostname):
     fileutil.write_file('/etc/HOSTNAME', hostname)
     shellutil.run("hostname {0}".format(hostname), chk_err=False)
Esempio n. 42
0
 def update_settings_file(self, settings_file, settings):
     settings_file = os.path.join(self.get_conf_dir(), settings_file)
     try:
         fileutil.write_file(settings_file, settings)
     except IOError as e:
         raise ExtensionError(u"Failed to update settings file", e)
Esempio n. 43
0
 def _set_wireserver_endpoint(self, endpoint):
     try:
         file_path = os.path.join(conf.get_lib_dir(), ENDPOINT_FILE_NAME)
         fileutil.write_file(file_path, endpoint)
     except IOError as e:
         raise OSUtilError(ustr(e))