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
    • 最新
    • 标签
主页 / server / 问题

问题[yaml](server)

Martin Hope
aks
Asked: 2022-01-08 01:30:26 +0800 CST

挂载持久卷时,Kubernetes pod 中的内容为空

  • 2

持久卷声明和持久卷 yaml 文件

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/datatypo"


---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-claim
spec:
  storageClassName: manual
  volumeName: my-volume
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

部署 yaml 文件

apiVersion: v1
kind: Service
metadata:
  name: typo3
  labels:
    app: typo3
spec:
  type: NodePort
  ports:
    - nodePort: 31021
      port: 80
      targetPort: 80
  selector:
    app: typo3
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: typo3
spec:
  selector:
    matchLabels:
      app: typo3
  replicas: 1
  template:
    metadata:
      labels:
        app: typo3
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: app
                operator: In
                values:
                - typo3
      containers:
      - image: image:typo3
        name: typo3
        imagePullPolicy: Never
        ports:
        - containerPort: 80
        volumeMounts:
         - name: my-volume
           mountPath: /var/www/html/
      volumes:
           - name: my-volume
             persistentVolumeClaim:
                 claimName: my-claim

注意:如果未添加持久卷,则内容显示在 pod 内(在 中var/www/html)。但是在添加持久卷之后,它不会显示同一文件夹和外部挂载路径中的任何内容/mnt/datatypo。

cloud docker kubernetes yaml
  • 1 个回答
  • 544 Views
Martin Hope
Alexander Sofianos
Asked: 2021-10-31 23:59:24 +0800 CST

Docker 私有注册表作为 kubernetes pod - 已删除的图像自动重新创建

  • 0

我将 docker 私有注册表 v2.7.0 作为具有服务和持久卷的 kubernetes pod 运行,这要感谢 Varun Kumar G 教程,这是我设置中唯一成功的方法,让 kubernetes 从我的私有 docker 注册表中提取我的3 个节点 - 本地 - 带有 ubuntu 20.04 lts kvms 的集群。

问题在于从 kubernetes pod docker registry v2.7.0 中删除图像(必须使用以前的版本,因为最新的 v2.7.1 不适用于 htpasswd)。此外,我已经阅读了很多类似的主题,例如this、this和this。

使用 docker registry v2.7.1作为 docker 容器运行,我可以毫无问题地删除图像,

但是使用 docker registry v2.7.0作为 kubernetes pod运行,通常的删除步骤导致无法再次推送已删除的映像,即使在成功删除 blob 并手动删除/var/lib/registry/docker/registry/v2/repositories/.

下面是注册表 pod yaml

apiVersion: v1
kind: Pod
metadata:
  name: dockreg-pod
  labels:
    app: mregistry
spec:
  containers:
  - name: registry
    image: registry:2.7.0
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: repo-vol
      mountPath: "/var/lib/registry"
    - name: certs-vol
      mountPath: "/certs"
      readOnly: true
    - name: auth-vol
      mountPath: "/auth"
      readOnly: true
    env:
    - name: REGISTRY_AUTH
      value: "htpasswd"
    - name: REGISTRY_AUTH_HTPASSWD_REALM
      value: "Registry Realm"
    - name: REGISTRY_AUTH_HTPASSWD_PATH
      value: "/auth/htpasswd"
    - name: REGISTRY_HTTP_TLS_CERTIFICATE
      value: "/certs/tls.crt"
    - name: REGISTRY_HTTP_TLS_KEY
      value: "/certs/tls.key"
    - name: REGISTRY_STORAGE_DELETE_ENABLED
      value: "true"
  volumes:
  - name: repo-vol
    persistentVolumeClaim:
      claimName: repo-pvc
  - name: certs-vol
    secret:
      secretName: certs-secret
  - name: auth-vol
    secret:
      secretName: auth-secret
  restartPolicy: Always
  nodeName: spring

以下是持久卷 yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: repo-pv
  labels:
    type: prstore
spec:
  capacity:
    storage: 7Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    fsType: ext4
    path: /root/repo
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - spring
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: repo-pvc
  labels:
    type: prstore
spec:
  selector:
    matchLabels: 
      type: prstore
  volumeMode: Filesystem
  storageClassName: local-storage
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 7Gi

假设我在一个全新的注册表 pod 上推送一个图像,并且预先清除了持久性存储。

root@sea:scripts# docker push dockreg:5000/mubu4:v4
The push refers to repository [dockreg:5000/mubu4]
9f54eef41275: Pushed 
v4: digest: sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f size: 529

