小编bjh*_*end的帖子

Vagrant调用的Ansible不会提示输入保险箱密码

摘要

我有一个Vagrantfile配置一个带Ansible的Virtualbox VM.Ansible playbook包含Ansible Vault加密变量.我的问题是,虽然我通过了选项,但Vagrant配置不会提示输入密码.

最小,完整的例子

Vagrantfile:

Vagrant.configure(2) do |config|
    config.vm.provider "virtualbox" do |vb|
        # Build a master VM for this box and clone it for individual VMs
        vb.linked_clone = true
    end
    config.vm.box = "bento/ubuntu-16.04"
    config.vm.hostname = "test-vm"

    config.vm.provision :ansible do |ansible|
        ansible.verbose = true
        ansible.playbook = "playbook.yml"
        ansible.ask_vault_pass = true
#       ansible.raw_arguments = --ask-vault-pass
#       ansible.raw_arguments = ["--vault-id", "@prompt"]
#       ansible.raw_arguments = ["--vault-id", "dev@prompt"]
    end
end
Run Code Online (Sandbox Code Playgroud)

playbook.yml:

---
- name: Test
  hosts: all
  vars:
    foo: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          65306264626234353434613262613835353463346435343735396138336362643535656233393466 …
Run Code Online (Sandbox Code Playgroud)

vagrant ansible ansible-vault

6
推荐指数
1
解决办法
1229
查看次数

使 QLabel 宽度与文本无关

我需要一个QLabel其宽度不应该适应所包含的文本,但可以由用户调整大小(或者确切地说是布局)。如果文本对于宽度而言太长,QLabel则只需将其剪掉即可。

这个问题在某种程度上与How to make QLabel Expand width Geometry to Accommodation text相反 。然而,这个问题的内容对我没有帮助。在布局中的 QLabel 上设置文本也没有调整大小。

背景

QLabel显示来自另一个系统的标识符(单个单词)。有时这些标识符每秒会改变很多次,这使得整个布局闪烁。它QLabel是垂直码头的一部分,因此码头的宽度会闪烁。

另一方面,应该由用户决定他/她可以看到多少标识符。所以我想允许用户更改扩展坞的宽度,以便扩展坞的宽度QLabel适应该宽度。

解决方案尝试

为了实现这一目标,我设置了水平尺寸策略QSizePolicy::Preferred并派生了我自己的标签类,QLabel我已重写该标签类sizeHint()以返回固定尺寸。但这并没有改变行为。

我知道我可以申请QFontMetrics计算文本的宽度,然后将其剪掉以适合宽度QLabel。但这似乎不是正确的解决方案,特别是因为我希望将最后一个字母本身剪掉(如果它不完全适合),以便向用户提供标识符太长而无法显示的线索。

版本

  • Qt 5.5.1
  • 海湾合作委员会5.4.0
  • 全部来自当前的 Ubuntu 16.04 存储库

c++ qt qwidget qlabel qt5

6
推荐指数
1
解决办法
4697
查看次数

如何取消设置 CMake 属性?

概括

我想在 CMake 中取消设置一个(布尔)属性,以便get_property(... SET)返回0尽管该属性首先被设置。将属性设置为0FALSE、 或OFF是不够的。如何实现这一目标?

背景

我有一些生成一些源文件的自定义命令。CMake 会自动将GENERATED源文件属性分配给这些文件。这似乎使 GNU Makefile 生成器添加一条规则来删除这些带有make clean.

但是,我不希望清理这些文件,因为一旦它们存在,用户就可以编辑它们。自定义命令应该仅确保它们不存在时生成。在配置时使用execute_process而不是自定义命令生成它们是不可行的。

设置GENERATED0FALSE、 或OFF不会从清理中排除源。

版本

  • 操作系统:Ubuntu 16.04
  • CMake:3.5.1(来自 Ubuntu 16.04 存储库)

我目前绑定了 Ubuntu 16.04,如果可能的话,应该避免让所有用户使用更新的 CMake 版本。

cmake

3
推荐指数
1
解决办法
2919
查看次数

在条件下将which.min应用于data.table

我有一个data.table并且需要知道在给定条件下包含最小值的行的索引.简单的例子:

dt <- data.table(i=11:13, val=21:23)

#     i  val
# 1: 11   21
# 2: 12   22
# 3: 13   23
Run Code Online (Sandbox Code Playgroud)

现在,假设我想知道在这种情况val下哪一行是最小的i>=12,在这种情况下是2.

什么行不通:

dt[i>=12, which.min(val)]
# [1] 1
Run Code Online (Sandbox Code Playgroud)

返回1,因为dt[i>=12]它是第一行.

dt[i>=12, .I[which.min(val)]]
# [1] 1
Run Code Online (Sandbox Code Playgroud)

返回1,因为.I只应该用于分组.

做了什么工作:

为了.I正确应用,我添加了一个分组列:

dt[i>=12, g:=TRUE]
dt[i>=12, .I[which.min(val)], by=g][, V1]
# [1] 2
Run Code Online (Sandbox Code Playgroud)

请注意,这gNAi<12,从而which.min排除从结果组.

但是,这需要额外的计算能力来添加列并执行分组.我的生产data.table有几百万行,我必须经常找到最小值,所以我想避免任何额外的计算.

你有什么想法,如何有效地解决这个问题?

r data.table

2
推荐指数
1
解决办法
1124
查看次数

__gnu_linux__ 代表什么?

背景

我们有一些旧的 C++ 代码,其中包含只有在__gnu_linux__定义预处理器符号时才编译的部分。在我的 Ubuntu 20.04 和 GCC 9.3 上编译不是问题。现在,我们尝试将其移植到基于 Alpine Linux 和 GCC 10.2 的 Docker 容器,并发现在__gnu_linux__这种情况下未定义。

因此,我搜索了有关__gnu_linux__预处理器宏的任何文档,但在 GCC 或其预处理器 CPP 的文档中找不到任何内容。我能找到的唯一提示是以下预定义符号列表,但它没有提到任何文档:https : //sourceforge.net/p/predef/wiki/OperatingSystems/

问题

  • 我在哪里可以找到有关__gnu_linux__预处理器宏的任何官方文档?
  • GCC在什么条件下定义它?

研究至今

通过在 中进行全文搜索,/usr我获得了一些点击。一个是 Boost 头文件也查询该宏,另外两个是二进制文件cc1cc1plus. 我发现那些是分别为 C 和 C++ 实现预处理器的 GCC 的内部工具,但我找不到这些的任何官方文档。所以,我克隆了 GCC 源代码库,发现它__gnu_linux__在更改日志中只提到了一次,并且包含一些特殊的提交,用 更改了一行__gnu_linux__,但没有一个对它做出明确的声明。

c++ linux gcc preprocessor gnu

1
推荐指数
1
解决办法
105
查看次数

标签 统计

c++ ×2

ansible ×1

ansible-vault ×1

cmake ×1

data.table ×1

gcc ×1

gnu ×1

linux ×1

preprocessor ×1

qlabel ×1

qt ×1

qt5 ×1

qwidget ×1

r ×1

vagrant ×1