Commit 472d63f4 authored by Felipe Pina's avatar Felipe Pina Committed by Carlos Juliano Viana
Browse files

Adiciona opção para usar o id do usuário no escalonamento de jobs

+ Usa o usuário de submissão do comando para executar o job nos escalonadores dos drivers do PBS e Slurm
+ A chave na qual o id do usuário é informado é a `csbase_command_user_id`
+ Somente é usado o id do usuário se na configuração do driver o valor da chave `allow_proxy_user` for `true`

[SOMA-4463[SOMA-4553]
parent 678a30a9
......@@ -52,7 +52,8 @@ Requisitos
+ LuaRocks 2.4.2 (ou mais recente)
+ git
**Somente para instalações no Microsoft Windows:** use o próprio Cygwin para gerenciar as dependências, com exceção do LuaRocks, que deve ser instalado conforme instruções em https://luarocks.org/.
.. attention::
**Somente para instalações no Microsoft Windows:** use o próprio Cygwin para gerenciar as dependências, com exceção do LuaRocks que deve ser instalado conforme instruções em https://luarocks.org/.
Instalação
----------
......@@ -71,13 +72,16 @@ Extrair o conteúdo do arquivo usando o comando ``tar``:
$ tar -xzf sgarest-daemon-X.Y.X.tar.gz
**Somente para instalações no Microsoft Windows:** execute os seguintes comandos LuaRocks antes de iniciar a instalação:
.. attention::
Para instalar somente para o usuário corrente use a opção ``--local`` nos comandos ``luarocks``.
.. code-block:: console
.. attention::
**Somente para instalações no Microsoft Windows:** execute os seguintes comandos LuaRocks antes de iniciar a instalação:
$ luarocks install xml CC=g++ LD=g++
$ luarocks install luaposix LDFLAGS=-no-undefined
.. code-block:: console
$ luarocks install xml CC=g++ LD=g++
$ luarocks install luaposix LDFLAGS=-no-undefined
Execute os comandos abaixo para instalar o módulo principal do SGA:
......@@ -94,7 +98,7 @@ POSIX
$ luarocks make sga-driver-posix-*.rockspec
PBS (experimental)
PBS
.. code-block:: console
......@@ -108,14 +112,6 @@ Slurm (experimental)
$ luarocks make sga-exec-*.rockspec
$ luarocks make sga-driver-slurm-*.rockspec
Instalação local ao usuário corrente
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Para instalar somente para o usuário corrente use a opção ``--local`` nos comandos ``luarocks``.
..
TODO Colocar essa mensagem como nota de roda pé e fazer referencia em todos os trecho com uso de luarocks acima.
Instalação sem conexão com a Internet
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
......@@ -129,13 +125,12 @@ Se a instalação for feita em uma máquina sem acesso a Internet, pode-se pegar
Instalação usando proxy
^^^^^^^^^^^^^^^^^^^^^^^
Para instações realizadas em máquina usando proxy para conexão à Internet siga as instruções disponóveies em https://github.com/luarocks/luarocks/wiki/LuaRocks-through-a-proxy.
Desinstalação
^^^^^^^^^^^^^
Para instalações realizadas em máquina usando proxy para conexão à Internet siga as instruções disponíveis em https://github.com/luarocks/luarocks/wiki/LuaRocks-through-a-proxy.
..
TODO Como desistalar o SGA e o LuaRocks -- e Lua se for o caso
Desinstalação
^^^^^^^^^^^^^
Configuração
^^^^^^^^^^^^
......@@ -209,7 +204,7 @@ Configuração de múltiplos SGAs
Na configuração de múltiplos SGAs é possível definir valores *default* de parâmetros no início do arquivo e sobrescrever esses valores (ou adicionar parâmetros que estão sem *default*) em cada SGA definido. Essa configuração é útil por exemplo quando é necessário gerenciar mais de uma fila de um cluster.
Cada configuração particutar a um SGA deve ser adicionado na chave ``sgas`` do arquivo de configuração, no formato:
Cada configuração particular a um SGA deve ser adicionado na chave ``sgas`` do arquivo de configuração, no formato:
.. code-block:: lua
......@@ -284,47 +279,62 @@ Os driver do SGA são responsáveis por acessar o recurso oferecidos pelo SGA. E
Segue breve descrição de cada driver, com exemplos de configurações:
sga.driver.posix
Driver para gerencia de comandos usando sistemas operacionais compatíveis com POSIX. Não possui configurações específicas
Driver para gerência de comandos usando sistemas operacionais compatíveis com POSIX. Não possui configurações específicas
sga.driver.pbs
Driver para gerencia de comandos em clusters através do TORQUE PBS. Testado com a versåo `2.5.12 <http://docs.adaptivecomputing.com/torque/2-5-12/torqueAdminGuide-2.5.12.pdf>`_. As seguintes configurações estão disponíveis:
Driver para gerência de comandos em clusters através do TORQUE PBS. Testado com a versåo `2.5.12 <http://docs.adaptivecomputing.com/torque/2-5-12/torqueAdminGuide-2.5.12.pdf>`_. As seguintes configurações opcionais podem ser definidas em ``pbs_config``:
init_dir
Diretório de trabalhado para de execução dos comandos. Recomendado usar o valor ``os.getenv("PWD")`` (qsub -d)
Diretório de trabalhado para de execução dos comandos. Recomendado usar o valor ``os.getenv("PWD")`` (``qsub -d``)
queue
Fila de execução do job. Um SGA apenas gerencia uma única fila. Para gerenciar múltiplas filas é necessário utilizar múltiplos SGAs (qsub -q)
Fila de execução do job. Um SGA apenas gerencia uma única fila. Para gerenciar múltiplas filas é necessário utilizar múltiplos SGAs (``qsub -q``)
allow_proxy_user
Ativa o uso do ``proxy user``, fazendo que os comandos sejam executados no cluster usando o mesmo usuário que fez a submissão no servidor CSBase. O valor padrão é ``false``. (qsub -P)
Ativa o uso do ``proxy user``, fazendo que os comandos sejam executados no cluster usando o mesmo usuário que fez a submissão no servidor CSBase. O valor padrão é ``false``. (``qsub -P``)
.. code-block:: lua
driver = "sga.driver.pbs"
driver_config = {
init_dir = os.getenv("HOME").."/forecast",
queue = "weather",
allow_proxy_user = false,
pbs_config = {
init_dir = os.getenv("HOME").."/forecast",
queue = "weather",
allow_proxy_user = false,
}
}
sga.driver.slurm
Driver para gerencia de comandos em clusters através do Slurm. Testado com a versão `20.02 <https://slurm.schedmd.com/documentation.html>`_. As seguintes configurações estão disponíveis:
Driver para gerência de comandos em clusters através do Slurm. Testado com a versão `20.02 <https://slurm.schedmd.com/documentation.html>`_. As seguintes configurações opcionais podem ser definidas em ``slurm_config``:
init_dir
Diretório de trabalhado para de execução dos comandos. . Recomendado usar o valor ``os.getenv("PWD")`` (sbatch -D)
Diretório de trabalhado para de execução dos comandos. . Recomendado usar o valor ``os.getenv("PWD")`` (``sbatch -D``)
queue
Fila de execução do job. b. Um SGA apenas gerencia uma única fila. Para gerenciar múltiplas filas é necessário utilizar múltiplos SGA (sbatch -p)
Fila de execução do job. b. Um SGA apenas gerencia uma única fila. Para gerenciar múltiplas filas é necessário utilizar múltiplos SGA (``sbatch -p``)
allow_proxy_user
Ativa o uso do ``proxy user``, fazendo que os comandos sejam executados no cluster usando o mesmo usuário que fez a submissão no servidor CSBase. O valor padrão é ``false``. (sbatch --uid)
Ativa o uso do ``proxy user``, fazendo que os comandos sejam executados no cluster usando o mesmo usuário que fez a submissão no servidor CSBase. O valor padrão é ``false``. (``sbatch --uid``)
proxy_user_group
Grupo a ser usado quando a opção ``allow_proxy_user`` estiver ativa. Assim a submissão do comando será feita em nome do usuário solicitante e usando o grupo informado. O valor padrão é o grupo padrão do usuário que executa o SGA. (``sbatch --gid``)
.. code-block:: lua
driver = "sga.driver.slurm"
driver_config = {
init_dir = os.getenv("HOME").."/forecast",
queue = "weather",
allow_proxy_user = true,
slurm_config = {
init_dir = os.getenv("HOME").."/forecast",
queue = "weather",
allow_proxy_user = true,
proxy_user_group = "forecasters",
}
}
Drivers que usam a biblioteca ``sga-exec`` podem configurá-la para fazer o dispáro remoto de comandos usando o protoco SSH. Segue trecho da configuração:
Ao ativar a opção ``allow_proxy_user`` é preciso adicionar o usuário que executa o SGA ao arquivo ``/etc/sudoers``, pois para usar os argumentos ``--uid`` e ``--gid`` do comando ``sbatch`` esse usuário precisa de permissão ``root``. Além disso não deve-se solicitar sua senha ao executar o comando ``sbatch``. Segue exemplo:
.. code-block::
sga_user ALL=(ALL) ALL
sga_user ALL=(ALL) NOPASSWD: /bin/sbatch
.. caution::
Somente faça alterações no arquivo ``/etc/sudoers`` através do utilitário ``visudo``.
Drivers que usam a biblioteca ``sga-exec`` podem configurá-la para fazer o disparo remoto de comandos usando o protocolo SSH. Segue trecho da configuração:
.. code-block:: lua
......@@ -336,7 +346,7 @@ Drivers que usam a biblioteca ``sga-exec`` podem configurá-la para fazer o disp
}
}
Lembrando que é necessårio ativar a autenticação por chave publica, sem senha, do usuário na máquina. Veja `Public Key authentication for SSH <https://www.ssh.com/ssh/public-key-authentication>`_ para mais detalhes.
Lembrando que é necessário ativar a autenticação por chave publica, sem senha, do usuário na máquina. Veja `Public Key authentication for SSH <https://www.ssh.com/ssh/public-key-authentication>` para mais detalhes.
Mecanismos de transferências
""""""""""""""""""""""""""""
......@@ -402,7 +412,7 @@ Para visualizar as propriedades processadas pelo SGA existe a flag ``--debug``:
$ ./sgad.sh sgad.cfg --sga_name garoa --debug
Verificando a instalação
------------------------
Em breve.
..
TODO Adicionar sessão com instruções para verificação da instalação
Verificando a instalação
------------------------
......@@ -32,8 +32,8 @@ function pbs.execute_command(self, job, cmd_string)
if self.pbs_queue then
optional_params = optional_params.." -q "..self.pbs_queue
end
if self.allow_proxy_user and job.parameters.pbs_user then
optional_params = optional_params.." -P "..job.parameters.pbs_user
if self.allow_proxy_user and (job.parameters.pbs_user or job.parameters.csbase_command_user_id) then
optional_params = optional_params.." -P "..(job.parameters.pbs_user or job.parameters.csbase_command_user_id)
end
for _, sandbox_path in ipairs(job.sandboxes) do
......@@ -46,7 +46,7 @@ function pbs.execute_command(self, job, cmd_string)
self.exec:chmod(sandbox_path, "rwxrwxrwx")
end
self.exec:write_file(script_filename, "#!/bin/sh\n"..cmd_string.."\n")
self.exec:write_file(script_filename, "#!/bin/sh\numask 002\n"..cmd_string.."\n")
local full_cmd = ("%s -N %s -V -o %s -e %s %s %s"):format(cmds.qsub, job.cmd_id, out_filename, err_filename, optional_params, script_filename)
self.logger:debug("[COMMAND] "..full_cmd)
......
......@@ -32,6 +32,8 @@ function slurm.execute_command(self, job, cmd_string)
local script_filename = self.config.runtime_data_dir.."/sbatch_"..job.jid..".script"
local out_filename = self.config.runtime_data_dir.."/sbatch_"..job.jid..".out"
local err_filename = self.config.runtime_data_dir.."/sbatch_"..job.jid..".err"
local sudo_cmd = "sudo "
local as_root = false
for _, sandbox_path in ipairs(job.sandboxes) do
local ok, err = self.exec:create_dir(sandbox_path)
......@@ -45,19 +47,29 @@ function slurm.execute_command(self, job, cmd_string)
local optional_params = ""
if self.slurm_init_dir then
optional_params = optional_params.."-D "..self.slurm_init_dir.." "
optional_params = optional_params.." -D "..self.slurm_init_dir
end
-- O equivalente de queue no slurm é partição!
if self.slurm_queue then
optional_params = optional_params.."-p "..self.slurm_queue.." "
optional_params = optional_params.." -p "..self.slurm_queue
end
if self.allow_proxy_user and job.parameters.slurm_user then
optional_params = optional_params.."--uid="..job.parameters.slurm_user.." "
if self.allow_proxy_user and (job.parameters.slurm_user or job.parameters.csbase_command_user_id) then
local gid_param = " --gid="
if self.proxy_user_group then
gid_param = gid_param..self.proxy_user_group
else
gid_param = gid_param.."$(id -g)"
end
optional_params = optional_params.." --uid="..(job.parameters.slurm_user or job.parameters.csbase_command_user_id)..gid_param
as_root = true
end
self.exec:write_file(script_filename, "#!/bin/sh\n"..cmd_string.."\n")
-- Add umask at top of the script to ensure that all files created during the
-- job's execution could be modified by the unix group members
self.exec:write_file(script_filename, "#!/bin/sh\numask 002\n"..cmd_string.."\n")
local full_cmd = ("%s --parsable -o %s -e %s %s%s"):format(cmds.sbatch, out_filename, err_filename, optional_params, script_filename)
local cmd_prefix = as_root and sudo_cmd or ""
local full_cmd = ("%s%s --parsable -o %s -e %s %s %s"):format(cmd_prefix, cmds.sbatch, out_filename, err_filename, optional_params, script_filename)
self.logger:debug("[COMMAND] "..full_cmd)
local slurmjid, stderr = self.exec:run(full_cmd)
......@@ -331,6 +343,7 @@ function slurm.new(config, logger)
init_dir = schema.Optional(schema.String),
queue = schema.Optional(schema.String),
allow_proxy_user = schema.Optional(schema.Boolean),
proxy_user_group = schema.Optional(schema.String),
}
local err = schema.CheckSchema(slurm_config, slurm_config_schema)
if err then
......@@ -346,6 +359,7 @@ function slurm.new(config, logger)
slurm_init_dir = slurm_config.init_dir or nil,
slurm_queue = slurm_config.queue or nil,
allow_proxy_user = slurm_config.allow_proxy_user or false,
proxy_user_group = slurm_config.proxy_user_group or nil,
}
return self
end
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment