Recurso nxFile de DSC para LinuxDSC for Linux nxFile Resource

O recurso nxFile na Configuração de Estado Desejado (DSC) do PowerShell fornece um mecanismo para gerenciar arquivos e diretórios em um nó do Linux.The nxFile resource in PowerShell Desired State Configuration (DSC) provides a mechanism to to manage files and directories on a Linux node.

SintaxeSyntax

nxFile <string> #ResourceName
{
    DestinationPath = <string>
    [ SourcePath = <string> ]
    [ Ensure = <string> { Absent | Present }  ]
    [ Type = <string> { directory | file | link } ]
    [ Contents = <string> ]
    [ Checksum = <string> { ctime | mtime | md5 }  ]
    [ Recurse = <bool> ]
    [ Force = <bool> ]
    [ Links = <string> { follow | manage } ]
    [ Group = <string> ]
    [ Mode = <string> ]
    [ Owner = <string> ]
    [ DependsOn = <string[]> ]

}

PropriedadesProperties

PropriedadeProperty DescriçãoDescription
DestinationPathDestinationPath Especifica o local onde você deseja garantir o estado de um arquivo ou diretório.Specifies the location where you want to ensure the state for a file or directory.
SourcePathSourcePath Especifica o caminho do qual o recurso de arquivo ou pasta deve ser copiado.Specifies the path from which to copy the file or folder resource. Esse caminho poderá ser um caminho local ou uma URL http/https/ftp.This path may be a local path, or an http/https/ftp URL. Há suporte para URLs http/https/ftp remotas apenas quando o valor da propriedade Type é file.Remote http/https/ftp URLs are only supported when the value of the Type property is file.
EnsureEnsure Determina se é necessário verificar se o arquivo existe.Determines whether to check if the file exists. Defina essa propriedade como "Present" para garantir que o arquivo exista.Set this property to "Present" to ensure the file exists. Defina-a como "Absent" para garantir que o arquivo não exista.Set it to "Absent" to ensure the file does not exist. O valor padrão é "Present".The default value is "Present".
TipoType Especifica se o recurso que está sendo configurado é um diretório ou um arquivo.Specifies whether the resource being configured is a directory or a file. Defina essa propriedade como "directory" para indicar que o recurso é um diretório.Set this property to "directory" to indicate that the resource is a directory. Defina-a como "file" para indicar que o recurso é um arquivo.Set it to "file" to indicate that the resource is a file. O valor padrão é "file"The default value is "file"
ConteúdoContents Especifica o conteúdo de um arquivo, como uma cadeia de caracteres específica.Specifies the contents of a file, such as a particular string.
Soma de verificaçãoChecksum Define o tipo que deve ser usado para determinar se dois arquivos são iguais.Defines the type to use when determining whether two files are the same. Se Checksum não for especificado, somente o nome de arquivo ou diretório será usado para comparação.If Checksum is not specified, only the file or directory name is used for comparison. Os valores são: "ctime", "mtime" ou "md5".Values are: "ctime", "mtime", or "md5".
RecurseRecurse Indica se subdiretórios são incluídos.Indicates if subdirectories are included. Defina essa propriedade como $true para indicar que você deseja que subdiretórios sejam incluídos.Set this property to $true to indicate that you want subdirectories to be included. O padrão é $false.The default is $false. Observação: essa propriedade é válida somente quando a propriedade Type é definida como directory.Note: This property is only valid when the Type property is set to directory.
ForceForce Determinadas operações de arquivo (como substituição de um arquivo ou exclusão de um diretório que não esteja vazio) resultarão em erro.Certain file operations (such as overwriting a file or deleting a directory that is not empty) will result in an error. O uso da propriedade Force substitui esses erros.Using the Force property overrides such errors. O valor padrão é $false.The default value is $false.
LinksLinks Especifica o comportamento desejado para links simbólicos.Specifies the desired behavior for symbolic links. Defina essa propriedade como "follow" para seguir links simbólicos e agir sobre o destino de links (por exemplo,Set this property to "follow" to follow symbolic links and act on the links target (for example. copiar o arquivo em vez do link).copy the file instead of the link). Defina essa propriedade como "manage" para agir sobre o link (por exemplo,Set this property to "manage" to act on the link (for example. copiar o próprio link).copy the link itself). Defina essa propriedade como "ignore" para ignorar links simbólicos.Set this property to "ignore" to ignore symbolic links.
GrupoGroup O nome do Grupo que será proprietário do arquivo ou diretório.The name of the Group to own the file or directory.
ModoMode Especifica as permissões desejadas para o recurso, na notação octal ou simbólica.Specifies the desired permissions for the resource, in octal or symbolic notation. (por exemplo, 777 ou rwxrwxrwx).(for example, 777 or rwxrwxrwx). Se usar notação simbólica, não forneça o primeiro caractere que indica o diretório ou arquivo.If using symbolic notation, do not provide the first character which indicates directory or file.
DependsOnDependsOn Indica que a configuração de outro recurso deve ser executada antes de ele ser configurado.Indicates that the configuration of another resource must run before this resource is configured. Por exemplo, se a ID do bloco de script de configuração do recurso que você deseja executar primeiro for ResourceName e seu tipo for ResourceType, a sintaxe para usar essa propriedade será DependsOn = "[ResourceType]ResourceName".For example, if the ID of the resource configuration script block that you want to run first is ResourceName and its type is ResourceType, the syntax for using this property is DependsOn = "[ResourceType]ResourceName".

