如何为 File{} 命名,以便 Puppet 上的“require”执行下一步?

如何为 File{} 命名,以便 Puppet 上的“require”执行下一步?

为文件指定别名似乎可行。例如,名为“tomcat_dir”的文件可用于后续步骤,方法是使用“ require => File["tomcat_dir"] ”:

    file {"tomcat_dir":
            ensure  => directory,
            path    => "/usr/local/tomcat",
            mode    => "755",
            owner   => "tomcat",
            group   => "65534",
            recurse => true,
            require => [ Exec["tomcat_unzip"] ],
    }

但是,如果我这样做:

    file { [ "/usr/local/tomcat", "/usr/local/tomcat/dir1", "/usr/local/tomcat/dir2", "/usr/local/tomcat/dir3", "/usr/local/tomcat/dir4"]:
            ensure  => directory,
            mode    => "755",
            owner   => "tomcat",
            group   => "65534",
            require => [ Exec["tomcat_untar"] ],
    }

我怎样才能说 Exec["test_unzip"] 需要“文件 {[“/usr/local/tomcat/dir1”,“/usr/local/tomcat/dir2”,“/usr/local/tomcat/dir3”,“/usr/local/tomcat/dir4”] ”而不复制/粘贴所有路径?

    exec {"test_unzip":
            cwd     => "/usr/local/tomcat/dir1",
            command => "/usr/bin/unzip /tmp/${tomcat_zip_name}",
            unless  => "test -f /usr/local/jboss${version}/server/boursorama-${application}/version-${container_version}",
            require => [ !!!!!!!!!!!!!!! ],
    }

因为,如果我修改了某些路径,那么我必须修改我在课堂上使用的所有“要求”!

谢谢!

答案1

做这个:

file { [ "/usr/local/tomcat", "/usr/local/tomcat/dir1", "/usr/local/tomcat/dir2", "/usr/local/tomcat/dir3", "/usr/local/tomcat/dir4"]:
        ensure  => directory,
        mode    => "755",
        owner   => "tomcat",
        group   => "65534",
        require => Exec["tomcat_untar"],
        before  => Exec['test_unzip'],
}

这样你就不用改变了test_unzip

答案2

好吧,为了保持相同的结构,您可以将目录列表声明为一个变量,然后使用该变量进行声明和要求。

但是,这听起来确实很混乱 - 为什么不让父目录(/usr/local/tomcat)需要子目录(并集体定义它们),然后让它订阅notify(或需要)父目录?execexec

语言中有很多工具可用于创建您需要的流程和依赖结构,而使用列表的强力操作可能不是最好的解决方案。

答案3

如果一个资源需要多个其他资源,则必须声明该需求。这是无法避免的。

不过,就您而言,我不明白为什么exec您指定需要超过/usr/local/tomcat/dir1

相关内容