コード例 #1
0
ファイル: test_compose_preseed.py プロジェクト: uraniid/maas
 def assertAptConfig(self, config, apt_proxy):
     self.assertThat(
         config,
         ContainsDict({
             'apt':
             ContainsDict({
                 'preserve_sources_list':
                 Equals(False),
                 'primary':
                 MatchesListwise([
                     MatchesDict({
                         "arches":
                         Equals(["default"]),
                         "uri":
                         Equals(PackageRepository.get_main_archive().url),
                     }),
                 ]),
                 'proxy':
                 Equals(apt_proxy),
                 'security':
                 MatchesListwise([
                     MatchesDict({
                         "arches":
                         Equals(["default"]),
                         "uri":
                         Equals(PackageRepository.get_main_archive().url),
                     }),
                 ]),
             })
         }))
コード例 #2
0
ファイル: compose_preseed.py プロジェクト: ddstreet/maas
def get_old_archive_config():
    """Return the system info which includes the APT mirror information."""
    # Deprecated in cloud-init 0.7.8 in favor of the apt configuration format
    # generated by get_archive_config. This is still provided as old releases
    # (Precise, Trusty) have an older version of cloud-init which only reads
    # this format.
    return {
        "system_info": {
            "package_mirrors": [
                {
                    "arches": ["i386", "amd64"],
                    "search": {
                        "primary": [PackageRepository.get_main_archive().url],
                        "security": [PackageRepository.get_main_archive().url],
                    },
                    "failsafe": {
                        "primary": "http://archive.ubuntu.com/ubuntu",
                        "security": "http://security.ubuntu.com/ubuntu",
                    },
                },
                {
                    "arches": ["default"],
                    "search": {
                        "primary": [PackageRepository.get_ports_archive().url],
                        "security":
                        [PackageRepository.get_ports_archive().url],
                    },
                    "failsafe": {
                        "primary": "http://ports.ubuntu.com/ubuntu-ports",
                        "security": "http://ports.ubuntu.com/ubuntu-ports",
                    },
                },
            ]
        }
    }
コード例 #3
0
def get_system_info():
    """Return the system info which includes the APT mirror information."""
    return {
        "system_info": {
            "package_mirrors": [
                {
                    "arches": ["i386", "amd64"],
                    "search": {
                        "primary": [
                            PackageRepository.get_main_archive().url],
                        "security": [
                            PackageRepository.get_main_archive().url],
                    },
                    "failsafe": {
                        "primary": "http://archive.ubuntu.com/ubuntu",
                        "security": "http://security.ubuntu.com/ubuntu",
                    }
                },
                {
                    "arches": ["default"],
                    "search": {
                        "primary": [
                            PackageRepository.get_ports_archive().url],
                        "security": [
                            PackageRepository.get_ports_archive().url],
                    },
                    "failsafe": {
                        "primary": "http://ports.ubuntu.com/ubuntu-ports",
                        "security": "http://ports.ubuntu.com/ubuntu-ports",
                    }
                },
            ]
        }
    }
コード例 #4
0
ファイル: test_compose_preseed.py プロジェクト: ocni-dtu/maas
 def assertSystemInfo(self, config):
     self.assertThat(
         config,
         ContainsDict({
             "system_info":
             MatchesDict({
                 "package_mirrors":
                 MatchesListwise([
                     MatchesDict({
                         "arches":
                         Equals(["i386", "amd64"]),
                         "search":
                         MatchesDict({
                             "primary":
                             Equals([
                                 PackageRepository.get_main_archive().url
                             ]),
                             "security":
                             Equals([
                                 PackageRepository.get_main_archive().url
                             ]),
                         }),
                         "failsafe":
                         MatchesDict({
                             "primary":
                             Equals("http://archive.ubuntu.com/ubuntu"),
                             "security":
                             Equals("http://security.ubuntu.com/ubuntu"),
                         }),
                     }),
                     MatchesDict({
                         "arches":
                         Equals(["default"]),
                         "search":
                         MatchesDict({
                             "primary":
                             Equals([
                                 PackageRepository.get_ports_archive().url
                             ]),
                             "security":
                             Equals([
                                 PackageRepository.get_ports_archive().url
                             ]),
                         }),
                         "failsafe":
                         MatchesDict({
                             "primary":
                             Equals("http://ports.ubuntu.com/ubuntu-ports"),
                             "security":
                             Equals("http://ports.ubuntu.com/ubuntu-ports"),
                         }),
                     }),
                 ])
             })
         }),
     )
