Ejemplo n.º 1
0
    def test_metadata_retrieve_files(self):

        md_data = {
            "AWS::CloudFormation::Init": {
                "config": {
                    "files": {
                        "/tmp/foo": {
                            "content": "bar"
                        }
                    }
                }
            }
        }
        md_str = json.dumps(md_data)

        md = cfn_helper.Metadata('teststack', None)

        with tempfile.NamedTemporaryFile(mode='w+') as default_file:
            default_file.write(md_str)
            default_file.flush()
            self.assertThat(default_file.name, ttm.FileContains(md_str))

            self.assertTrue(
                md.retrieve(default_path=default_file.name,
                            last_path=self.last_file))

            self.assertThat(self.last_file, ttm.FileContains(md_str))
            self.assertThat(md_data, ttm.Equals(md._metadata))

        md = cfn_helper.Metadata('teststack', None)
        self.assertTrue(
            md.retrieve(default_path=default_file.name,
                        last_path=self.last_file))
        self.assertThat(md_data, ttm.Equals(md._metadata))
Ejemplo n.º 2
0
    def test_cfn_init_with_ignore_errors_true(self):
        self.mock_cmd_run(['su', 'root', '-c', '/bin/command1']).AndReturn(
            FakePOpen('Doing something', 'error', -1))
        self.mock_cmd_run(['su', 'root', '-c',
                           '/bin/command2']).AndReturn(FakePOpen('All good'))
        self.m.ReplayAll()

        md_data = {
            "AWS::CloudFormation::Init": {
                "config": {
                    "commands": {
                        "00_foo": {
                            "command": "/bin/command1",
                            "ignoreErrors": "true"
                        },
                        "01_bar": {
                            "command": "/bin/command2",
                            "ignoreErrors": "false"
                        }
                    }
                }
            }
        }

        md = cfn_helper.Metadata('teststack', None)
        self.assertTrue(md.retrieve(meta_str=md_data,
                                    last_path=self.last_file))
        md.cfn_init()
Ejemplo n.º 3
0
 def setUp(self):
     super(TestCfnHup, self).setUp()
     self.logger = self.useFixture(fixtures.FakeLogger())
     self.stack_name = self.getUniqueString()
     self.resource = self.getUniqueString()
     self.region = self.getUniqueString()
     self.creds = tempfile.NamedTemporaryFile()
     self.metadata = cfn_helper.Metadata(self.stack_name,
                                         self.resource,
                                         credentials_file=self.creds.name,
                                         region=self.region)
     self.init_content = self.getUniqueString()
     self.init_temp = tempfile.NamedTemporaryFile()
     self.service_name = self.getUniqueString()
     self.init_section = {
         'AWS::CloudFormation::Init': {
             'config': {
                 'services': {
                     'sysvinit': {
                         self.service_name: {
                             'enabled': True,
                             'ensureRunning': True,
                         }
                     }
                 },
                 'files': {
                     self.init_temp.name: {
                         'content': self.init_content
                     }
                 }
             }
         }
     }
Ejemplo n.º 4
0
    def test_get_tags(self):
        self.m = mox.Mox()
        self.addCleanup(self.m.UnsetStubs)

        fake_tags = {'foo': 'fee', 'apple': 'red'}
        md_data = {
            "uuid": "f9431d18-d971-434d-9044-5b38f5b4646f",
            "availability_zone": "nova",
            "hostname": "as-wikidatabase-4ykioj3lgi57.novalocal",
            "launch_index": 0,
            "meta": fake_tags,
            "public_keys": {
                "heat_key": "ssh-rsa etc...\n"
            },
            "name": "as-WikiDatabase-4ykioj3lgi57"
        }
        tags_expect = fake_tags
        tags_expect['InstanceId'] = md_data['uuid']

        md = cfn_helper.Metadata('teststack', None)

        self.m.StubOutWithMock(md, 'get_nova_meta')
        md.get_nova_meta().AndReturn(md_data)
        self.m.ReplayAll()

        tags = md.get_tags()
        self.assertEqual(tags_expect, tags)
        self.m.VerifyAll()
