我可以直接注册一个命令的输出作为一个布尔值吗?

我有一些代码检查存在的东西。 如果它有2行,这意味着post存在。 我可以在第一个任务中立即将检查variables注册为布尔值,而不是需要在第二个任务中投入? 我目前的解决scheme

- name: Check if home page has been created sudo_user: www-data shell: wp post list --post_type=page --post_title=Home --post_status=publish chdir={{wordpress_path}} register: is_homepage_created - name: Booleanize homepage check set_fact: is_homepage_created={{is_homepage_created.stdout_lines|length >= 2}} 

我不这么认为,因为你需要使用set_fact来设置它的实际输出以外的东西,我不认为shell可以直接返回一个布尔值。

我相信这样做的通常方法是复制你在“布尔化”任务中使用事实的条件,这是你可以理解的要避免的事情。 不幸的是,寄存器function相当简单。

你也许可以使用failed_whenfailed_when ignore_errors: yes的组合来实现这样的function,但是这么做会导致运行shell命令映射到一个布尔型或其他布尔型失败,所以我不会推荐它。

一些围绕wp玩弄后,我无法得到它实际上筛选后标题的输出。 它总是显示每个页面的列表。 这可能与你无关,但可能。

鉴于这个明显的错误,我会重写剧本如下:

首先,以CSV格式输出wp ,这将更容易处理。 然后检查是否在其中出现所需的输出。 在CSV格式中,如果存在一个名为Home的页面,那么string,Home,将出现在输出中,并且不应与其他任何内容匹配,所以这就是我们要查找的内容。

 - name: Get list of WordPress pages sudo_user: www-data command: wp post list --post_type=page --post_title=Home --post_status=publish --format=csv chdir={{wordpress_path}} register: wordpress_pages - name: Create the homepage if it doesn't exist sudo_user: www-data command: wp post create --post_type=page --post_title=Home --porcelain chdir={{wordpress_path}} when: "',Home,' not in wordpress_pages.stdout" 

最后,除非你确实需要通过shell传递命令,否则最好使用command而不是shell。