コード例 #5
0
ファイル: test_compose_preseed.py プロジェクト: ocni-dtu/maas
 def test_compose_enlistment_preseed_disables_suites(self):
     default = PackageRepository.get_main_archive()
     default.disabled_pockets = ["security", "updates", "backports"]
     default.save()
     rack_controller = factory.make_RackController()
     url = factory.make_simple_http_url()
     request = make_HttpRequest()
     preseed = yaml.safe_load(
         compose_enlistment_preseed(
             request,
             rack_controller,
             {
                 "metadata_enlist_url": url,
                 "syslog_host_port": url
             },
         ))
     self.assertItemsEqual(
         set([
             "#",
             "deb",
             "deb-src",
             "$PRIMARY",
             "$RELEASE",
             "multiverse",
             "restricted",
             "universe",
             "main",
         ]),
         set(preseed["apt"]["sources_list"].split()),
     )
コード例 #6
0
    def test_get_archive_mirrors_with_main_archive_set(self):
        main_archive = yield deferToDatabase(
            lambda: PackageRepository.get_main_archive())
        url = factory.make_parsed_url(scheme='http')
        main_archive.url = url.geturl()
        yield deferToDatabase(transactional(main_archive.save))

        response = yield call_responder(Region(), GetArchiveMirrors, {})

        self.assertEqual(
            {"main": url,
             "ports": urlparse("http://ports.ubuntu.com/ubuntu-ports")},
            response)
コード例 #7
0
 def test_compose_enlistment_preseed_disables_components(self):
     default = PackageRepository.get_main_archive()
     default.disabled_components = ['restricted', 'multiverse']
     default.save()
     rack_controller = factory.make_RackController()
     url = factory.make_simple_http_url()
     request = make_HttpRequest()
     preseed = yaml.safe_load(
         compose_enlistment_preseed(request, rack_controller, {
             'metadata_enlist_url': url,
             'syslog_host_port': url,
         }))
     self.assertNotIn('restricted', preseed['apt']['sources_list'])
     self.assertNotIn('multiverse', preseed['apt']['sources_list'])
コード例 #8
0
 def test_compose_enlistment_preseed_disables_components(self):
     default = PackageRepository.get_main_archive()
     default.disabled_components = ["restricted", "multiverse"]
     default.save()
     rack_controller = factory.make_RackController()
     url = factory.make_simple_http_url()
     request = make_HttpRequest()
     preseed = yaml.safe_load(
         compose_enlistment_preseed(
             request,
             rack_controller,
             {"metadata_enlist_url": url, "syslog_host_port": url},
         )
     )
     self.assertNotIn("restricted", preseed["apt"]["sources_list"])
     self.assertNotIn("multiverse", preseed["apt"]["sources_list"])
コード例 #9
0
 def test_set_main_archive_overrides_to_package_repository(self):
     self.become_admin()
     main_archive = factory.make_url(scheme="http")
     response = self.client.post(reverse('maas_handler'), {
         "op": "set_config",
         "name": "main_archive",
         "value": main_archive,
     })
     self.assertThat(
         response,
         MatchesAll(
             # An HTTP 200 response,
             MatchesStructure(status_code=Equals(http.client.OK),
                              content=Equals(b"OK")), ))
     self.assertThat(PackageRepository.get_main_archive().url,
                     Equals(main_archive))
コード例 #10
0
 def test_compose_enlistment_preseed_disables_suites(self):
     default = PackageRepository.get_main_archive()
     default.disabled_pockets = ['security', 'updates', 'backports']
     default.save()
     rack_controller = factory.make_RackController()
     url = factory.make_simple_http_url()
     request = make_HttpRequest()
     preseed = yaml.safe_load(
         compose_enlistment_preseed(request, rack_controller, {
             'metadata_enlist_url': url,
             'syslog_host_port': url,
         }))
     self.assertItemsEqual(
         set([
             '#', 'deb', 'deb-src', '$PRIMARY', '$RELEASE', 'multiverse',
             'restricted', 'universe', 'main'
         ]), set(preseed['apt']['sources_list'].split()))
