• Dimitris Aragiorgis's avatar
    Huuuuge snf-deploy refactor · df284363
    Dimitris Aragiorgis authored
    Introduce the concept of Roles and Components.
    Roles are ns, mq, db, nfs, astakos, cyclades, pithos, cms, stats,
    ganeti, master, and client.
    Each role consists of various SynnefoComponents which  should define:
    * commands to check installation prerequisites (check)
    * packages to install (REQUIRED_PACKAGES)
    * commands to prepare installation (prepare)
    * configuration templates (configure)
    * reload commands (restart)
    * initialization commands (initialize)
    * test commands (test)
    SynnefoComponents are unaware of fabric environment. They
    get initialized with a Host object and a Env object.
    Host includes all the necessary info for the installation node
    (ip, hostname, alias, fqdn..) and Env includes all the configuration info
    (created after parsing config files)
    After defining components, fabfile should just do the following:
    def setup_somerole_role():
    In case you want to run a component's specific method just run
    RunComponentMethod(SomeComponent, "method_name", *args, **kwargs)
    During a role setup you might have to retrieve info from other
    components already installed (user token, backend id, etc.) Use
    'execute' fabric method and fill env object with required info.
    Make deployment re-entrant.
    Check if specific component is already installed and if yes then skip it.
    Currently this is done on node/component level. The component's
    status on a target node is either ok or nothing.
    Introduce conflicting components.
    Two components might not be able/or should not coexist in the same
    node, e.g. NFS and Mount. These conflicts are defined in CONFLICTS
    dict in roles.py.
    Sync ci and deploy conf files.
    ci: Change node's password in nodes.conf
    Always enable CSRF. Install CMS only if it resides on different
    node than pithos, cyclades and astakos.
    Add copyright headers.
    Signed-off-by: default avatarDimitris Aragiorgis <dimara@grnet.gr>