AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-8032

bignose's questions

Martin Hope
bignose
Asked: 2021-08-23 14:31:50 +0800 CST

在同一映射中交叉引用 Ansible 变量

  • 3

如何定义一个 Ansible 变量,其值是同一映射结构中的另一个变量?

为了允许变量的合理命名空间,我定义了这样的映射结构,其中一些值依赖于同一结构中的其他变量:

acme:
  directory:
    hostname: "acme-staging-v02.api.letsencrypt.org"
letsencrypt:
  config_dir: "/etc/letsencrypt"
  keys_dir: "{{ letsencrypt.config_dir }}/keys"
  csrs_dir: "{{ letsencrypt.config_dir }}/csr"
  certs_dir: "{{ letsencrypt.config_dir }}/certs"
  accounts_dir: "{{ letsencrypt.config_dir }}/accounts"
  csr_file: "{{ letsencrypt.csrs_dir }}/{{ site_domain }}.csr"
  account_key_file: "{{ letsencrypt.csrs_dir }}/{{ acme.directory.hostname }}"
  email_address: "certificate-reminders@{{ site_domain }}"

这失败了,因为 Ansible 无法解析在同一数据结构中引用其他值的值:

在模板字符串中检测到递归循环:{{letsencrypt.config_dir }}/keys

所以我认为查找vars将允许推迟该解决方案:

acme:
  directory:
    hostname: "acme-staging-v02.api.letsencrypt.org"
letsencrypt:
  config_dir: "/etc/letsencrypt"
  keys_dir: "{{ lookup('vars', 'letsencrypt.config_dir') }}/keys"
  csrs_dir: "{{ lookup('vars', 'letsencrypt.config_dir') }}/csr"
  certs_dir: "{{ lookup('vars', 'letsencrypt.config_dir') }}/certs"
  accounts_dir: "{{ lookup('vars', 'letsencrypt.config_dir') }}/accounts"
  csr_file: "{{ lookup('vars', 'letsencrypt.csrs_dir') }}/{{ site_domain }}.csr"
  account_key_file: >-
    {{ lookup('vars', 'letsencrypt.csrs_dir') }}/{{ acme.directory.hostname }}
  email_address: "certificate-reminders@{{ site_domain }}"

这失败了,因为 Ansible 正在尝试立即解决该查找:

未找到具有此名称的变量:letsencrypt.config_dir


当然我可以把它们分开,所以它们是单独的变量。但是,这违背了我将强相关变量全部分组在同一个命名空间中的目的。

那么什么将允许我定义数据结构,以便某些值可以依赖于同一结构中的其他变量?

ansible yaml
  • 1 个回答
  • 771 Views
Martin Hope
bignose
Asked: 2021-08-22 01:42:33 +0800 CST

任务文件,带有共享指令

  • 0

如何在仅包含任务的 Ansible 剧本片段文件中设置文件中所有任务之间共享的指令?

# ansible/inventory/roles/os_packages/tasks/main.yaml

- name: "APT: Update available packages from Debian repositories"
  gather_facts: false
  become: true
  become_user: root
  apt:
    update_cache: true
- name: "APT: Install required packages"
  gather_facts: false
  become: true
  become_user: root
  apt:
    name:
      - foo
      - bar

那些重复的指令—— gather_facts,become等——应该在该文件中声明一次。但是在哪里,因为(目前?)没有代表角色或扮演的文件?

# ansible/inventory/roles/os_packages/tasks/main.yaml

# This doesn't work because Ansible is expecting only tasks.
gather_facts: false
become: true
become_user: root

- name: "APT: Update available packages from Debian repositories"
  apt:
    update_cache: true
- name: "APT: Install required packages"
  apt:
    name:
      - foo
      - bar

该文件只需包含一系列任务;“角色”级别或“播放”级别似乎在这个推荐的目录结构中没有合适的位置。

如果整个剧本都在一个文件中,那么每个剧本都有自己单独的名称,我会在剧本上设置指令。但是这些任务文件正在收集和编译,我没有地方可以编写这些指令。

应该在哪里定义适用于角色中所有任务的指令?

ansible
  • 3 个回答
  • 87 Views
Martin Hope
bignose
Asked: 2021-07-09 00:12:00 +0800 CST

在 Ansible 连接上以网络服务器用户身份运行 NextCloud PHP 脚本“occ”

  • 1

如何编写Ansible 任务以作为第三用户运行 PHP 脚本;不是root用户也不是连接用户,而是“webserver”用户?

occ根据文档,NextCloud 管理程序必须以网络服务器用户身份运行:

sudo -u www-data php occ

为了成为运行命令的不同用户,Ansible 提供了该become功能。Ansible 文档强烈建议不要尝试以不同的非 root 用户身份运行命令:

如果模块文件在不使用的情况下执行,则一切都很好become,当become_user是 root 时,或者当与远程计算机的连接以 root 身份建立时。在这些情况下,Ansible 创建的模块文件的权限只允许用户和 root 读取,或者只允许切换到的非特权用户读取。