コード例 #11
0
def get_node_deprecated_preseed_context():
    """Return the node-dependent context dictionary to be used to render
    preseed template. This includes all the context variables that have
    been deprecated, but allows for backwards compatibility for those
    preseeds that still contain old variables.

    :return: The context dictionary.
    :rtype: dict.
    """
    main_archive_hostname, main_archive_directory = get_netloc_and_path(
        PackageRepository.get_main_archive().url)
    ports_archive_hostname, ports_archive_directory = get_netloc_and_path(
        PackageRepository.get_ports_archive().url)

    return {
        "main_archive_hostname": main_archive_hostname,
        "main_archive_directory": main_archive_directory,
        "ports_archive_hostname": ports_archive_hostname,
        "ports_archive_directory": ports_archive_directory,
        "enable_http_proxy": Config.objects.get_config("enable_http_proxy"),
    }
コード例 #12
0
ファイル: test_settings.py プロジェクト: tjjh89017/maas
    def test_settings_ubuntu_POST(self):
        self.client.login(user=factory.make_admin())
        new_main_archive = 'http://test.example.com/archive'
        new_ports_archive = 'http://test2.example.com/archive'
        response = self.client.post(
            reverse('settings_general'),
            get_prefixed_form_data(prefix='ubuntu',
                                   data={
                                       'main_archive': new_main_archive,
                                       'ports_archive': new_ports_archive,
                                   }))

        self.assertEqual(http.client.FOUND, response.status_code,
                         response.content)
        self.assertEqual((
            new_main_archive,
            new_ports_archive,
        ), (
            PackageRepository.get_main_archive().url,
            PackageRepository.get_ports_archive().url,
        ))
コード例 #13
0
ファイル: preseed.py プロジェクト: sfeole/maas
def get_enlist_archive_config(apt_proxy=None):
    default = PackageRepository.get_main_archive()
    ports = PackageRepository.get_ports_archive()
    # Process the default Ubuntu Archives or Mirror.
    archives = {
        'apt': {
            'preserve_sources_list':
            False,
            'primary': [
                {
                    'arches': ['amd64', 'i386'],
                    'uri': default.url
                },
                {
                    'arches': ['default'],
                    'uri': ports.url
                },
            ],
            'security': [
                {
                    'arches': ['amd64', 'i386'],
                    'uri': default.url
                },
                {
                    'arches': ['default'],
                    'uri': ports.url
                },
            ],
        },
    }
    if apt_proxy:
        archives['apt']['proxy'] = apt_proxy
    if default.key:
        archives['apt']['sources'] = {'default_key': {'key': default.key}}
    if ports.key:
        archives['apt']['sources'] = {'ports_key': {'key': ports.key}}

    return archives
コード例 #14
0
ファイル: test_settings.py プロジェクト: ocni-dtu/maas
    def test_settings_ubuntu_POST(self):
        self.client.login(user=factory.make_admin())
        new_main_archive = "http://test.example.com/archive"
        new_ports_archive = "http://test2.example.com/archive"
        response = self.client.post(
            reverse("settings_general"),
            get_prefixed_form_data(
                prefix="ubuntu",
                data={
                    "main_archive": new_main_archive,
                    "ports_archive": new_ports_archive,
                },
            ),
        )

        self.assertEqual(http.client.FOUND, response.status_code,
                         response.content)
        self.assertEqual(
            (new_main_archive, new_ports_archive),
            (
                PackageRepository.get_main_archive().url,
                PackageRepository.get_ports_archive().url,
            ),
        )
