예제 #1
0
def install_horizon_service(state, host):
    apt.packages(
        {'Install openstack-dashboard'},
        ['openstack-dashboard'],
    )

    generate_horizon_config = files.template(
        state,
        host,
        {'Generate horizon config'},
        get_template_path('local_settings.py.j2'),
        '/etc/openstack-dashboard/local_settings.py',
    )

    server.shell(
        state,
        host,
        {'Give www-data access to the secret key'},
        'chown www-data /var/lib/openstack-dashboard/secret_key',
    )

    init.service(
        state,
        host,
        {'Restart apache2'},
        'apache2',
        restarted=generate_horizon_config.changed,
    )
예제 #2
0
def install_controller_services(state, host):
    apt.packages(
        state,
        host,
        {'Install packages'},
        [
            'apache2',
            'mariadb-server',
            'rabbitmq-server',
            'memcached',
            'python-memcache',
            'python-pymysql',
        ],
    )

    # MariaDB
    mariadb_configure = files.template(
        state,
        host,
        {'Generate MariaDB config'},
        get_template_path('mysql.cnf.j2'),
        '/etc/mysql/mariadb.conf.d/99-openstack.cnf',
    )

    init.service(
        state,
        host,
        {'Restart MariadB'},
        'mysql',
        restarted=mariadb_configure.changed,
    )

    # RabbitMQ
    server.shell(
        state,
        host,
        {'Setup RabbitMQ user'},
        (
            'rabbitmqctl add_user openstack {{ host.data.rabbitmq_password }} || true',
            'rabbitmqctl set_permissions openstack ".*" ".*" ".*"',
        ),
    )

    # Memcached
    memcached_configure = files.template(
        state,
        host,
        {'Generate memcached config'},
        get_template_path('memcached.conf.j2'),
        '/etc/memcached.conf',
    )

    init.service(
        state,
        host,
        {'Restart memcached'},
        'memcached',
        restarted=memcached_configure.changed,
    )
예제 #3
0
def install_glance_service(state, host):
    install_glance = apt.packages(
        state,
        host,
        {'Install glance'},
        ['glance'],
    )

    if install_glance.changed:
        create_database(state, host, 'glance')
        create_service_user(state, host, 'glance', 'image')
        create_service_endpoints(state, host, 'image', ':9292')

    generate_glance_api_config = files.template(
        state,
        host,
        {'Generate glance-api config'},
        get_template_path('glance-api.conf.j2'),
        '/etc/glance/glance-api.conf',
    )

    generate_glance_registry_config = files.template(
        state,
        host,
        {'Generate glance-registry config'},
        get_template_path('glance-registry.conf.j2'),
        '/etc/glance/glance-registry.conf',
    )

    server.shell(
        state,
        host,
        {'Sync the glance database'},
        'glance-manage db_sync',
    )

    should_restart_glance = (generate_glance_api_config.changed
                             or generate_glance_registry_config.changed)

    init.service(
        state,
        host,
        {'Restart glance-registry'},
        'glance-registry',
        restarted=should_restart_glance,
    )

    init.service(
        state,
        host,
        {'Restart glance-api'},
        'glance-api',
        restarted=should_restart_glance,
    )
예제 #4
0
def install_neutron_service(state, host, nova=False, placement=False):
    create_database(state, host, 'neutron')

    neutron_install = apt.packages(
        state,
        host,
        {'Install neutron network controller packages'},
        [
            'neutron-server',
            'neutron-plugin-ml2',
        ],
    )

    if neutron_install.changed:
        create_service_user(state, host, 'neutron', 'network')
        create_service_endpoints(state, host, 'network', ':9696')

    neutron_configure = files.template(
        state,
        host,
        {'Generate neutron config'},
        get_template_path('neutron-controller.conf.j2'),
        '/etc/neutron/neutron.conf',
        nova=nova,
    )

    ml2_plugin_configure = files.template(
        state,
        host,
        {'Generate neutron ml2 plugin config'},
        get_template_path('ml2_conf.ini.j2'),
        '/etc/neutron/plugins/ml2/ml2_conf.ini',
    )

    server.shell(
        {'Sync the neutron database'},
        '''
        neutron-db-manage --config-file /etc/neutron/neutron.conf \
            --config-file /etc/neutron/plugins/ml2/ml2_conf.ini \
            upgrade head
        ''',
    )

    init.service(
        state,
        host,
        {'Restart neutron-server'},
        'neutron-server',
        restarted=neutron_configure.changed or ml2_plugin_configure.changed,
    )