但是,当连接用户和become_user都是非特权用户时,模块文件被写入为 Ansible 连接的用户 (the remote_user),但该文件需要被 Ansible 设置为的用户可读。

用于become_user该用户

连接用户sudo有权作为第三个用户运行命令:

$ sudo -u www-data whoami
www-data

当我become_user在任务上使用时,以该用户身份运行命令:

- name: "NextCloud: Instance configuration"
  become_user: "{{ web_process_user }}"
  command:
    cmd: >-
        php "{{ apache_nextcloud_dir }}/occ" maintenance:install
            --no-interaction
            …

更新:嗯,它有效。我不知道发生了什么变化,但在尝试重现问题时,它停止了。

作为该用户使用shell显式sudo调用

当我使用命令配置 Ansible 任务时shell:

shell: >-
    su '{{ web_process_user }}' --shell '/bin/bash' -c ' \
        php "{{ apache_nextcloud_dir }}/occ" …

Ansible 抱怨:

[警告]:考虑使用 'become'、'become_method' 和 'become_user' 而不是运行 su

我很乐意这样做。Ansiblebecome将是一种比这种shell: suhack 更优雅的方式。

但是在使用 时become,会出现 Ansible 文档中描述的问题:通过连接发送的用于运行该命令的任务模块,无法获得创建其临时文件的权限。

Ansible 文档建议:

  • “使用流水线”:这失去了默认任务模块系统的优势。
  • “避免成为非特权用户”:不是一个选项,因为正确运行此命令需要非特权网络服务器用户。

我应该如何制作一个以非特权第三用户身份运行的 Ansible 任务?php "{{ apache_nextcloud_dir }}/occ" {{ web_process_user }}

更新:该become功能现在似乎可以正常工作。

nextcloud ansible
  • 1 个回答
  • 320 Views
Martin Hope
bignose
Asked: 2020-08-26 14:35:46 +0800 CST

显示正确格式化的 Ansible playbook 输出

  • 4

需要什么配置才能正确格式化 Ansibleansible-playbook运行中任务的标准流输出?

我ansible-playbook foo.yaml从任务中运行的输出包括标准流 ( stdout, stderr) 内容。但是这些显示在一个大的 JSON 单行 blob 中,而不是作为发送到流的格式化行打印。

TASK [Django: Collect media fixture files] ******************************************************************************
ok: [lorem]

TASK [Django: Create superuser] ******************************************************************************
fatal: [lorem]: FAILED! => {"changed": false, "cmd": "python3 -m django createsuperuser\n  --noinput\n  --username \"admin\"\n  --email \"[email protected]\"", "msg": "\n:stderr: CommandError: You must use --full_name with --noinput.\n", "path": "/var/local/dolor/virtualenv/rectory/venv.py3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/games", "syspath": ["/tmp/ansible_django_manage_payload_uj9f3le8/ansible_django_manage_payload.zip", "/usr/lib/python37.zip", "/usr/lib/python3.7", "/usr/lib/python3.7/lib-dynload", "/usr/local/lib/python3.7/dist-packages", "/usr/lib/python3/dist-packages"]}

是什么导致了这种不需要的输出格式?如何告诉 Ansible 始终正确格式化流输出以在ansible-playbook输出中显示?

logging ansible
  • 1 个回答
  • 9737 Views
Martin Hope
bignose
Asked: 2016-12-15 16:13:59 +0800 CST

在启动时丢弃不一致的文件系统

  • 3

我可以使用哪种 Linux 文件系统类型在启动时不尝试恢复不一致,而是丢弃它们(释放空间)并快速挂载?

我有一个应用程序使用大量空间来缓存其结果。缓存并不珍贵;当启动时检测到不一致时,我宁愿内核快速释放空间并继续安装卷。

这是“tmpfs”卷的功能之一,但卷的大小太大而无法为此消耗 RAM。速度(安装卷之后)不是主要标准,因此更慢和更大的存储是首选。

缓存当前是默认的“ext4”文件系统类型。在挂载时解决不一致的延迟并不麻烦,但它是不必要的(可以简单地释放空间),所以我宁愿避免它。

与其探索为什么要这样做,我想知道什么文件系统类型具有这些属性,以便我知道这个选项的可行性。

我可以为此使用 Linux 支持的文件系统类型吗?

linux cache filesystems
  • 2 个回答
  • 123 Views
Martin Hope
bignose
Asked: 2009-06-09 20:45:57 +0800 CST

查找和重命名名称编码错误的文件系统条目

  • 1

在各种文件系统上,我有一堆名称编码错误的文件系统条目(它们是用错误的字符编码编写的)。

如何自动列出名称对当前字符编码无效的所有条目?

找到所有这些条目后,如何自动将它们从一种编码重命名为另一种编码?

filesystems
  • 1 个回答
  • 456 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve