PNG  IHDR* pHYs+ IDATx]n#; cdLb Ǚ[at¤_:uP}>!Usă cag޿ ֵNu`ݼTâabO7uL&y^wFٝA"l[|ŲHLN밪4*sG3|Dv}?+y߉{OuOAt4Jj.u]Gz*҉sP'VQKbA1u\`& Af;HWj hsO;ogTu uj7S3/QzUr&wS`M$X_L7r2;aE+ώ%vikDA:dR+%KzƉo>eOth$z%: :{WwaQ:wz%4foɹE[9<]#ERINƻv溂E%P1i01 |Jvҗ&{b?9g=^wζXn/lK::90KwrюO\!ջ3uzuGv^;騢wq<Iatv09:tt~hEG`v;3@MNZD.1]L:{ծI3`L(÷ba")Y.iljCɄae#I"1 `3*Bdz>j<fU40⨬%O$3cGt]j%Fߠ_twJ;ABU8vP3uEԑwQ V:h%))LfraqX-ۿX]v-\9I gl8tzX ]ecm)-cgʒ#Uw=Wlێn(0hPP/ӨtQ“&J35 $=]r1{tLuǮ*i0_;NƝ8;-vݏr8+U-kruȕYr0RnC]*ެ(M:]gE;{]tg(#ZJ9y>utRDRMdr9㪩̞zֹb<ģ&wzJM"iI( .ꮅX)Qw:9,i좜\Ԛi7&N0:asϓc];=ΗOӣ APqz93 y $)A*kVHZwBƺnWNaby>XMN*45~ղM6Nvm;A=jֲ.~1}(9`KJ/V F9[=`~[;sRuk]rєT!)iQO)Y$V ی ۤmzWz5IM Zb )ˆC`6 rRa}qNmUfDsWuˤV{ Pݝ'=Kֳbg,UҘVz2ﴻnjNgBb{? ߮tcsͻQuxVCIY۠:(V뺕 ٥2;t`@Fo{Z9`;]wMzU~%UA蛚dI vGq\r82iu +St`cR.6U/M9IENDB` REDROOM
PHP 5.6.40
Preview: cc_phone_home.py Size: 5.48 KB
//lib/python3.6/site-packages/cloudinit/config/cc_phone_home.py

# Copyright (C) 2011 Canonical Ltd.
# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P.
#
# Author: Scott Moser <scott.moser@canonical.com>
# Author: Juerg Haefliger <juerg.haefliger@hp.com>
#
# This file is part of cloud-init. See LICENSE file for license information.

"""Phone Home: Post data to url"""

import logging
from textwrap import dedent

from cloudinit import templater, url_helper, util
from cloudinit.cloud import Cloud
from cloudinit.config import Config
from cloudinit.config.schema import MetaSchema, get_meta_doc
from cloudinit.distros import ALL_DISTROS
from cloudinit.settings import PER_INSTANCE

frequency = PER_INSTANCE

POST_LIST_ALL = [
    "pub_key_dsa",
    "pub_key_rsa",
    "pub_key_ecdsa",
    "pub_key_ed25519",
    "instance_id",
    "hostname",
    "fqdn",
]

MODULE_DESCRIPTION = """\
This module can be used to post data to a remote host after boot is complete.
If the post url contains the string ``$INSTANCE_ID`` it will be replaced with
the id of the current instance. Either all data can be posted or a list of
keys to post. Available keys are:

    - ``pub_key_dsa``
    - ``pub_key_rsa``
    - ``pub_key_ecdsa``
    - ``pub_key_ed25519``
    - ``instance_id``
    - ``hostname``
    - ``fdqn``

Data is sent as ``x-www-form-urlencoded`` arguments.

**Example HTTP POST**:

.. code-block:: http

    POST / HTTP/1.1
    Content-Length: 1337
    User-Agent: Cloud-Init/21.4
    Accept-Encoding: gzip, deflate
    Accept: */*
    Content-Type: application/x-www-form-urlencoded

    pub_key_dsa=dsa_contents&pub_key_rsa=rsa_contents&pub_key_ecdsa=ecdsa_contents&pub_key_ed25519=ed25519_contents&instance_id=i-87018aed&hostname=myhost&fqdn=myhost.internal
"""

meta: MetaSchema = {
    "id": "cc_phone_home",
    "name": "Phone Home",
    "title": "Post data to url",
    "description": MODULE_DESCRIPTION,
    "distros": [ALL_DISTROS],
    "frequency": PER_INSTANCE,
    "examples": [
        dedent(
            """\
            phone_home:
                url: http://example.com/$INSTANCE_ID/
                post: all
            """
        ),
        dedent(
            """\
            phone_home:
                url: http://example.com/$INSTANCE_ID/
                post:
                    - pub_key_dsa
                    - pub_key_rsa
                    - pub_key_ecdsa
                    - pub_key_ed25519
                    - instance_id
                    - hostname
                    - fqdn
                tries: 5
            """
        ),
    ],
    "activate_by_schema_keys": ["phone_home"],
}