예제 #5
0
def install_ceilometer_service(state, host):
    ceilometer_install = apt.packages(
        state,
        host,
        {'Install ceilometer controller packages'},
        [
            'ceilometer-collector',
            'ceilometer-agent-central',
            'ceilometer-agent-notification',
            'python-ceilometerclient',
        ],
    )

    if ceilometer_install.changed:
        create_service_user(state, host, 'ceilometer', 'metering')

        create_service_user(state, host, 'gnocchi', 'metric')
        create_service_endpoints(state, host, 'metric', ':8041')

    ceilometer_configure = files.template(
        state,
        host,
        {'Generate ceilometer config'},
        get_template_path('ceilometer-controller.conf.j2'),
        '/etc/ceilometer/ceilometer.conf',
    )

    # server.shell(
    #     state, host,
    #     {'Create ceilometer resoucres in gnocchi'},
    #     'ceilometer-upgrade --skip-metering-database',
    # )

    for service in (
            'ceilometer-agent-central',
            'ceilometer-agent-notification',
            'ceilometer-collector',
    ):
        init.service(
            state,
            host,
            {'Restart {0}'.format(service)},
            service,
            restarted=ceilometer_configure,
        )
예제 #6
0
def install_nova_node(state,
                      host,
                      neutron=False,
                      placement=False,
                      ceilometer=False):
    apt.packages(
        state,
        host,
        {'Install nova-compute'},
        ['nova-compute'],
    )

    files.put(
        {'Upload interface.j2'},
        get_template_path('interfaces.j2'),
        '/etc/nova/interfaces.j2',
    )

    nova_configure = files.template(
        state,
        host,
        {'Generate nova config'},
        get_template_path('nova-node.conf.j2'),
        '/etc/nova/nova.conf',
        neutron=neutron,
        placement=placement,
        ceilometer=ceilometer,
    )

    nova_compute_configure = files.template(
        state,
        host,
        {'Generate nova-compute config'},
        get_template_path('nova-compute.conf.j2'),
        '/etc/nova/nova-compute.conf',
    )

    init.service(
        state,
        host,
        {'Restart nova-compute'},
        'nova-compute',
        restarted=nova_configure.changed or nova_compute_configure.changed,
    )
예제 #7
0
def install_ceilometer_agent(state, host):
    apt.packages(
        {'Install ceilometer-agent-compute'},
        'ceilometer-agent-compute',
    )

    ceilometer_configure = files.template(
        state,
        host,
        {'Generate ceilometer config'},
        get_template_path('ceilometer-node.conf.j2'),
        '/etc/ceilometer/ceilometer.conf',
    )

    init.service(
        state,
        host,
        {'Restart ceilometer-agent-compute'},
        'ceilometer-agent-compute',
        restarted=ceilometer_configure.changed,
    )
예제 #8
0
def install_chrony_node(state, host):
    apt.packages(
        state,
        host,
        {'Install chrony'},
        ['chrony'],
    )

    generate_chrony_config = files.template(
        state,
        host,
        {'Generate chrony config'},
        get_template_path('chrony-node.conf.j2'),
        '/etc/chrony/chrony.conf',
    )

    init.service(
        state,
        host,
        {'Restart chrony'},
        'chrony',
        restarted=generate_chrony_config.changed,
    )
예제 #9
0
def _install_agent(state, host, agent_name, template_name, config_path):
    install = apt.packages(
        state,
        host,
        {'Install {0} package'.format(agent_name)},
        [agent_name],
    )

    configure = files.template(
        state,
        host,
        {'Generate neutron {0} agent config'.format(agent_name)},
        get_template_path(template_name),
        config_path,
    )

    init.service(
        state,
        host,
        {'Restart {0}'.format(agent_name)},
        agent_name,
        restarted=install.changed or configure.changed,
    )
예제 #10
0

def on_pyinfra_success(state, host, op_hash):
    print('Success on {0} for OP: {1}!'.format(host.name, op_hash))


def on_pyinfra_error(state, host, op_hash):
    print('Error on {0} for OP: {1}!'.format(host.name, op_hash))


# Manage init systems
init.service(
    {'Ensure cron service with error callback'},
    'cron',
    running=True,
    sudo=True,
    ignore_errors=True,
    on_success=on_pyinfra_success,
    on_error=on_pyinfra_error,
)


# Execute Python locally, mid-deploy
def some_python(state, host, *args, **kwargs):
    print('connecting host name: {0}, actual: {1}'.format(
        host.name, host.fact.hostname))
    local.shell('echo "local stuff!"')


