Пример #1
0
    def test_widgets_fresh_undercloud(self):

        # Test
        widgets = self.section.widgets()

        # Verify
        self.assertWidgetListEqual(widgets, [
            # Title
            util.header("Overview - Not Yet Deployed"),
            urwid.Divider(),
            urwid.Divider(),

            # Glance
            util.header("Glance Images"),
            urwid.Text("0 images uploaded."),
            urwid.Text("Use these commands to build and upload images:"),
            urwid.Text("    openstack overcloud image build --all"),
            urwid.Text("    openstack overcloud image upload"),
            urwid.Divider(),

            # Ironic
            util.header("Ironic Nodes"),
            urwid.Text("0 nodes registered."),
            urwid.Text("Use these commands to register nodes:"),
            urwid.Text("    openstack baremetal import --json instackenv.json"
                       ),
            urwid.Text("    openstack baremetal configure boot"),
            urwid.Divider(),

            # Heat
            util.header("Heat Stack"),
            urwid.Text("No stacks deployed.", ),
            urwid.Divider(),
        ])
Пример #2
0
    def test_widgets(self):

        self.clients.inspector.get_status.return_value = {'finished': True, }

        self.clients.ironic.node.list.return_value = [
            mock.MagicMock(
                uuid="NODE UUID", instance_uuid="INSTANCE UUID",
                power_state="Off", provision_state="active",
                maintenance=False)
        ]

        widgets = self.section.widgets()
        widths = [11, 15, 7, 11, 13, 15]

        self.assertWidgetListEqual(widgets, [
            util.header("Nodes"),
            urwid.Divider(),
            urwid.Divider(),
            util.TableRow(self.section.table_headers, widths,
                          util.table_header),
            urwid.Divider(),
            util.TableRow(
                ('NODE UUID', 'INSTANCE UUID', 'Off', 'active', False, True),
                widths, util.table_header,
            ),
        ])
Пример #3
0
    def test_widgets(self):

        self.clients.heat.stacks.list.return_value = [
            mock.MagicMock(
                stack_name="overcloud", stack_status="CREATE_COMPLETE",
                creation_time="2016-02-29T11:02:58Z",
                updated_time="2016-02-29T11:02:58Z")
        ]

        widgets = self.section.widgets()
        widths = [11, 17, 22, 22]

        self.assertWidgetListEqual(widgets, [
            util.header("Stacks"),
            urwid.Divider(),
            urwid.Divider(),
            util.TableRow(self.section.table_headers, widths,
                          util.table_header),
            urwid.Divider(),
            util.TableRow(
                ('overcloud', 'CREATE_COMPLETE', '2016-02-29T11:02:58Z',
                 '2016-02-29T11:02:58Z'),
                widths, util.table_header,
            ),
        ])
Пример #4
0
    def test_widgets(self):

        server = mock.MagicMock(
            human_id="overcloud-objectstorage-0",
            networks={'ctlplane': ['192.0.2.13']}
        )
        server.id = "ID ID ID"

        self.clients.nova.servers.list.return_value = [server, ]

        widgets = self.section.widgets()
        widths = [10, 27, 30]

        self.assertWidgetListEqual(widgets, [
            util.header("Servers"),
            urwid.Divider(),
            urwid.Divider(),
            util.TableRow(self.section.table_headers, widths,
                          util.table_header),
            urwid.Divider(),
            util.TableRow(
                ('ID ID ID', 'overcloud-objectstorage-0',
                 "{'ctlplane': ['192.0.2.13']}"),
                widths, util.table_header,
            ),
        ])
Пример #5
0
    def test_image_summary_all(self):

        def create_image(name):
            i = mock.MagicMock()
            i.name = name
            return i

        # Setup

        self.section.clients.glance.images.list.return_value = [
            create_image(name="image1"),
            create_image(name="image2"),
        ]

        # Test
        widgets = self.section._images_summary()

        # Verify
        self.assertWidgetListEqual(widgets, [
            util.header("Glance Images"),
            urwid.Text("2 images uploaded."),
            urwid.Text("- image1"),
            urwid.Text("- image2"),
            urwid.Divider(),
        ])
Пример #6
0
    def test_widgets(self):

        image = mock.MagicMock(size=5153184, status="active",
                               created_at="2016-02-29T11:02:58Z",
                               updated_at="2016-02-29T11:02:58Z")
        image.id = "ID ID ID ID"
        image.name = "Image Name"

        self.clients.glance.images.list.return_value = [image, ]

        widgets = self.section.widgets()
        widths = [13, 12, 9, 8, 22, 22]

        self.assertWidgetListEqual(widgets, [
            util.header("Images"),
            urwid.Divider(),
            urwid.Divider(),
            util.TableRow(self.section.table_headers, widths,
                          util.table_header),
            urwid.Divider(),
            util.TableRow((
                image.id, image.name, image.size, image.status,
                image.created_at, image.updated_at), widths, util.table_header
            ),
        ])
Пример #7
0
    def _ironic_summary(self):

        nodes = list(self.clients.ironic.node.list())
        by_provision_state = collections.defaultdict(list)

        for node in nodes:
            by_provision_state[node.provision_state].append(node)

        lines = [
            util.header("Ironic Nodes"),
            urwid.Text("{0} nodes registered.".format(len(nodes))),
        ]

        if len(by_provision_state):
            for state, nodes in by_provision_state.items():
                lines.append(
                    urwid.Text("{0} nodes with the provisioning state '{1}'"
                               .format(len(nodes), state))
                )
        else:
            lines.extend([
                urwid.Text("Use these commands to register nodes:"),
                urwid.Text("    openstack baremetal import --json "
                           "instackenv.json"),
                urwid.Text("    openstack baremetal configure boot"),
            ])

        lines.append(urwid.Divider())

        return lines
Пример #8
0
    def test_header(self):

        # Test
        txt = util.header("Header")

        # Verify
        self.assertEqual(txt.get_text(), ('Header', [('header', 6)]))
Пример #9
0
    def test_widgets_no_nodes(self):

        self.clients.ironic.node.list.return_value = []
        widgets = self.section.widgets()

        self.assertWidgetListEqual(widgets, [
            util.header("Nodes"),
            urwid.Divider(),
            urwid.Divider(),
            urwid.Text("No Ironic nodes found.")
        ])
Пример #10
0
    def test_widgets_no_stacks(self):

        self.clients.nova.servers.list.return_value = []
        widgets = self.section.widgets()

        self.assertWidgetListEqual(widgets, [
            util.header("Servers"),
            urwid.Divider(),
            urwid.Divider(),
            urwid.Text("No Nova servers found.")
        ])
Пример #11
0
    def test_widgets_no_images(self):

        self.clients.glance.images.list.return_value = []
        widgets = self.section.widgets()

        self.assertWidgetListEqual(widgets, [
            util.header("Images"),
            urwid.Divider(),
            urwid.Divider(),
            urwid.Text("No Glance images found.")
        ])
Пример #12
0
    def undeployed(self):

        self.title += "- Not Yet Deployed"

        lines = []
        lines.extend(self._images_summary())
        lines.extend(self._ironic_summary())
        lines.extend(self._inspector_summary())
        lines.extend([
            util.header("Heat Stack"),
            urwid.Text("No stacks deployed.", ),
            urwid.Divider(),
        ])
        return lines
Пример #13
0
    def _resource_error(self, stack):

        resources = self.clients.heat.resources.list(stack.stack_name,
                                                     nested_depth=2)

        failed = (resource for resource in resources
                  if resource.resource_status in FAILED_STATUSES)

        for resource in failed:
            yield util.header("Failed resource: {0}"
                              .format(resource.resource_name))
            yield urwid.Text("Status reason: {0}"
                             .format(resource.resource_status_reason))
            yield urwid.Divider()
Пример #14
0
    def test_image_summary_emtpy(self):

        # Test
        widgets = self.section._images_summary()

        # Verify
        self.assertWidgetListEqual(widgets, [
            util.header("Glance Images"),
            urwid.Text("0 images uploaded."),
            urwid.Text("Use these commands to build and upload images:"),
            urwid.Text("    openstack overcloud image build --all"),
            urwid.Text("    openstack overcloud image upload"),
            urwid.Divider(),
        ])
Пример #15
0
    def test_ironic_summary_emtpy(self):

        # Test
        widgets = self.section._ironic_summary()

        # Verify
        self.assertWidgetListEqual(widgets, [
            util.header("Ironic Nodes"),
            urwid.Text("0 nodes registered."),
            urwid.Text("Use these commands to register nodes:"),
            urwid.Text("    openstack baremetal import --json "
                       "instackenv.json"),
            urwid.Text("    openstack baremetal configure boot"),
            urwid.Divider(),
        ])
Пример #16
0
    def _inspector_summary(self):

        nodes = list(self.clients.ironic.node.list())
        by_introspection_status = collections.defaultdict(list)

        for node in nodes:
            try:
                inspector_status = self.clients.inspector.get_status(node.uuid)
                inspector_status = inspector_status['finished']
            except inspector_http.ClientError:
                inspector_status = "Not started"
            except clients.ServiceNotAvailable:
                inspector_status = 'Unknown'
            by_introspection_status[inspector_status].append(node)

        lines = [
            util.header("Node Introspection")
        ]

        if len(by_introspection_status[False]):
            lines.append(
                urwid.Text("{0} nodes currently being introspected".format(
                    len(by_introspection_status[False])))
            )

        if len(by_introspection_status[True]):
            lines.append(
                urwid.Text("{0} nodes finished introspection".format(
                    len(by_introspection_status[True])))
            )

        if len(by_introspection_status["Not started"]):
            lines.append(
                urwid.Text("{0} nodes not yet started introspection".format(
                    len(by_introspection_status["Not started"])))
            )

        if len(by_introspection_status["Unknown"]):
            lines.append(
                urwid.Text("Failed to get introspection status for {0} nodes"
                           .format(len(by_introspection_status["Unknown"])))
            )

        if len(lines) == 1:
            return []

        lines.append(urwid.Divider())
        return lines
Пример #17
0
    def failed(self, stacks):

        self.title += "- Deploy Failed"

        lines = []

        lines.extend(self._ironic_summary())

        for stack in stacks:

            header = "Stack '{0}' status: {1}".format(
                stack.stack_name, stack.stack_status)
            lines.append(util.header(header))

            lines.extend(self._resource_error(stack))
            lines.append(urwid.Divider())

        return lines
Пример #18
0
    def test_ironic_summary_all(self):

        # Setup
        self.section.clients.ironic.node.list.return_value = [
            mock.MagicMock(provision_state='available'),
            mock.MagicMock(provision_state='available'),
        ]

        # Test
        widgets = self.section._ironic_summary()

        # Verify
        self.assertWidgetListEqual(widgets, [
            util.header("Ironic Nodes"),
            urwid.Text("2 nodes registered."),
            urwid.Text("2 nodes with the provisioning state 'available'"),
            urwid.Divider(),
        ])
Пример #19
0
    def test_inspector_summary_progress(self):

        # Setup
        self.section.clients.ironic.node.list.return_value = [
            mock.MagicMock(uuid='UUID1'),
            mock.MagicMock(uuid='UUID2'),
        ]

        self.section.clients.inspector.get_status.return_value = {
            'finished': True
        }

        # Test
        widgets = self.section._inspector_summary()

        # Verify
        self.assertWidgetListEqual(widgets, [
            util.header("Node Introspection"),
            urwid.Text("2 nodes finished introspection"),
            urwid.Divider(),
        ])
Пример #20
0
    def _images_summary(self):
        images = list(self.clients.glance.images.list())

        widgets = [
            util.header("Glance Images"),
            urwid.Text("{0} images uploaded.".format(len(images))),
        ]

        if len(images):
            for image in images:
                widgets.append(urwid.Text("- {0}".format(image.name)))
        else:
            widgets.extend([
                urwid.Text("Use these commands to build and upload images:"),
                urwid.Text("    openstack overcloud image build --all"),
                urwid.Text("    openstack overcloud image upload"),
            ])

        widgets.append(urwid.Divider())

        return widgets
Пример #21
0
    def deploying(self, stacks):

        self.title += "- Deploy In Progress"

        lines = []

        lines.extend(self._ironic_summary())

        for stack in stacks:

            extra = ""

            if stack.stack_status in DEPLOYING_STATUSES:
                time_string = stack.updated_time or stack.creation_time
                extra = " (Started: {})".format(time_string)

            header = "Stack '{0}' status: {1}{2}".format(
                stack.stack_name, stack.stack_status, extra)
            lines.append(util.header(header))
            lines.extend(self._stack_event_summary(stack))
            lines.append(urwid.Divider())
        return lines
Пример #22
0
 def widgets(self):
     return [util.header(self.title, "center"), urwid.Divider(), urwid.Divider()]