コード例 #15
0
ファイル: test_compose_preseed.py プロジェクト: ocni-dtu/maas
 def test_compose_enlistment_preseed(self):
     rack_controller = factory.make_RackController()
     url = factory.make_simple_http_url()
     request = make_HttpRequest()
     apt_proxy = get_apt_proxy(request, rack_controller)
     preseed = yaml.safe_load(
         compose_enlistment_preseed(
             request,
             rack_controller,
             {
                 "metadata_enlist_url": url,
                 "syslog_host_port": url
             },
         ))
     self.assertDictEqual({"MAAS": {
         "metadata_url": url
     }}, preseed["datasource"])
     self.assertTrue(preseed["manage_etc_hosts"])
     self.assertDictEqual({"remotes": {"maas": url}}, preseed["rsyslog"])
     self.assertDictEqual(
         {
             "delay": "now",
             "mode": "poweroff",
             "timeout": 1800,
             "condition": "test ! -e /tmp/block-poweroff",
         },
         preseed["power_state"],
     )
     self.assertItemsEqual(
         [
             "python3-yaml",
             "python3-oauthlib",
             "freeipmi-tools",
             "ipmitool",
             "sshpass",
             "archdetect-deb",
             "jq",
         ],
         preseed["packages"],
     )
     default = PackageRepository.get_main_archive().url
     ports = PackageRepository.get_ports_archive().url
     self.assertThat(
         preseed,
         ContainsDict({
             "apt":
             ContainsDict({
                 "preserve_sources_list":
                 Equals(False),
                 "primary":
                 MatchesListwise([
                     MatchesDict({
                         "arches": Equals(["amd64", "i386"]),
                         "uri": Equals(default),
                     }),
                     MatchesDict({
                         "arches": Equals(["default"]),
                         "uri": Equals(ports),
                     }),
                 ]),
                 "proxy":
                 Equals(apt_proxy),
                 "security":
                 MatchesListwise([
                     MatchesDict({
                         "arches": Equals(["amd64", "i386"]),
                         "uri": Equals(default),
                     }),
                     MatchesDict({
                         "arches": Equals(["default"]),
                         "uri": Equals(ports),
                     }),
                 ]),
             })
         }),
     )
コード例 #16
0
 def test_default_repositories_cannot_be_deleted(self):
     with ExpectedException(ValidationError):
         PackageRepository.get_main_archive().delete()
     with ExpectedException(ValidationError):
         PackageRepository.get_ports_archive().delete()
コード例 #17
0
ファイル: compose_preseed.py プロジェクト: ddstreet/maas
def get_enlist_archive_config(apt_proxy=None):
    default = PackageRepository.get_main_archive()
    ports = PackageRepository.get_ports_archive()
    # Process the default Ubuntu Archives or Mirror.
    archives = {
        "apt": {
            "preserve_sources_list":
            False,
            "primary": [
                {
                    "arches": ["amd64", "i386"],
                    "uri": default.url
                },
                {
                    "arches": ["default"],
                    "uri": ports.url
                },
            ],
            "security": [
                {
                    "arches": ["amd64", "i386"],
                    "uri": default.url
                },
                {
                    "arches": ["default"],
                    "uri": ports.url
                },
            ],
        }
    }
    if apt_proxy:
        archives["apt"]["proxy"] = apt_proxy
    if default.key:
        archives["apt"]["sources"] = {"default_key": {"key": default.key}}
    if ports.key:
        archives["apt"]["sources"] = {"ports_key": {"key": ports.key}}

    # Collect the list of all things to disable. Since we do not know the
    # architecture during enlistment if a suite or component is disabled on
    # default or ports it will be disabled on both during enlistment.
    disabled_suites = set()
    disabled_components = set()
    disable_sources = default.disable_sources or ports.disable_sources
    for repo in [default, ports]:
        disabled_suites = disabled_suites.union(repo.disabled_pockets)
        disabled_components = disabled_components.union(
            repo.disabled_components)

    components = " ".join(
        disabled_components.symmetric_difference(default.KNOWN_COMPONENTS))
    archives["apt"]["sources_list"] = "deb $PRIMARY $RELEASE %s\n" % components
    if disable_sources:
        archives["apt"]["sources_list"] += "# "
    archives["apt"]["sources_list"] += ("deb-src $PRIMARY $RELEASE %s\n" %
                                        components)
    for suite in ["updates", "backports"]:
        if suite not in disabled_suites:
            archives["apt"][
                "sources_list"] += "deb $PRIMARY $RELEASE-%s %s\n" % (
                    suite, components)
            if disable_sources:
                archives["apt"]["sources_list"] += "# "
            archives["apt"][
                "sources_list"] += "deb-src $PRIMARY $RELEASE-%s %s\n" % (
                    suite, components)
    if "security" not in disabled_suites:
        archives["apt"]["sources_list"] += (
            "deb $SECURITY $RELEASE-security %s\n" % components)
        if disable_sources:
            archives["apt"]["sources_list"] += "# "
        archives["apt"]["sources_list"] += (
            "deb-src $SECURITY $RELEASE-security %s\n" % components)

    return archives
