def handle_instance_userdata(): ''' Since this is too long, store it in a file. ''' user_data = get_instance_userdata() if user_data: file('user-data.txt', 'w').write(user_data) logging.info('User data script was written to user-data.txt')
def test_user_data(self): self.set_normal_response(['foo']) userdata = get_instance_userdata() self.assertEqual('foo', userdata) boto.utils.retry_url.assert_called_with( 'http://169.254.169.254/latest/user-data', retry_on_404=False)
def get_instance_userdata(api_version, metadata_address): # Note: boto.utils.get_instance_metadata returns '' for empty string # so the change from non-true to '' is not specifically necessary, but # this way cloud-init will get consistent behavior even if boto changed # in the future to return a None on "no user-data provided". ud = boto_utils.get_instance_userdata(api_version, None, metadata_address) if not ud: ud = '' return ud
def get_data(self): try: if not self.wait_for_metadata_service(): return False start = time.time() log.info("Calling into metadata service using boto at: %s", self.metadata_address) self.userdata_raw = boto_utils.get_instance_userdata(self.api_ver, None, self.metadata_address) self.metadata = boto_utils.get_instance_metadata(self.api_ver, self.metadata_address) log.debug("Crawl of metadata service took %s seconds" % (time.time() - start)) log.debug("Received raw userdata: %s", self.userdata_raw) log.debug("Received metadata: %s", self.metadata) return True except Exception: return False
def write_metadata(self): fp = open(os.path.expanduser(BotoConfigPath), 'w') fp.write('[Instance]\n') inst_data = get_instance_metadata() for key in inst_data: fp.write('%s = %s\n' % (key, inst_data[key])) user_data = get_instance_userdata() fp.write('\n%s\n' % user_data) fp.write('[Pyami]\n') fp.write('working_dir = %s\n' % self.working_dir) fp.close() # This file has the AWS credentials, should we lock it down? # os.chmod(BotoConfigPath, stat.S_IREAD | stat.S_IWRITE) # now that we have written the file, read it into a pyami Config object boto.config = Config() boto.init_logging()
def get_data(self): seedret = {} if util.read_optional_seed(seedret, base=self.seeddir + "/"): self.userdata_raw = seedret["user-data"] self.metadata = seedret["meta-data"] log.debug("using seeded ec2 data in %s" % self.seeddir) return True try: if not self.wait_for_metadata_service(): return False start = time.time() self.userdata_raw = boto_utils.get_instance_userdata(self.api_ver, None, self.metadata_address) self.metadata = boto_utils.get_instance_metadata(self.api_ver, self.metadata_address) log.debug("crawl of metadata service took %ds" % (time.time() - start)) return True except Exception as e: print e return False
def get_data(self): seedret = {} if util.read_optional_seed(seedret, base=self.seeddir + "/"): self.userdata_raw = seedret['user-data'] self.metadata = seedret['meta-data'] log.debug("using seeded cs data in %s" % self.seeddir) return True try: start = time.time() self.userdata_raw = boto_utils.get_instance_userdata(self.api_ver, None, self.metadata_address) self.metadata = boto_utils.get_instance_metadata(self.api_ver, self.metadata_address) log.debug("crawl of metadata service took %ds" % (time.time() - start)) return True except Exception as e: log.exception(e) return False
def get_data(self): seedret = {} if util.read_optional_seed(seedret, base=self.seeddir + "/"): self.userdata_raw = seedret['user-data'] self.metadata = seedret['meta-data'] log.debug("using seeded cs data in %s" % self.seeddir) return True try: start = time.time() self.userdata_raw = boto_utils.get_instance_userdata( self.api_ver, None, self.metadata_address) self.metadata = boto_utils.get_instance_metadata( self.api_ver, self.metadata_address) log.debug("crawl of metadata service took %ds" % (time.time() - start)) return True except Exception as e: log.exception(e) return False
def get_dimension_ECSCluster(self): """ Get the name of the ECS Cluster this instance is part of. :return: CloudWatch dimension named ECSCluster """ dimension = {} try: instance_user_data = json.loads(utils.get_instance_userdata()) ecs_cluster = instance_user_data['cloud_formation']['ecs_cluster_name'] dimension = {'Name': 'ECSCluster', 'Value': ecs_cluster} except ValueError: LOG.exception("Instance User data are not in JSON format") except KeyError: LOG.exception("ECS Cluster name cannot be found in instance userdata") return dimension
def get_userdata_dict(): from json import loads from boto.utils import get_instance_userdata userdata = loads(get_instance_userdata()) return userdata
except: currentkeys = "" try: with open('/root/.ssh/authorized_keys', 'a') as authkeyfile: for key in PUBLICKEYS.items(): if not key[1][0] in currentkeys: authkeyfile.write(key[1][0]) authkeyfile.write('\n') authkeyfile.close() os.chmod('/root/.ssh/authorized_keys',0600) except: print ('Could not open authorized_keys file for writing!') # Collect User Meta Data try: user_data = get_instance_userdata(sep='|') except: print('No user data found for instance') try: hostname = user_data['hostname'] except: hostname = gethostname() # set hostname in /etc/hostname try: with open('/etc/hostname', 'w') as hostfile: hostfile.write(hostname) hostfile.write('\n') hostfile.close() except:
def get_metadata(self): data = get_instance_metadata() data.update(json.loads(get_instance_userdata())) return data
def get_userdata(params): module_name = None class_name = None d = get_instance_userdata(sep='|') params.update(d)