vagrant - 带有 Ansible 的客户机上的别名

标签 vagrant alias ansible ansible-playbook

我想在通过 Vagrant 运行的 guest 计算机上添加一些别名。我的供应商是 Ansible,如果我可以在剧本中添加带有任务的别名,那就太好了,我宁愿不必修改我的 Vagrantfile

我已经在一个角色中尝试了这两个:command: alias serve='pub serve --hostname=0.0.0.0'shell: "alias serve='pub serve --hostname=0.0.0.0'"但他们都没有工作。第一个引发了一个异常,我认为它来自 ''.第二个根本不添加别名。

最佳答案

shell 选项看起来不错,但它只会为 session 创建别名。然后,当您在配置后连接到它时,它将不存在。我也不确定剧本中的其他剧本是否能够使用它,因为他们可能会使用另一个 SSH session 。

要永久添加它,您需要将其添加到相关的 .bashrc.bash_aliases (然后由 .bashrc 获取),具体取决于您的 Linux 风格/版本。

为此,您可以简单地使用:

shell: echo "alias serve='pub serve --hostname=0.0.0.0'" >> ~/.bash_aliases

但这不是幂等的,并且每次重新运行 Ansible 剧本或 Vagrant 配置(将重新运行 Ansible 剧本)都会添加重复的行。

相反,您应该将 lineinfile module 与以下内容一起使用:
- name: Add serve alias for foo user
  lineinfile:
    path=/home/foo/.bashrc
    line="alias serve='pub serve --hostname=0.0.0.0'"
    owner=foo
    regexp='^alias serve='pub serve --hostname=0.0.0.0'$'
    state=present
    insertafter=EOF
    create=True

上面的播放将在 foo 用户的 .bashrc 文件的末尾添加别名行(如果由于某种原因不存在该文件,则创建该文件)。当您重新运行它时,它会尝试匹配正则表达式值(这可能需要使用转义部分进行调整),如果匹配,它将用行值替换它。

关于vagrant - 带有 Ansible 的客户机上的别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30148076/

相关文章:

https - Fiddler 根证书位置

php - 命名空间常量和用途

sql - 是否可以为 psql 中的表创建全局别名?

mysql - 相关家庭成员的 SQL 数据库

Ansible 模块开发 argument_spec 规范

ruby-on-rails - 守卫 --listen-on with vagrant

ruby - apt Recipe 不会安装在我的 Recipe 中

laravel - 如何使用相对路径映射 Homestead.yaml 中的项目目录

ansible - 如何使用同步模块将文件复制到多个服务器

amazon-ec2 - 检索 ec2 list 时出现身份验证错误。找到了 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 环境变量,但可能不正确