python.call(
    {'Execute some_python function'},
예제 #11
0
파일: init.py 프로젝트: ryanwersal/pyinfra
from pyinfra.modules import init

SUDO = True

init.d(
    {'Restart and enable rsyslog'},
    'rsyslog',
    restarted=True,
    enabled=True,
)

init.d_enable(
    {'Finer control on which runlevels rsyslog should run'},
    'rsyslog',
    start_levels=(3, 4, 5),
    stop_levels=(0, 1, 2, 6),
)

init.service(
    {'Enable open-vm-tools service'},
    'open-vm-tools',
    enabled=True,
)
예제 #12
0
from pyinfra.modules import init
from pyinfra_docker import deploy_docker

SUDO = True

deploy_docker(config={
    'dns': ['8.8.8.8', '8.8.4.4'],
    'debug': True,
})

init.service(
    'docker',
    running=True,
)
예제 #13
0
def install_nova_service(state, host, neutron=False, placement=False):
    create_database(state, host, 'nova')
    create_database(state, host, 'nova_api', name='nova')
    create_database(state, host, 'nova_cell0', name='nova')

    packages = [
        'nova-api',
        'nova-conductor',
        'nova-consoleauth',
        'nova-novncproxy',
        'nova-scheduler',
    ]

    if placement:
        packages.append('nova-placement-api')

    nova_install = apt.packages(
        state,
        host,
        {'Install nova compute controller packages'},
        packages,
    )

    if nova_install.changed:
        create_service_user(state, host, 'nova', 'compute')
        create_service_endpoints(state, host, 'compute',
                                 ':8774/v2.1/%\(tenant_id\)s')

        if packages:
            create_service_user(state, host, 'placement', 'placement')
            create_service_endpoints(state, host, 'placement', ':8778')

    nova_configure = files.template(
        state,
        host,
        {'Generate nova config'},
        get_template_path('nova-controller.conf.j2'),
        '/etc/nova/nova.conf',
        neutron=neutron,
        placement=placement,
    )

    server.shell(
        state,
        host,
        {'Sync the nova api database'},
        'nova-manage api_db sync',
    )

    if nova_install.changed:
        server.shell(
            state,
            host,
            {'Setup nova cells and sync db'},
            (
                'nova-manage cell_v2 map_cell0',
                'nova-manage cell_v2 create_cell --name=cell1 --verbose',
            ),
        )

    server.shell(
        state,
        host,
        {'Sync the nova database'},
        'nova-manage db sync',
    )

    for service in (
            'nova-api',
            'nova-consoleauth',
            'nova-scheduler',
            'nova-conductor',
            'nova-novncproxy',
    ):
        init.service(
            state,
            host,
            {'Restart {0}'.format(service)},
            service,
            restarted=nova_configure.changed,
        )
예제 #14
0
# Execute arbitrary shell commands
server.shell([
    'echo "Shell command"',
    'echo "My hostname is {{ host.fact.hostname }}"',
])
# and scripts
server.script(
    'files/test.sh',
)

# Manage init systems
init.service(
    'cron',
    running=True,
    sudo=True,
    ignore_errors=True,
    on_error=on_pyinfra_error,
)

# Include other files
local.include(
    'tasks/bsd_python.py',
    hosts=inventory.get_group('bsd', []),
)

# Work with facts about the remote host
# Storing this fact to avoid typing it so much (because the example targets a whole bunch
# of distros [& 2 OSs]).
distro = host.fact.linux_distribution
예제 #15
0
def install_keystone_service(state, host):
    create_database(state, host, 'keystone')

    keystone_install = apt.packages(
        state, host,
        {'Install keystone'},
        ['keystone'],
    )

    files.template(
        state, host,
        {'Generate keystone config'},
        get_template_path('keystone.conf.j2'),
        '/etc/keystone/keystone.conf',
    )

    server.shell(
        state, host,
        {'Sync the keystone database'},
        'keystone-manage db_sync',
    )

    # Bootstrap keystone: only do this if newly installed
    if keystone_install.changed:
        server.shell(
            state, host, '''
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

keystone-manage bootstrap \
     --bootstrap-password {{ host.data.admin_password }} \
    --bootstrap-admin-url http://{{ host.data.controller_host }}:35357/v3/ \
    --bootstrap-internal-url http://{{ host.data.controller_host }}:35357/v3/ \
    --bootstrap-public-url http://{{ host.data.controller_host }}:5000/v3/ \
    --bootstrap-region-id RegionOne
        ''')

    update_apache_config = files.line(
        state, host,
        {'Set ServerName in apache2 config'},
        '/etc/apache2/apache2.conf',
        'ServerName.*',
        replace='ServerName {{ host.data.ssh_hostname }}',
    )

    init.service(
        state, host,
        {'Restart apache2'},
        'apache2',
        restarted=update_apache_config.changed,
    )

    if keystone_install.changed:
        server.shell(
            state, host,
            {'Create initial projects/users/roles'},
            (
                'openstack project create --domain default service',
                'openstack project create --domain default user',
                'openstack user create --domain default --password hamble user-1',
                'openstack role create user',
                'openstack role add --project user --user user-1 user',
            ),
            env=make_admin_env(host),
        )
예제 #16
0
    linux_id = host.fact.linux_distribution['release_meta'].get('ID')
    code_name = host.fact.linux_distribution['release_meta'].get(
        'DISTRIB_CODENAME')
    print(linux_id, code_name)
    apt.repo(
        {'Add the Docker CE apt repo'},
        ('deb [arch=amd64] https://download.docker.com/linux/'
         '{} '
         '{} stable'.format(linux_id, code_name)),
        filename='docker-ce-stable',
    )

    apt.packages(
        {'Ensure Docker CE is installed'},
        [
            'docker-ce',
            'docker-ce-cli',
            'containerd.io',
        ],
        update=True,
    )

    init.service(
        {'Ensure docker service is running'},
        'docker',
        running=True,
        enabled=True,
    )

    python.call(check_docker_works)