python - ansible-container 不是 JSON 可序列化的

标签 python python-2.7 ansible ansible-container

我们刚刚开始从 ansible-container 0.9.2 中获取“不是 JSON 序列化”的 container.yml——这是我们已经运行了几个月的版本,没有发生任何错误。知道为什么这才刚刚开始吗?

我们的堆栈跟踪是

Traceback (most recent call last):
  File "/home/jenkins/workspace/tylt/ansible-container/container/cli.py", line 299, in __call__
    getattr(core, u'hostcmd_{}'.format(args.subcommand))(**vars(args))
  File "/home/jenkins/workspace/tylt/ansible-container/container/__init__.py", line 28, in __wrapped__
    return fn(*args, **kwargs)
  File "/home/jenkins/workspace/tylt/ansible-container/container/core.py", line 153, in hostcmd_build
    config = get_config(base_path, vars_files=vars_files, engine_name=engine_name, project_name=project_name)
  File "/home/jenkins/workspace/tylt/ansible-container/container/utils/__init__.py", line 49, in get_config
    project_name=project_name, vault_files=vault_files)
  File "/home/jenkins/workspace/tylt/ansible-container/container/__init__.py", line 28, in __wrapped__
    return fn(*args, **kwargs)
  File "/home/jenkins/workspace/tylt/ansible-container/container/config.py", line 62, in __init__
    self.set_env('prod')
  File "/home/jenkins/workspace/tylt/ansible-container/container/docker/config.py", line 45, in set_env
    super(AnsibleContainerConfig, self).set_env(env, config=config)
  File "/home/jenkins/workspace/tylt/ansible-container/container/config.py", line 146, in set_env
    self._resolve_defaults(config)
  File "/home/jenkins/workspace/tylt/ansible-container/container/config.py", line 194, in _resolve_defaults
    logger.debug(u'Resolved template variables', template_vars=defaults)
  File "/home/jenkins/.local/lib/python2.7/site-packages/structlog/stdlib.py", line 61, in debug
    return self._proxy_to_logger("debug", event, *args, **kw)
  File "/home/jenkins/.local/lib/python2.7/site-packages/structlog/stdlib.py", line 119, in _proxy_to_logger
    **event_kw)
  File "/home/jenkins/.local/lib/python2.7/site-packages/structlog/_base.py", line 176, in _proxy_to_logger
    args, kw = self._process_event(method_name, event, event_kw)
  File "/home/jenkins/.local/lib/python2.7/site-packages/structlog/_base.py", line 136, in _process_event
    event_dict = proc(self._logger, method_name, event_dict)
  File "/home/jenkins/workspace/tylt/ansible-container/container/utils/visibility.py", line 42, in unorder_dict
    event_dict[key] = json.dumps(value)
  File "/usr/lib/python2.7/json/__init__.py", line 244, in dumps
    return _default_encoder.encode(obj)
  File "/usr/lib/python2.7/json/encoder.py", line 207, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode
    return _iterencode(o, 0)
  File "/usr/lib/python2.7/json/encoder.py", line 184, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: ordereddict([('cron', ordereddict([('version', '3.0pl1-128ubuntu2')])), ('graphicsmagick', ordereddict([('version', '1.3.23-1build1')])), ('ruby2.4', ordereddict([('version', '2.4.4-1bbox1~xenial1')])), ('ruby2.4-dev', ordereddict([('version', '2.4.4-1bbox1~xenial1')]))]) is not JSON serializable

这是我们的 python 环境的样子:

ansible-container (0.9.2)
awscli (1.14.70)
backports.ssl-match-hostname (3.5.0.1)
botocore (1.9.23)
certifi (2018.4.16)
chardet (3.0.4)
colorama (0.3.7)
docker (3.4.1)
docker-pycreds (0.3.0)
docutils (0.14)
futures (3.2.0)
idna (2.7)
ipaddress (1.0.22)
Jinja2 (2.10)
jmespath (0.9.3)
MarkupSafe (1.0)
pip (9.0.3)
pyasn1 (0.4.2)
python-dateutil (2.6.1)
PyYAML (3.12)
requests (2.19.1)
rsa (3.4.2)
ruamel.ordereddict (0.4.13)
ruamel.yaml (0.15.52)
s3transfer (0.1.13)
selenium (3.11.0)
setuptools (39.0.1)
six (1.11.0)
structlog (18.1.0)
urllib3 (1.23)
websocket-client (0.48.0)

这是我们container.yml的例子

version: "2"
defaults:
  additional_packages:
    ruby2.4:
       version: '2.4.4-1bbox1~xenial1'
    ruby2.4-dev:
       version: '2.4.4-1bbox1~xenial1'
    graphicsmagick:
       version: '1.3.23-1build1'
    cron:
       version: '3.0pl1-128ubuntu2'
services:
  ruby:
    from: tylt
    working_dir: "/var/www"
    command:
    - /bin/bash
    - -exc
    - |
      RAILS_ENV=kube bundle exec unicorn -c config/unicorn.rb -E kube &
      RAILS_ENV=kube bundle exec sidekiq -C config/sidekiq.yml -c 10 -e kube &
      wait %1
    volumes:
    - ${PWD}:/tmp
    roles:
    - tylt.rails
    labels:
      com.ansible.container.commit: "{{ git_commit }}"
      com.ansible.container.pull-request: "{{ pull_request }}"
registries: {}

最佳答案

转自评论:

因此,在查找 ruamel.yaml (0.15.52) 时,您的版本似乎是今天发布的。你最近升级你的环境了吗?

关于python - ansible-container 不是 JSON 可序列化的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51773088/

相关文章:

python - 如何在python中使用切片运算符提取除中间部分之外的字母?

linux - Ansible azure 模块 azure.azcollection.azure_rm_adgroup_info 的 Azure AD 应用程序权限

python - 垂直堆叠列表 - 无法迭代它们?

python - 从Python中输入的数字中的特定数字开始倒数

python - 在 django 2.0 的 urls.py 中使用 path() 或 url() 会更好吗?

python - 溢出 : length too large

python - 如何从列表中解压四个变量?

git - Ansible:使用 pip 从私有(private) git repo 安装包

Ansible - 运行剧本时如何控制主机的顺序

python - 有条件地组合 pandas 数据框中的列