删除图像似乎按预期工作,直到我再次尝试推送已删除的图像,此时我遇到了可怕的Layer already exists错误。

正如您可能在上面看到的,我在注册表 pod 环境中包含以下内容,

- name: REGISTRY_STORAGE_DELETE_ENABLED
      value: "true"

否则我会unsupported从调用中得到一个错误curl -X DELETE,即使在添加之后

delete:
    enabled: true

在/etc/docker/registry/config.yml吊舱内,

version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
  delete:
    enabled: true
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

这似乎对我的用例没有影响。

以下是删除步骤。

curl -u alexander:sofianos \
> -vsk -H "Accept: \
> application/vnd.docker.distribution.manifest.v2+json" \
> -X DELETE \
> https://dockreg:5000/v2/mubu4/manifests/sha256:\
> 7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f

上面打印了以下内容

> DELETE /v2/mubu4/manifests/sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f HTTP/2
> Host: dockreg:5000
> authorization: Basic YWxleGFuZGVyOnNvZmlhbm9z
> user-agent: curl/7.68.0
> accept: application/vnd.docker.distribution.manifest.v2+json
> 
* Connection state changed (MAX_CONCURRENT_STREAMS == 250)!
< HTTP/2 202 
< docker-distribution-api-version: registry/2.0
< x-content-type-options: nosniff
< content-length: 0
< date: Sat, 30 Oct 2021 13:25:53 GMT
< 
* Connection #0 to host dockreg left intact

这似乎是有序的。

下面,从注册表 pod 中删除 blob

root@sea:scripts# kubectl exec -it dockreg-pod -- sh
/ # bin/registry garbage-collect  /etc/docker/registry/config.yml
mubu4

0 blobs marked, 3 blobs and 0 manifests eligible for deletion
blob eligible for deletion: sha256:7b1a6ab2e44dbac178598dabe7cff59bd67233dba0b27e4fbd1f9d4b3c877a54
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/7b/7b1a6ab2e44dbac178598dabe7cff59bd67233dba0b27e4fbd1f9d4b3c877a54  go.version=go1.11.2 instance.id=82a101ee-47f4-4f4f-bc79-76d774b0924b service=registry
blob eligible for deletion: sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/7b/7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f  go.version=go1.11.2 instance.id=82a101ee-47f4-4f4f-bc79-76d774b0924b service=registry
blob eligible for deletion: sha256:ecb35fc8715f5ab1d9053ecb2f2d9ebbec4a59c0a0615d98de53bc29f7285085
INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/ec/ecb35fc8715f5ab1d9053ecb2f2d9ebbec4a59c0a0615d98de53bc29f7285085  go.version=go1.11.2 instance.id=82a101ee-47f4-4f4f-bc79-76d774b0924b service=registry

最后,手动删除存储库映像

/ # rm -rf /var/lib/registry/docker/registry/v2/repositories/mubu4

在我的持久存储上,注册表现在看起来像这样

root@spring:repo# tree
.
└── docker
    └── registry
        └── v2
            ├── blobs
            │   └── sha256
            │       ├── 7b
            │       └── ec
            └── repositories

8 directories, 0 files

但是当我再次尝试推送已删除的图像时,我得到了

root@sea:scripts# docker push dockreg:5000/mubu4:v4
The push refers to repository [dockreg:5000/mubu4]
9f54eef41275: Layer already exists 
v4: digest: sha256:7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f size: 529

在我的注册表中,我之前删除的 mubu4 图像文件夹已通过上述推送命令神秘地重新创建。

root@spring:repo# tree
.
└── docker
    └── registry
        └── v2
            ├── blobs
            │   └── sha256
            │       ├── 7b
            │       └── ec
            └── repositories
                └── mubu4
                    └── _manifests
                        ├── revisions
                        │   └── sha256
                        │       └── 7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
                        │           └── link
                        └── tags
                            └── v4
                                ├── current
                                │   └── link
                                └── index
                                    └── sha256
                                        └── 7bd0d9a9821815dccb5c53c18cea04591ec633e2e529c5cdd39681169589c17f
                                            └── link

19 directories, 3 files

我还尝试用

root@spring:repo# rm -rf *

无济于事。之后尝试推送已删除的图像,仍然输出完全相同的Layer already exists错误,并且注册表树再次自动重新创建,看起来与上述树输出中的完全相同。

问题是我还能尝试什么来完成这项工作,和/或替代地,

从上面的测试可以看出,在 docker registry kubernetes pod 中,还有其他文件,这些文件保存了已删除图像似乎没有被删除的配置,并且这些文件通过 docker push 调用激活了已删除图像的重新创建。除了树我应该往哪里看