Informações adicionaisAdditional Information

Linux e Windows usam diferentes caracteres de quebra de linha em arquivos de texto por padrão; isso pode causar resultados inesperados ao configurar alguns arquivos em um computador Linux com nxFile.Linux and Windows use different line break characters in text files by default, and this can cause unexpected results when configuring some files on a Linux computer with nxFile. Há várias maneiras de gerenciar o conteúdo de um arquivo do Linux e, ao mesmo tempo, evitar problemas causados por caracteres de quebra de linha inesperada:There are multiple ways to manage the content of a Linux file while avoiding issues caused by unexpected line break characters:

Etapa 1: copie o arquivo de uma origem remota (http, https ou ftp): crie um arquivo em Linux com o conteúdo desejado e prepare-o em m servidor da web ou ftp acessível com o(s) nó(s) que vai configurar.Step 1: Copy the file from a remote source (http, https, or ftp): create a file on Linux with the desired contents, and stage it on a web or ftp server accessible the node(s) you will configure. Defina a propriedade SourcePath no recurso nxFile com a URL da web ou do ftp para o arquivo.Define the SourcePath property in the nxFile resource with the web or ftp URL to the file.

Import-DSCResource -Module nx
Node $Node
{
nxFile resolvConf
{
    SourcePath = "http://10.185.85.11/conf/resolv.conf"
    DestinationPath = "/etc/resolv.conf"
    Mode = "644"        
    Type = "file"

}

}

Etapa 2: leia o conteúdo do arquivo no script do PowerShell com Get-Content depois de definir a propriedade $OFS para usar o caractere de quebra de linha do Linux.Step 2: Read the file contents in the PowerShell script with Get-Content after setting the $OFS property to use the Linux line-break character.

Import-DSCResource -Module nx
Node $Node
{
$OFS = "`n"
$Contents = Get-Content C:\temp\resolv.conf

nxFile resolvConf
{
    DestinationPath = "/etc/resolv.conf"
    Mode = "644"        
    Type = "file"
    Contents = "$Contents"
}

}

Etapa 3: use uma função do PowerShell para substituir as quebras de linha do Windows com caracteres de quebra de linha do Linux.Step 3: Use a PowerShell function to replace Windows line breaks with Linux line-break characters.

Function LinuxString($inputStr){
    $outputStr = $inputStr.Replace("`r`n","`n")
    $ouputStr += "`n"
    Return $outputStr
}

Import-DSCResource -Module nx
Node $Node
{

$Contents = @'
search contoso.com
domain contoso.com
nameserver 10.185.85.11
'@

$Contents = LinuxString $Contents

nxFile resolvConf
{
    DestinationPath = "/etc/resolv.conf"
    Mode = "644"        
    Type = "file"
    Contents = $Contents

}
}

ExemploExample

O exemplo a seguir garante que o diretório /opt/mydir exista e que um arquivo com conteúdo especificado exista nesse diretório.The following example ensures that the directory /opt/mydir exists, and that a file with specified contents exists this directory.

Import-DSCResource -Module nx 

Node $node {
nxFile DirectoryExample
{
   Ensure = "Present"
   DestinationPath = "/opt/mydir"
   Type = "Directory"
}

nxFile FileExample
{
    Ensure = "Present"
    Destinationpath = "/opt/mydir/myfile"
    Contents=@"
#!/bin/bash`necho "hello world"`n
"@ 
    Mode = “755”
    DependsOn = "[nxFile]DirectoryExample"
} 
}