Documentação
Cenário de utilização do exemplo
O Alon quer atualizar todos os TurnKey Linux appliances com as últimas atualizações de segurança.
Ele escreve um script que aceita o nome de um appliance como argumento, baixa a versão mais recente do Sourceforge, extrai o sistema de arquivos raiz, instala a segurança atualiza, reembala o sistema de arquivos raiz em um appliance ISO e envia uma nova versão do appliance de volta para Sourceforge.
Depois de testar o script em sua estação de trabalho local do Ubuntu, ele pede ao Hub para lançar uma nova instância TurnKey Core (88.1.2.3), transfere seu script e instala qualquer dependência Uma vez que tudo é testado para funcionar, ele cria um novo backup TKLBAM com captura o estado de seu servidor de trabalho mestre.
O Alon executa o seu primeiro teste de tarefa na nuvem:
echo core | cloudtask --workers=88.1.2.3 refresh-iso-security-updates
Uma vez que ele confirma que este único teste funcionou corretamente, ele está pronto para o grande trabalho em lote que irá funcionar em 10 servidores em paralelo.
Como esta é uma tarefa de rotina, o Alon espera repetir regularmente, ele cria um modelo de tarefa de nuvem pré-configurado para ele em $HOME/cloudtasks:
$ mkdir $HOME/cloudtasks
$ cd $HOME/cloudtasks
$ cat > refresh-iso << 'EOF'
from cloudtask import Task
class RefreshISO(Task):
DESCRIPTION = "This task refreshes security updates on an ISO"
BACKUP_ID = 123
COMMAND = 'refresh-iso-security-updates'
SPLIT = 10
REPORT = 'mail: cloudtask@example.com alon@example.com liraz@example.com'
HUB_APIKEY = 'BRDUKK3WDXY3CFQ'
RefreshISO.main()
EOF
$ chmod +x ./refresh-iso
$ cat $PATH_LIST_APPLIANCES | ./refresh-iso
About to launch 10 cloud servers to execute the following task:
Parameter Value
--------- -----
jobs 40 (appengine .. zimbra)
command refresh-iso-security-updates
hub-apikey 5YGVPEMHJHU5EA
ec2-region us-east-1
ec2-size m1.small
ec2-type s3
user root
backup-id 123
workers -
overlay -
post -
pre -
timeout -
report mail: cloudtask@turnkeylinux.org liraz@turnkeylinux.org
Is this really what you want? [yes/no] yes
session 11 (pid 29709)
88.178.132.231 (29721): launched new worker
88.214.141.175 (29722): launched new worker
88.15.179.7 (29724): launched new worker
88.229.38.128 (29723): launched new worker
...
45 minutos depois, Alon recebe um e-mail da tarefa na nuvem que o trabalho terminou. No corpo está o registro de sessão detalhando se erros foram detectados em qualquer trabalho (por exemplo, não-zero exitcode), quanto tempo a sessão levou para ser executada, etc.
Se quisesse, Alon poderia ter seguido a execução dos trabalhos em tempo real seguindo os arquivos de registro do trabalhador:
tail -f ~/.cloudtask/11/workers/29721