/var/lib/registry/docker/registry/v2/

所以我可以删除对已删除图像的所有引用?

images docker-registry docker kubernetes yaml
  • 1 个回答
  • 393 Views
Martin Hope
vrms
Asked: 2021-10-07 00:49:46 +0800 CST

ansible - 如何克服“冲突的行动声明”错误?

  • 0

我有一个用于创建和调整逻辑卷大小的 Ansible 剧本

# playbook lvol.yml
- hosts: step
  tasks:
  - name: 'create /dev/sdb1 -> 20GB (of 35GB)'
    community.general.parted:
    device: /dev/sdb
    number: 1
    state: present
#    fs_type: ext4


  - name: "resize vgsys by /dev/sdb1"
    community.general.lvg:
    vg: vgsys
    pvs: /dev/sdb1

  - name: "extend lv 'name' to 10GB from /dev/sdb (35GB)"
    community.general.lvol:
      vg: vgsys
      lv: name
      size: 10g

yaml 语法似乎很好(通过 onlineyamltools.com 检查)但我在执行时收到此错误:

ERROR! conflicting action statements: community.general.parted, device

The error appears to be in '/path/to/lvol.yml': line 4, column 5, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

  tasks:
  - name: 'create /dev/sdb1 -> 20GB (of 35GB)'
    ^ here

如果我注释掉第一个(community.general.parted)任务,第二个(lvol)任务会出现相同的错误。

任何人都可以为我指出如何克服这个问题的正确方向吗?

ansible yaml
  • 1 个回答
  • 8618 Views
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
solr
Asked: 2021-04-08 12:44:07 +0800 CST

GCP 部署管理器:在哪里可以找到正确创建 YAML 配置和模板文件的参考指南?

  • 0

我应客户的要求开始使用谷歌云部署管理器,使用 YAML 配置文件,但我在任何地方都找不到如何映射https://cloud.google.com/deployment-manager/docs/configuration中显示的参考/supported-resource-types我实际使用的。

特别是,我需要在创建时将现有的外部弹性 IP 附加到实例,但我无法在任何地方找到这样做的配置文件架构(即,就像在https://eksctl.xmleksctl找到的配置文件架构文档一样) io/用法/模式/):

resources:
- type: compute.v1.instance
  name: nextcloud-vm
  properties:
    natIP: nextcloud-vm
    # The properties of the resource depend on the type of resource. For a list
    # of properties, see the API reference for the resource.
    zone: us-west1-a
    # Replace martin-dev-391362 with your project ID
    machineType: https://www.googleapis.com/compute/v1/projects/martin-dev-391362/zones/us-west1-a/machineTypes/n2-standard-4
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        # See a full list of image families at https://cloud.google.com/compute/docs/images#os-compute-support
        # The format of the sourceImage URL is: https://www.googleapis.com/compute/v1/projects/[IMAGE_PROJECT]/global/images/family/[FAMILY_NAME]
        sourceImage: https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/family/ubuntu-2004-lts
        diskSizeGb: 20
    # Replace martin-dev-391362 with your project ID
    networkInterfaces:
    - network: https://www.googleapis.com/compute/v1/projects/martin-dev-391362/global/networks/default
      # Access Config required to give the instance a public IP address
      accessConfigs:
      - name: nextcloud-vm
        type: ONE_TO_ONE_NAT

上面的代码不起作用,因为它尝试使用该名称创建一个新的 IP 地址,而不是使用已经存在的弹性 IP 地址。问题是我在任何地方都找不到正确的符号:)

如果有人能指出正确的方向,我将不胜感激,因为解决这个很小的问题只是冰山一角,因为我将与 Deployment Manager 进行大量工作,因此我需要全面了解如何使用它。

google-cloud-platform yaml deployment-manager
  • 1 个回答
  • 149 Views
Martin Hope
saffron
Asked: 2020-09-18 02:10:42 +0800 CST

如何使用 ansible 将原始数据转换并保存为 PDF 格式

  • 1

我将直接从 API 获取一些原始数据。我想将其格式化并转换为 PDF 文件并保存。我经历了ansible模块。我对此一无所知。有人可以建议我们如何使用 Ansible 来实现它。

python pdf ansible ansible-playbook yaml
  • 1 个回答
  • 816 Views
Martin Hope
Mike Williams
Asked: 2020-08-22 14:58:50 +0800 CST

Ansible 检查属性列表中是否存在变量

  • 2