Ejemplo n.º 5
0
    def test_nova_meta_wget_corrupt(self):
        url = 'http://169.254.169.254/openstack/2012-08-10/meta_data.json'
        temp_home = tempfile.mkdtemp()
        cache_path = os.path.join(temp_home, 'meta_data.json')

        def cleanup_temp_home(thome):
            os.unlink(cache_path)
            os.rmdir(thome)

        self.m = mox.Mox()
        self.addCleanup(self.m.UnsetStubs)
        self.addCleanup(cleanup_temp_home, temp_home)

        md_str = "this { is not really json"

        def write_cache_file(*params, **kwargs):
            with open(cache_path, 'w+') as cache_file:
                cache_file.write(md_str)
                cache_file.flush()
                self.assertThat(cache_file.name, ttm.FileContains(md_str))

        self.m.StubOutWithMock(subprocess, 'Popen')
        subprocess.Popen(['su', 'root', '-c',
                          'wget -O %s %s' % (cache_path, url)],
                         cwd=None, env=None, stderr=-1, stdout=-1)\
                  .WithSideEffects(write_cache_file)\
                  .AndReturn(FakePOpen('Downloaded', '', 0))

        self.m.ReplayAll()

        md = cfn_helper.Metadata('teststack', None)
        meta_out = md.get_nova_meta(cache_path=cache_path)
        self.assertEqual(None, meta_out)
        self.m.VerifyAll()
Ejemplo n.º 6
0
    def test_cfn_init(self):

        with tempfile.NamedTemporaryFile(mode='w+') as foo_file:
            md_data = {"AWS::CloudFormation::Init": {"config": {"files": {
                foo_file.name: {"content": "bar"}}}}}

            md = cfn_helper.Metadata('teststack', None)
            self.assertTrue(
                md.retrieve(meta_str=md_data, last_path=self.last_file))
            md.cfn_init()
            self.assertThat(foo_file.name, ttm.FileContains('bar'))
Ejemplo n.º 7
0
    def test_is_valid_metadata(self):
        md_data = {"AWS::CloudFormation::Init": {"config": {"files": {
            "/tmp/foo": {"content": "bar"}}}}}

        md = cfn_helper.Metadata('teststack', None)
        self.assertTrue(
            md.retrieve(meta_str=md_data, last_path=self.last_file))

        self.assertThat(md_data, ttm.Equals(md._metadata))
        self.assertTrue(md._is_valid_metadata())
        self.assertThat(
            md_data['AWS::CloudFormation::Init'], ttm.Equals(md._metadata))
Ejemplo n.º 8
0
    def test_metadata_retrieve_none(self):

        md = cfn_helper.Metadata('teststack', None)
        default_file = os.path.join(self.tdir.path, 'default_file')

        self.assertFalse(
            md.retrieve(default_path=default_file, last_path=self.last_file))
        self.assertIsNone(md._metadata)

        displayed = self.useFixture(fixtures.StringStream('stdout'))
        fake_stdout = displayed.stream
        self.useFixture(fixtures.MonkeyPatch('sys.stdout', fake_stdout))
        md.display()
        fake_stdout.flush()
        self.assertEqual(displayed.getDetails()['stdout'].as_text(), "")
Ejemplo n.º 9
0
    def test_nova_meta_wget(self):
        url = 'http://169.254.169.254/openstack/2012-08-10/meta_data.json'
        temp_home = tempfile.mkdtemp()
        cache_path = os.path.join(temp_home, 'meta_data.json')

        def cleanup_temp_home(thome):
            os.unlink(cache_path)
            os.rmdir(thome)

        self.m = mox.Mox()
        self.addCleanup(self.m.UnsetStubs)
        self.addCleanup(cleanup_temp_home, temp_home)

        meta_in = {
            "uuid": "f9431d18-d971-434d-9044-5b38f5b4646f",
            "availability_zone": "nova",
            "hostname": "as-wikidatabase-4ykioj3lgi57.novalocal",
            "launch_index": 0,
            "meta": {
                "freddy": "is hungry"
            },
            "public_keys": {
                "heat_key": "ssh-rsa etc...\n"
            },
            "name": "as-WikiDatabase-4ykioj3lgi57"
        }
        md_str = json.dumps(meta_in)

        def write_cache_file(*params, **kwargs):
            with open(cache_path, 'w+') as cache_file:
                cache_file.write(md_str)
                cache_file.flush()
                self.assertThat(cache_file.name, ttm.FileContains(md_str))

        self.m.StubOutWithMock(subprocess, 'Popen')
        subprocess.Popen(['su', 'root', '-c',
                          'wget -O %s %s' % (cache_path, url)],
                         cwd=None, env=None, stderr=-1, stdout=-1)\
                  .WithSideEffects(write_cache_file)\
                  .AndReturn(FakePOpen('Downloaded', '', 0))

        self.m.ReplayAll()

        md = cfn_helper.Metadata('teststack', None)
        meta_out = md.get_nova_meta(cache_path=cache_path)
        self.assertEqual(meta_in, meta_out)
        self.m.VerifyAll()
