2016-07-28 2 views
0

à l'aide nixops on peut facilement configurer des services tels que:services de remplacement dans nixpkgs pour le déploiement de nixops

{ 
    network.description = "Web server"; 
    webserver = { config, pkgs, ... }: 

    { 
    services.mysql = { 
     enable = true; 
     package = pkgs.mysql51; 
    }; 

mais je veux étendre services. par exemple en utilisant override comme fait pour pkgs ci-dessous:

let 
    myfoo = callPackage ... 
    in 
    pkgs = pkgs.override { 
    overrides = self: super: { 
     myfoo-core = myfoo; 
    }; 
    } 

question

comment faire pour services?

+0

Je ne comprendre la question. Pouvez-vous donner un exemple concret? – iElectric

Répondre

0

selon aszlig, nous pouvons le faire:

configuration.nix

{ config, lib, ... }: 

{ 
    disabledModules = [ "services/monitoring/nagios.nix" ]; 

    options.services.nagios.enable = lib.mkOption { 
    # Make sure that this option type conflicts with the one in 
    # the original NixOS module for illustration purposes. 
    type = lib.types.str; 
    default = "of course"; 
    description = "Really enable nagios?"; 
    }; 

    config = lib.mkIf (config.services.nagios.enable == "of course") { 
    systemd.services.nagios = { 
     description = "my own shiny nagios service..."; 
    }; 
    }; 
} 

l'évaluer

$ nix-instantiate --eval '<nixpkgs/nixos>' --arg configuration ./test-disable.nix -A config.systemd.services.nagios.description 
"my own shiny nagios service..." 

 

contre sans disabledModules:

$ nix-instantiate --eval '<nixpkgs/nixos>' --arg configuration ./test-disable.nix -A config.systemd.services.nagios.description 
error: The option `services.nagios.enable' in `/home/aszlig/test-disable.nix' is already declared in `/nix/var/nix/profiles/per-user/root/channels/vuizvui/nixpkgs/nixos/modules/services/monitoring/nagios.nix'. 
(use '--show-trace' to show detailed location information) 
1

Pour ajouter un service, vous devez d'abord écrire une définition de service pour votre service. C'est-à-dire, un fichier nix qui déclare les options de votre service et fournit une implémentation.

Disons que notre service est appelé foo, nous écrivons une définition de service pour lui une sauvegarde comme fichier foo.nix:

{ config, lib, pkgs, ... }: 

with lib; # use the functions from lib, such as mkIf 

let 
    # the values of the options set for the service by the user of the service 
    foocfg = config.services.foo; 
in { 
    ##### interface. here we define the options that users of our service can specify 
    options = { 
    # the options for our service will be located under services.foo 
    services.foo = { 
     enable = mkOption { 
     type = types.bool; 
     default = false; 
     description = '' 
      Whether to enable foo. 
     ''; 
     }; 

     barOption = { 
     type = types.str; 
     default = "qux"; 
     description = '' 
      The bar option for foo. 
     ''; 
     }; 
    }; 
    }; 

    ##### implementation 
    config = mkIf foocfg.enable { # only apply the following settings if enabled 
    # here all options that can be specified in configuration.nix may be used 
    # configure systemd services 
    # add system users 
    # write config files, just as an example here: 
    environment.etc."foo-bar" = { 
     text = foocfg.bar; # we can use values of options for this service here 
    }; 
    }; 

Par exemple, pour Hydra, ce fichier se trouve ici: https://github.com/NixOS/hydra/blob/dd32033657fc7d6a755c2feae1714148ee43fc7e/hydra-module.nix.

Après avoir écrit la définition du service, nous pouvons l'utiliser notre configuration principale comme ceci:

{ 
    network.description = "Web server"; 
    webserver = { config, pkgs, ... }: { 
    imports = [ ./foo.nix ]; # import our service 
    services.mysql = { 
     enable = true; 
     package = pkgs.mysql51; 
    }; 
    services.foo = { 
     enable = true; 
     bar = "hello nixos modules!"; 
    }; 
    }; 

}

Avertissement: il pourrait y avoir des fautes de frappe dans ce domaine, je ne l'ai pas testé.

+0

exactement ce dont nous avons besoin! – qknight

+0

https://github.com/NixOS/nixpkgs/issues/16884#issuecomment-238814281 – qknight