我有一个包含网络上主机详细信息的变量(称为“主机列表”-我相信您将其称为字典,但我不确定术语。该变量在 group_vars/all 的文件中定义,所以它是在所有剧本中都可用(不确定这是否重要)。

我有一个剧本,只有在 hostlist 的主机名列表中找不到 ansible_hostname 时我才想运行它。hostlist 中的主机名是变量的属性之一,但我再次不确定“属性”是否是正确的术语......

主机列表定义为:

hostlist:
  - { name: 'host1', ip_addr: '192.168.2.31', hostgrp: 'physical_workstation' }
  - { name: 'host2', ip_addr: '192.168.2.32', hostgrp: 'physical_workstation' }
  - { name: 'host3', ip_addr: '192.168.2.33', hostgrp: 'virtual_machine' }

我用来尝试使其正常工作的游戏是:

- name: Conditional test
  debug:
    msg: "ansible_hostname not found in hostlist."
  when: ansible_hostname not in hostlist.name

我不确定条件中所需的语法,或者我想要的是否可以通过这种方式实现?

ansible yaml jinja2
  • 3 个回答
  • 24189 Views
Martin Hope
Linoob
Asked: 2020-05-30 13:37:49 +0800 CST

在使用 Ansible 剧本时,您如何存储和使用包含引号或其他元字符的密码,而不会对其进行交互?

  • 1

我的公司使用 Ansible(我是新手),我们有一个剧本和相关角色,用于将新的 Linux 机器加入 AD。我们的管理员帐户的密码每天滚动 3 次,我们无法自行设置。只要密码中没有(单'引号),Ansible 剧本就可以工作。可能还有其他字符会导致它崩溃,但我知道'肯定会这样做。

以下是脚本的相关位:

cat setup-ad.yml

---
- hosts: "{{ hosts }}"

  vars_prompt:
  - name: "username"
    prompt: "Enter admin account"
    private: no

  - name: "password"
    prompt: "Enter Password"
    unsafe: yes
    private: yes

  vars:
    domain: "{{ 'mycompany.com' }}"
    passwd: "{{ password | regex_escape() }}"

  roles:
  - join-ad

grep -B2 -A3 'passwd' ./roles/join-ad/tasks/main.yml

  - name: join to active directory
    command: net ads join MYCOMPANY.COM -U {{ username }}@MYCOMPANY.COM%'{{ passwd }}' createcomputer=Restricted/Servers/Unix --request-timeout=120 --no-dns-updates
    no_log: false
    when: ansible_distribution_major_version >= 6

  - name: join to active directory
    command: net ads join MYCOMPANY.COM -U {{ username }}@MYCOMPANY.COM%'{{ passwd }}' createcomputer=Restricted/Servers/Unix --request-timeout=120
    no_log: false
    when: ansible_distribution_major_version <= 5

我们得到的错误是:

TASK [join-ad : join to active directory] ************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ValueError: No closing quotation
fatal: [newserver.mycompany.com]: FAILED! => {"changed": false, "module_stderr": "Shared connection to newserver.mycompany.com closed.\r\n", "module_stdout": "Traceback (most recent call last):\r\n  File \"/root/.ansible/tmp/ansible-tmp-1590785720.2-224244797633747/AnsiballZ_command.py\", line 102, in <module>\r\n    _ansiballz_main()\r\n  File \"/root/.ansible/tmp/ansible-tmp-1590785720.2-224244797633747/AnsiballZ_command.py\", line 94, in _ansiballz_main\r\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\r\n  File \"/root/.ansible/tmp/ansible-tmp-1590785720.2-224244797633747/AnsiballZ_command.py\", line 40, in invoke_module\r\n    runpy.run_module(mod_name='ansible.modules.commands.command', init_globals=None, run_name='__main__', alter_sys=True)\r\n  File \"/usr/lib64/python2.7/runpy.py\", line 176, in run_module\r\n    fname, loader, pkg_name)\r\n  File \"/usr/lib64/python2.7/runpy.py\", line 82, in _run_module_code\r\n    mod_name, mod_fname, mod_loader, pkg_name)\r\n  File \"/usr/lib64/python2.7/runpy.py\", line 72, in _run_code\r\n    exec code in run_globals\r\n  File \"/tmp/ansible_command_payload_4D4oFT/ansible_command_payload.zip/ansible/modules/commands/command.py\", line 344, in <module>\r\n  File \"/tmp/ansible_command_payload_4D4oFT/ansible_command_payload.zip/ansible/modules/commands/command.py\", line 263, in main\r\n  File \"/usr/lib64/python2.7/shlex.py\", line 279, in split\r\n    return list(lex)\r\n  File \"/usr/lib64/python2.7/shlex.py\", line 269, in next\r\n    token = self.get_token()\r\n  File \"/usr/lib64/python2.7/shlex.py\", line 96, in get_token\r\n    raw = self.read_token()\r\n  File \"/usr/lib64/python2.7/shlex.py\", line 172, in read_token\r\n    raise ValueError, \"No closing quotation\"\r\nValueError: No closing quotation\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}

PLAY RECAP *******************************************************************************************************
newserver.mycompany.com : ok=9    changed=0    unreachable=0    failed=1    skipped=2    rescued=0    ignored=0

好的,所以问题是在某些时候'被解释为引用的一系列字符的开头,而不是简单的密码的一部分。我的问题是我不知道如何获得 Ansible?Python?亚美尔?金贾?将用户输入的字符串视为字符串。“字符串文字”在这里是正确的术语吗?

如果我 ssh 到目标服务器并net ads join手动运行命令,并让它提示输入我的密码,它甚至可以'在其中使用,所以至少我知道问题不是 Samba 命令。

我尝试过的事情(没有帮助)是:

  • 在周围添加“硬引号”{{ passwd }}
  • 添加unsafe: yes到密码定义
  • 添加passwd: "{{ password | regex_escape() }}"转义元字符
  • 在 Stack 和 Google 上进行大量互联网搜索

任何和所有的帮助将不胜感激。

password python ansible yaml jinja2
  • 1 个回答
  • 991 Views
Martin Hope
user3399551
Asked: 2017-02-22 21:18:12 +0800 CST

如何在 Ansible 配置(YAML/Jinja2)中逐个循环项目?

  • 0

我正在尝试从我在 Ansible 中的清单中遍历我的主机,并在命令中使用该迭代的主机名称。特别是,我试图将每个主机的主机名设置为我在主机文件中调用它们的任何名称。所以,我的网络服务器有 web01、web02、web03 等——我想在每个问题中将它们设置为服务器上的主机名,即我想遍历“所有”主机以及当我在 web01 上时(第一次迭代) ,我想将我所在主机的名称传递给主机名模块。这是我尝试过的:

- hosts: all
become: true
tasks:
  - hostname:
      name: "{{ item }}"
    with_items: "{{ play_hosts }}"

但是,不是将我所在主机的名称设置为主机名,而是尝试将我的 ansible 配置中的每个主机设置为每个服务器上的主机名。所以它试图做:

connect to web01; hostname -> web01; hostname -> web02; hostname -> web03
connect to web02; hostname -> web01; hostname -> web02; hostname -> web03
connect to web03; hostname -> web01; hostname -> web02; hostname -> web03

相反,我想要:

connect to web01; hostname -> web01
connect to web02; hostname -> web02
connect to web03; hostname -> web03

我怎样才能做到这一点?

我在这里发现了一个类似的问题:Ansible: setting hostname over inventory

但这得到了一个比我希望的更复杂的解决方案。那里的建议是添加后缀,但肯定像我想要的简单循环原则上不应该要求这样做。

python ansible yaml
  • 1 个回答
  • 975 Views
Martin Hope
030
Asked: 2016-08-05 01:50:21 +0800 CST

自 Ansible 2.0 以来,格式化策略如何?

  • 3

我在 github 和 ansible文档中看到了多个 Ansible 示例,例如:

---
# this might be in a file like handlers/handlers.yml
- name: restart apache
  service: name=apache state=restarted

Github 示例

以下示例同时包含注释作为name.

# Make sure Jenkins starts, then configure Jenkins.
- name: Ensure Jenkins is started and runs on startup.
  service: name=jenkins state=started enabled=yes

讨论

Aname就足够了,还是应该使用评论?

应该是:

- name: Symlink RabbitMQ bin to sbin
  file: state=link src=/usr/lib/rabbitmq/bin dest=/usr/lib/rabbitmq/sbin

或者:

#Symlink RabbitMQ bin to sbin
file: 
  state: link
  src: /usr/lib/rabbitmq/binhttp://docs.ansible.com/ansible/YAMLSyntax.html
  dest: /usr/lib/rabbitmq/sbin

当按照 Ansible YAML 语法文档的建议咨询YAML Lint时,两个片段似乎都是有效的 YAML。尽管这两个片段似乎都是有效的 YAML,但视觉结构不同。

问题

  1. 应该使用名称 ( name) 还是注释 ( #)?
  2. 它应该是file: state=link src=/usr/lib/rabbitmq/bin dest=/usr/lib/rabbitmq/sbin还是应该被拆分,例如state:
ansible yaml
  • 2 个回答
  • 451 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