我在 Ubuntu 18.04 上使用 Ansible 2.8 的多个剧本上看到了上述消息。为简单起见,我使用此基本剧本为单节点 Drupal 服务器复制了它。https://github.com/geerlingguy/ansible-for-devops/tree/master/drupal;该剧本在 ubuntu 的早期版本上运行良好,但不适用于 18.04,我了解默认情况下包含 python3。
我已经使用 vagrant 创建了基础机器,它显示了以下内容:
$ which python
/usr/bin/python
$ which python2
/usr/bin/python2
$ which python3
/usr/bin/python3
$ python --version
Python 2.7.15rc1
$ python2 --version
Python 2.7.15rc1
$ python3 --version
Python 3.6.7
Run Code Online (Sandbox Code Playgroud)
这似乎是在告诉我,python 2 和 python 3 都已安装,但 2.7 是默认值,因为这是对 $ python --version 的响应。
我已经尝试了本文中描述的所有建议:https : //www.rollnorocks.com/2018/12/ansible-python-and-mysql-untangling-the-mess/ 包括指定
ansible_python_interpreter=/usr/bin/python3
Run Code Online (Sandbox Code Playgroud)
但没有任何影响消息。剧本运行的编辑 -vvv 输出如下。有没有人对问题或解决方案有更多想法。
TASK [Remove the MySQL test database.] ****************************************************************************************************************************
task path: /vagrant/provisioning/playbook.yml:96
<10.1.1.11> ESTABLISH SSH CONNECTION …Run Code Online (Sandbox Code Playgroud) 我有一个关于在回调之间传递数据时将回调链接在一起的最佳方法的问题。我下面有一个示例,它可以工作,但有一个缺陷,即函数必须了解链并知道它们的位置/是否传递回调。
\n\nfunction first(data, cb1, cb2, cb3){\n console.log("first()", data);\n cb1(data,cb2, cb3);\n}\nfunction second(data, cb1, cb2) {\n console.log("second()",data);\n cb1(data, cb2);\n}\nfunction third(data, cb) {\n console.log("third()",data);\n cb(data);\n}\nfunction last(data) {\n console.log("last() ", data);\n}\nfirst("THEDATA", second, third, last); // This work OK\nfirst("THEDATA2", second, last); // This works OK\nfirst("THEDATA3", second); // This doesn\'t work as second tries to pass on a callback that doesn\'t exit.\nRun Code Online (Sandbox Code Playgroud)\n\n我可以想出很多方法来解决这个问题,但它们都涉及让被调用的函数了解正在发生的事情。但我的问题是,我\xe2\x80\x99m 处理的实际函数已经存在,如果可以避免的话,我不想修改它们。所以我想知道我是否错过了如何调用这些的技巧?
\n我正在使用 terraform 模块并将一组 default_tags 传递给子模块以实现一致的标记。如下所示,其优点是子模块继承其父模块的标签,但也可以添加自己的标签。
然而,我还想做的是能够覆盖一些继承的标签值,特别是“名称”。但我似乎无法完成这项工作。
在下面的示例中(带有 AWS 的 terraform 13.5),为任何标签指定的第一个值(例如根模块中的“scratch-test”)会向下级联到子模块,并且无法更改。因此,VPC 名称标签和子网名称标签均 =“scratch-test”。
如何覆盖子模块中的标签值?
# root variables.tf
variable "default_tags" {
type = map
default = {
environment_type = "Dev Environment"
}
}
# root main.tf
provider "aws" {
region = var.region
}
module "vpc" {
source = "../../../../scratch/tags-pattern"
vpc_name = "scratch-test"
public_subnets = ["10.0.0.0/26"]
default_tags = merge(map(
"Name", "scratch-test"
), var.default_tags)
}
Run Code Online (Sandbox Code Playgroud)
# ../../../../scratch/tags-pattern/main.tf
module "the_vpc" {
source = "../../terraform/tf-lib/network/vpc"
vpc_name = var.vpc_name
vpc_cidr = "10.0.0.0/24"
default_tags = merge(map(
"Name", …Run Code Online (Sandbox Code Playgroud) 我对我的 AWS EC2 user_data bootstrap bash 脚本做了一个小改动(仅限评论)。Terraform 已检测到这一点,现在想用新的 EC2 替换 EC2。但这是一项实时服务,我宁愿不必将其删除,备份所有数据,构建新服务器,然后恢复数据 - 只是为了让 terraform 开心!
有没有更简单的方法来解决这个问题,通过某种方式将代码/状态文件/aws 放在一起,这样我就可以使用 terraform 对环境进行其他更改,但不必担心会炸毁这台服务器?
我什至尝试从 AWS 控制台编辑用户数据,以使其符合我认为应该进行的更改,但这并没有奏效。
现在我正在使用-target特定的更改,但从长远来看这可能是不可持续的。
我正在努力理解数据在 Terraform (v0.12.12) 中传入和传出模块的方式。我有一个我认为非常简单的例子,但无法理解数据应该如何在模块之间传递。我能找到的大多数例子要么不完整,要么过时。
我创建了一个包含两个模块的简单示例。创建 vpc 和子网的网络模块,以及创建 EC2 实例的计算模块。我只是想为计算模块提供 EC2 实例应该去的子网的 ID。但我不明白:
基本结构如下
.
??? main.tf
??? modules
??? compute
? ??? main.tf
??? network
??? main.tf
??? output.tf
# main.tf
provider "aws" {
region = "eu-west-1"
}
module "m_network" {
source = "./modules/network"
}
# The problem is how to make that subnet id available to the compute module
# so the ec2 instance can be added to it?
module "m_compute" {
source …Run Code Online (Sandbox Code Playgroud)