__doc__ = get_meta_doc(meta)
LOG = logging.getLogger(__name__)
# phone_home:
#  url: http://my.foo.bar/$INSTANCE/
#  post: all
#  tries: 10
#
# phone_home:
#  url: http://my.foo.bar/$INSTANCE_ID/
#  post: [ pub_key_dsa, pub_key_rsa, pub_key_ecdsa, instance_id, hostname,
#          fqdn ]
#


def handle(name: str, cfg: Config, cloud: Cloud, args: list) -> None:
    if len(args) != 0:
        ph_cfg = util.read_conf(args[0])
    else:
        if "phone_home" not in cfg:
            LOG.debug(
                "Skipping module named %s, "
                "no 'phone_home' configuration found",
                name,
            )
            return
        ph_cfg = cfg["phone_home"]

    if "url" not in ph_cfg:
        LOG.warning(
            "Skipping module named %s, "
            "no 'url' found in 'phone_home' configuration",
            name,
        )
        return

    url = ph_cfg["url"]
    post_list = ph_cfg.get("post", "all")
    tries = ph_cfg.get("tries")
    try:
        tries = int(tries)  # type: ignore
    except (ValueError, TypeError):
        tries = 10
        util.logexc(
            LOG,
            "Configuration entry 'tries' is not an integer, using %s instead",
            tries,
        )

    if post_list == "all":
        post_list = POST_LIST_ALL

    all_keys = {
        "instance_id": cloud.get_instance_id(),
        "hostname": cloud.get_hostname().hostname,
        "fqdn": cloud.get_hostname(fqdn=True).hostname,
    }

    pubkeys = {
        "pub_key_dsa": "/etc/ssh/ssh_host_dsa_key.pub",
        "pub_key_rsa": "/etc/ssh/ssh_host_rsa_key.pub",
        "pub_key_ecdsa": "/etc/ssh/ssh_host_ecdsa_key.pub",
        "pub_key_ed25519": "/etc/ssh/ssh_host_ed25519_key.pub",
    }

    for (n, path) in pubkeys.items():
        try:
            all_keys[n] = util.load_file(path)
        except Exception:
            util.logexc(
                LOG, "%s: failed to open, can not phone home that data!", path
            )

    submit_keys = {}
    for k in post_list:
        if k in all_keys:
            submit_keys[k] = all_keys[k]
        else:
            submit_keys[k] = None
            LOG.warning(
                "Requested key %s from 'post'"
                " configuration list not available",
                k,
            )

    # Get them read to be posted
    real_submit_keys = {}
    for (k, v) in submit_keys.items():
        if v is None:
            real_submit_keys[k] = "N/A"
        else:
            real_submit_keys[k] = str(v)

    # Incase the url is parameterized
    url_params = {
        "INSTANCE_ID": all_keys["instance_id"],
    }
    url = templater.render_string(url, url_params)
    try:
        url_helper.read_file_or_url(
            url,
            data=real_submit_keys,
            retries=tries - 1,
            sec_between=3,
            ssl_details=util.fetch_ssl_details(cloud.paths),
        )
    except Exception:
        util.logexc(
            LOG, "Failed to post phone home data to %s in %s tries", url, tries
        )

Directory Contents

Dirs: 2 × Files: 64

Name Size Perms Modified Actions
schemas DIR
- drwxr-xr-x 2026-01-24 23:01:14
Edit Download
- drwxr-xr-x 2026-01-24 23:01:14
Edit Download
8.69 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
5.66 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
41.99 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
2.71 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
2.85 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
3.65 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
9.13 KB lrw-r--r-- 2026-01-23 08:56:46
Edit Download
13.77 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
2.03 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
32.36 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
3.02 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
3.39 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
21.03 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
6.65 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
3.81 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
2.38 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
3.61 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
5.31 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
1.86 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
18.14 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
6.10 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
3.49 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
19.71 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
20.84 KB lrw-r--r-- 2026-01-23 08:56:46
Edit Download
4.54 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
5.48 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
7.41 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
14.10 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
4.47 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
10.73 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
4.98 KB lrw-r--r-- 2026-01-23 08:56:46
Edit Download
16.97 KB lrw-r--r-- 2026-01-23 08:56:46
Edit Download
4.28 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
13.48 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
2.90 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
5.88 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
1.66 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
1.81 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
1.76 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
1.85 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
2.29 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
4.72 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
5.13 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
10.97 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
6.30 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
3.43 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
14.86 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
4.22 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
6.12 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
1.46 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
17.00 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
4.50 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
4.56 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
5.16 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
3.87 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
8.57 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
9.22 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
6.66 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
1.68 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
7.45 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
6.59 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
11.74 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
54.85 KB lrw-r--r-- 2023-12-04 11:47:40
Edit Download
14 B lrw-r--r-- 2023-12-04 11:47:40
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).
© 2026 REDROOM — Secure File Manager. All rights reserved. Built with ❤️ & Red Dark UI