Método para integrar scripts do Powershell com fluxo de trabalho não-Windows?

16

Adoro o cheiro de novas máquinas pela manhã.

Estou automatizando um fluxo de trabalho de criação de máquina que envolve vários sistemas separados em toda a minha infraestrutura, alguns dos quais envolvem scripts perl de 15 anos em hosts Solaris, sistemas PXE Booting Linux e Powershell no Windows Server 2008.

Eu posso roteirizar cada uma das partes individuais e integrar a automação do Linux e do Unix é bastante simples, mas não sei como vincular de maneira confiável os scripts do Powershell ao resto dos processos.

Eu preferiria que o processo começasse em um host Linux, já que imagino que ele acabará como um aplicativo da web que mora em um servidor Apache, mas se precisar ser iniciado no Windows, estou hesitantemente bem com isso.

Eu gostaria idealmente de algo nos moldes do psexec para que o Linux seja executado no Windows, mas a resposta nessa direção parece ser pelo Cygwin , e tanto quanto eu aprecio todo o trabalho duro que eles colocaram, ele tem Nunca me senti bem , se você sabe o que quero dizer. É ótimo para um desktop e dá muita funcionalidade, mas eu sinto que servidores Windows devem ser tratados como servidores Windows e não bastardizados máquinas Unix (que, aliás, é meu argumento contra servidores OSX, também, e eles são na verdade, Unix). De qualquer forma, eu não quero ir com o Cygwin a menos que seja a última e única opção.

Então, eu acho que estou perguntando se existe uma maneira de executar trabalhos em máquinas Windows do Linux. Sem Cygwin. Eu estou aberto a idéias e sugestões, incluindo "Olhe idiota, todo mundo usa o Cygwin, então sugue e lide com isso". Desde já, obrigado!

    
por Matt Simmons 15.10.2012 / 15:19

8 respostas

5

Eu passei horas batendo neste mesmo problema e, eventualmente, desceu para duas opções viáveis (existem muitas opções não viáveis por aí):

  1. Crie uma caixa do Windows com um serviço do IIS que hospeda um WebAPI que seja dominado e configurado de modo que as sessões do WinRM dele funcionem.
  2. Cygwin

Com a segunda opção, você está lutando contra a camada de abstração GNU / Posix para obter os bits reais do Windows. O que restringe o que você é capaz de fazer com isso.

A primeira opção praticamente cria uma camada de abstração baseada na web que você escreve sobre a instalação completa do Windows em sua pilha nativa. Se você está disposto a trabalhar, o mestre-servidor Linux só precisa fazer várias chamadas para fazer o que precisa ser feito. Isso funciona melhor quando os scripts são "ignorar e esquecer", já que criar um sistema de call-back é muito mais trabalhoso.

    
por 15.10.2012 / 15:28
3

Você também pode comprar software de programação de fluxo de trabalho ou de automação de fluxo de trabalho entre plataformas que pode lançar scripts nativos em vários hosts, dependendo das ações anteriores ou até mesmo dos resultados retornados. Grandes empresas usam software como o Tivoli, UC4, Espresso (CA dSeries, agora) que faz isso, e eu o usei em grandes empresas que precisavam fazer esse tipo de coisa. FYI, estes geralmente têm suporte nativo para coisas como trabalhos da Oracle, para lhe dar uma idéia do preço que você pode estar olhando.

(No meu trabalho anterior, eles também usavam o Cygwin , para que eles pudessem usar os mesmos scripts Perl sem modificação quando as cargas de trabalho eram movidas entre as plataformas. Muito divertido.)

Você também pode tentar criar o seu próprio, como sugere o @ sysadmin1138; seria um projeto divertido e poderia até acabar robusto o suficiente para ser utilizável e não conseguir que você paginasse as 2 da manhã quando as exportações financeiras falharem na primeira tentativa.

    
por 15.10.2012 / 15:48
3

Eu usaria o recurso Powershell Web Access introduzido no Powershell v3.0. Isso permite que você use scripts do Powershell de um host Linux.

    
por 16.10.2012 / 14:26
2
O

servidor PowerShell permite que você conecte o SSH a um servidor Windows e obtenha um console do PowerShell. Eu não o usei além do teste gratuito, mas meu uso informal provou que era um produto bastante confiável.

    
por 15.10.2012 / 15:26
2

Qual a grosseria que você quer sentir depois, porque sempre há telnet:)

Falando sério, por que você precisa do servidor Linux para chamar o script do PowerShell? Você pode redesenhar seu fluxo de trabalho para que o servidor Linux simplesmente forneça a imagem boot.wim correta via tftp para um host inicializado PXE? Eu tive boa sorte no passado mantendo uma imagem do Windows com arquivos de resposta diferentes em um servidor de arquivos do Windows e entregando uma imagem de inicialização personalizada do WinPE usando o tftpd de um host Linux. Então, você pode fazer com que o arquivo de resposta chame o script correto do PowerShell e não tenha que lidar com a falta de compatibilidade entre plataformas como o Cygwin.

    
por 15.10.2012 / 15:28
2

Você poderia usar algo como nrpe para executar remotamente o script powershell no host do Windows. Você pode querer modificar seus scripts do powershell para retornar os códigos de saída conforme esperado pelo nrpe, mas não há motivo para você não chamar o check_nrpe dos seus scripts no seu host linux.

    
por 15.10.2012 / 16:48
2

Sobre o tema dos hacks contra-intuitivos , você considerou abusar do software Continuous Integration como uma ferramenta de orquestração entre plataformas?

Instale o mestre do IC onde for mais conveniente, instale o agente na sua caixa do Windows ( ou este ou >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> "https://wiki.jenkins-ci.org/display/JENKINS/PowerShell+Plugin">um plug-in se você quiser gravar / manter seu script dentro do aplicativo CI) em seu agente do Windows e acione o trabalho remotamente via enrolar ou similar.

    
por 16.10.2012 / 13:24
0

Eu trabalho em uma grande empresa onde esse problema é comum. Para os processos que atualmente suportamos, nossa abordagem é fazer com que os sistemas Unix façam chamadas pela Web para um servidor Windows "admin" que esteja executando o ColdFusion no IIS. Temos classes e funções que são acionadas a partir de solicitações GET que usam a diretiva "cfexecute" para iniciar scripts específicos do PowerShell. É feio mas funciona. Estamos vendo os recursos do serviço da Web powershell v3 para migrar para longe do ColdFusion que atua como intermediário.

    
por 27.10.2012 / 08:02