コード例 #18
0
 def test_compose_enlistment_preseed(self):
     rack_controller = factory.make_RackController()
     url = factory.make_simple_http_url()
     request = make_HttpRequest()
     apt_proxy = get_apt_proxy(request, rack_controller)
     preseed = yaml.safe_load(
         compose_enlistment_preseed(request, rack_controller, {
             'metadata_enlist_url': url,
             'syslog_host_port': url,
         }))
     self.assertDictEqual({'MAAS': {
         'metadata_url': url
     }}, preseed['datasource'])
     self.assertTrue(preseed['manage_etc_hosts'])
     self.assertDictEqual({'remotes': {'maas': url}}, preseed['rsyslog'])
     self.assertDictEqual(
         {
             'delay': 'now',
             'mode': 'poweroff',
             'timeout': 1800,
             'condition': 'test ! -e /tmp/block-poweroff',
         }, preseed['power_state'])
     self.assertItemsEqual([
         'python3-yaml', 'python3-oauthlib', 'freeipmi-tools', 'ipmitool',
         'sshpass', 'archdetect-deb', 'jq'
     ], preseed['packages'])
     default = PackageRepository.get_main_archive().url
     ports = PackageRepository.get_ports_archive().url
     self.assertThat(
         preseed,
         ContainsDict({
             'apt':
             ContainsDict({
                 'preserve_sources_list':
                 Equals(False),
                 'primary':
                 MatchesListwise([
                     MatchesDict({
                         "arches": Equals(["amd64", "i386"]),
                         "uri": Equals(default),
                     }),
                     MatchesDict({
                         "arches": Equals(["default"]),
                         "uri": Equals(ports),
                     }),
                 ]),
                 'proxy':
                 Equals(apt_proxy),
                 'security':
                 MatchesListwise([
                     MatchesDict({
                         "arches": Equals(["amd64", "i386"]),
                         "uri": Equals(default),
                     }),
                     MatchesDict({
                         "arches": Equals(["default"]),
                         "uri": Equals(ports),
                     }),
                 ]),
             })
         }))
コード例 #19
0
def get_enlist_archive_config(apt_proxy=None):
    default = PackageRepository.get_main_archive()
    ports = PackageRepository.get_ports_archive()
    # Process the default Ubuntu Archives or Mirror.
    archives = {
        'apt': {
            'preserve_sources_list': False,
            'primary': [
                {
                    'arches': ['amd64', 'i386'],
                    'uri': default.url
                },
                {
                    'arches': ['default'],
                    'uri': ports.url
                },
            ],
            'security': [
                {
                    'arches': ['amd64', 'i386'],
                    'uri': default.url
                },
                {
                    'arches': ['default'],
                    'uri': ports.url
                },
            ],
        },
    }
    if apt_proxy:
        archives['apt']['proxy'] = apt_proxy
    if default.key:
        archives['apt']['sources'] = {
            'default_key': {
                'key': default.key
            }
        }
    if ports.key:
        archives['apt']['sources'] = {
            'ports_key': {
                'key': ports.key
            }
        }

    # Collect the list of all things to disable. Since we do not know the
    # architecture during enlistment if a suite or component is disabled on
    # default or ports it will be disabled on both during enlistment.
    disabled_suites = set()
    disabled_components = set()
    disable_sources = default.disable_sources or ports.disable_sources
    for repo in [default, ports]:
        disabled_suites = disabled_suites.union(repo.disabled_pockets)
        disabled_components = disabled_components.union(
            repo.disabled_components)

    components = ' '.join(disabled_components.symmetric_difference(
        default.KNOWN_COMPONENTS))
    archives['apt']['sources_list'] = 'deb $PRIMARY $RELEASE %s\n' % components
    if disable_sources:
        archives['apt']['sources_list'] += '# '
    archives['apt']['sources_list'] += (
        'deb-src $PRIMARY $RELEASE %s\n' % components)
    for suite in ['updates', 'backports']:
        if suite not in disabled_suites:
            archives['apt']['sources_list'] += (
                'deb $PRIMARY $RELEASE-%s %s\n' % (suite, components))
            if disable_sources:
                archives['apt']['sources_list'] += '# '
            archives['apt']['sources_list'] += (
                'deb-src $PRIMARY $RELEASE-%s %s\n' % (suite, components))
    if 'security' not in disabled_suites:
        archives['apt']['sources_list'] += (
            'deb $SECURITY $RELEASE-security %s\n' % components)
        if disable_sources:
            archives['apt']['sources_list'] += '# '
        archives['apt']['sources_list'] += (
            'deb-src $SECURITY $RELEASE-security %s\n' % components)

    return archives