示例#1
0
文件: step3.py 项目: Prygan/enoslib
def up(force, env=None, **kwargs):
    """Starts a new experiment using vagrant"""
    inventory = os.path.join(os.getcwd(), "hosts")
    conf = Configuration.from_dictionnary(provider_conf)
    provider = Enos_vagrant(conf)
    roles, networks = provider.init(force_deploy=force)
    discover_networks(roles, networks)
    env["roles"] = roles
    env["networks"] = networks
示例#2
0
    }
}

tc = {"enable": True, "default_delay": "20ms", "default_rate": "1gbit"}
inventory = os.path.join(os.getcwd(), "hosts")
print("Starting ressources with the provider vagrant")
provider = Enos_vagrant(VagrantConf.from_dictionnary(provider_conf))
roles, networks = provider.init()
print("Building the machine list")
resources = {"machines": [], "networks": []}

for role, machines in roles.items():
    for machine in machines:
        resources["machines"].append({
            "address": machine.address,
            "alias": machine.alias,
            "user": machine.user,
            "port": int(machine.port),
            "keyfile": machine.keyfile,
            "roles": [role],
        })

resources["networks"] = networks

provider = Static(StaticConf.from_dictionnary({"resources": resources}))
roles, networks = provider.init()
discover_networks(roles, networks)
netem = Netem(tc, roles=roles)
netem.deploy()
netem.validate()
示例#3
0
def setup_galera(rs: Roles, nets: List[Network]):
    '''Installs and configures Galera'''
    galera_ansible_path = 'misc/deploy-galera.yml'

    discover_networks(rs, nets)
    run_ansible([galera_ansible_path], roles=rs)
示例#4
0
def monitor(rs: Roles, nets: List[Network]):
    '''Fig4. Reusable function for monitoring.

    Collect metrics on `monitored` hosts. Store and see metrics on
    `aggregator` hosts. Use the `monitor` network to send metrics.

    '''
    # Discover networks to use net info in telegraf.conf.j2
    discover_networks(rs, nets)

    # Install Docker
    with play_on(pattern_hosts="all", roles=rs) as ansible:
        ansible.shell(
            "which docker || (curl -sSL https://get.docker.com/ | sh)",
            display_name="Install docker")
        ansible.apt(
            display_name="Install python-docker (for ansible docker_container)",
            name="python-docker", update_cache=True)

    # Install Telegraf on monitored machines
    with play_on(pattern_hosts="monitored", roles=rs, gather_facts="all") as ansible:
        ansible.template(
            display_name="Generating Telegraf conf",
            src="misc/telegraf.conf.j2",
            dest="/root/telegraf.conf")
        ansible.docker_container(
            display_name="Installing Telegraf",
            name="telegraf", image="telegraf:1.12-alpine",
            detach=True, network_mode="host", state="started",
            volumes=['/root/telegraf.conf:/etc/telegraf/telegraf.conf'])

    # Install InfluxDB and Grafana on `aggregator` machines
    with play_on(pattern_hosts="aggregator", roles=rs) as ansible:
        ansible.docker_container(
            display_name="Install InfluxDB",
            name="influxdb", image="influxdb:1.7-alpine",
            detach=True, state="started", network_mode="host",
            exposed_ports="8086:8086")
        ansible.wait_for(
            display_name="Waiting for InfluxDB to be ready",
            host="localhost", port="8086", state="started",
            delay=2, timeout=120,)

        ansible.docker_container(
            display_name="Install Grafana",
            name="grafana", image="grafana/grafana:5.4.3",
            detach=True, state="started", network_mode="host",
            exposed_ports="3000:3000")
        ansible.wait_for(
            display_name="Waiting for Grafana to be ready",
            host="localhost", port="3000", state="started",
            delay=2, timeout=120,)
        ansible.uri(
            display_name="Add InfluxDB in Grafana",
            url="http://localhost:3000/api/datasources",
            user="******", password="******", force_basic_auth=True,
            body_format="json", method="POST",
            status_code=[200,409], # 409 for already added
            body=json.dumps({
                "name": "telegraf", "type": "influxdb",
                "url": "http://localhost:8086",
                "access": "proxy", "database": "telegraf",
                "isDefault": True}))
        ansible.uri(
            display_name="Import dashboard in Grafana",
            url="http://localhost:3000/api/dashboards/import",
            user="******", password="******", force_basic_auth=True,
            body_format="json", method="POST",
            status_code=[200], # 409 for already added
            src="misc/grafana-dashboard.json")

    # Display UI URLs to view metrics
    ui_urls = map(lambda h: f'http://{h.extra["monitor_ip"]}:3000', rs['aggregator'])
    LOG.info(f'View UI on {list(ui_urls)}')
    LOG.info('Connect with `admin` as login and password, '
             'then skip the change password, '
             'and finally select `Host Dashboard`.')