Ejemplo n.º 10
0
    def test_metadata_retrieve_by_key_passed(self):

        md_data = {"foo": {"bar": {"fred.1": "abcd"}}}
        md_str = json.dumps(md_data)

        md = cfn_helper.Metadata('teststack', None)
        self.assertTrue(md.retrieve(meta_str=md_data,
                                    last_path=self.last_file))
        self.assertThat(md_data, ttm.Equals(md._metadata))
        self.assertEqual(md_str, str(md))

        displayed = self.useFixture(fixtures.StringStream('stdout'))
        fake_stdout = displayed.stream
        self.useFixture(fixtures.MonkeyPatch('sys.stdout', fake_stdout))
        md.display("foo")
        fake_stdout.flush()
        self.assertEqual(displayed.getDetails()['stdout'].as_text(),
                         "{\"bar\": {\"fred.1\": \"abcd\"}}\n")
Ejemplo n.º 11
0
    def test_nova_meta_with_cache(self):
        meta_in = {"uuid": "f9431d18-d971-434d-9044-5b38f5b4646f",
                   "availability_zone": "nova",
                   "hostname": "as-wikidatabase-4ykioj3lgi57.novalocal",
                   "launch_index": 0,
                   "meta": {},
                   "public_keys": {"heat_key": "ssh-rsa etc...\n"},
                   "name": "as-WikiDatabase-4ykioj3lgi57"}
        md_str = json.dumps(meta_in)

        md = cfn_helper.Metadata('teststack', None)
        with tempfile.NamedTemporaryFile(mode='w+') as default_file:
            default_file.write(md_str)
            default_file.flush()
            self.assertThat(default_file.name, ttm.FileContains(md_str))
            meta_out = md.get_nova_meta(cache_path=default_file.name)

            self.assertEqual(meta_in, meta_out)
Ejemplo n.º 12
0
    def test_get_instance_id(self):
        self.m = mox.Mox()
        self.addCleanup(self.m.UnsetStubs)

        uuid = "f9431d18-d971-434d-9044-5b38f5b4646f"
        md_data = {"uuid": uuid,
                   "availability_zone": "nova",
                   "hostname": "as-wikidatabase-4ykioj3lgi57.novalocal",
                   "launch_index": 0,
                   "public_keys": {"heat_key": "ssh-rsa etc...\n"},
                   "name": "as-WikiDatabase-4ykioj3lgi57"}

        md = cfn_helper.Metadata('teststack', None)

        self.m.StubOutWithMock(md, 'get_nova_meta')
        md.get_nova_meta().AndReturn(md_data)
        self.m.ReplayAll()

        self.assertEqual(md.get_instance_id(), uuid)
        self.m.VerifyAll()
Ejemplo n.º 13
0
    def test_nova_meta_wget_failed(self):
        url = 'http://169.254.169.254/openstack/2012-08-10/meta_data.json'
        temp_home = tempfile.mkdtemp()
        cache_path = os.path.join(temp_home, 'meta_data.json')

        def cleanup_temp_home(thome):
            os.rmdir(thome)

        self.m = mox.Mox()
        self.addCleanup(self.m.UnsetStubs)
        self.addCleanup(cleanup_temp_home, temp_home)

        self.m.StubOutWithMock(subprocess, 'Popen')
        subprocess.Popen(['su', 'root', '-c',
                          'wget -O %s %s' % (cache_path, url)],
                         cwd=None, env=None, stderr=-1, stdout=-1)\
                  .AndReturn(FakePOpen('Failed', '', 1))

        self.m.ReplayAll()

        md = cfn_helper.Metadata('teststack', None)
        meta_out = md.get_nova_meta(cache_path=cache_path)
        self.assertEqual(None, meta_out)
        self.m.VerifyAll()