Ansible Использование find для поиска определенной строки в регистровой переменной из других игр [duplicate]

Edit. Я просто заметил, что вы упоминаете МАМП. Мой совет для Windows, но может быть полезен, если вы знаете, какие соответствующие инструменты использовать.

Что попробовать :

  • Вы перезапустили PHP и Apache с момента вашего редактирования php.ini?
  • Является ли php_pgsql.dll найденным в вашем каталоге php \ ext?
  • Вы используете php в качестве модуля? Если да, попробуйте скопировать файл php_pgsql.dll в каталог Apache \ bin.
  • Вы используете PHP из командной строки с флагом, указывающим другой файл php.ini?
  • Вы можете попробовать использовать такой инструмент, как Sysinternals 'Filemon, чтобы посмотреть, какие файлы пытаются получить доступ при запуске PHP.
  • Вы можете попробовать использовать такой инструмент, как Dependency Walker, для поиска зависимостей для библиотеки postgreSQL , если у вас есть недостающая зависимость. Быстрый поиск поднял ldd для Unix.

32
задан Bruce P 24 November 2015 в 21:59
поделиться

3 ответа

Проблема, с которой вы сталкиваетесь, заключается в том, что вы пытаетесь ссылаться на факты / переменные одного хоста на другие хосты. Вы должны иметь в виду, что в Ansible переменная app_git_sha1, назначенная хосту localhost, отличается от переменной app_git_sha1, назначенной хосту main или любому другому хосту. Если вы хотите получить доступ к фактам / переменным хостов с другого хоста, вам необходимо явно ссылаться на него с помощью переменной hostvars. .

Предположим, что у вас есть подобная пьеса:

- hosts: localhost
  tasks:   
    - command: /bin/echo "this is a test"
      register: foo


- hosts: localhost
  tasks:
    - debug: var=foo

Это будет работать, потому что вы 'ссылается на экземпляр хоста localhost и localhosts переменной foo в обеих играх. Вывод этой пьесы выглядит примерно так:

PLAY [localhost] **************************************************************

GATHERING FACTS ***************************************************************
ok: [localhost]

TASK: [command /bin/echo "this is a test"] ************************************
changed: [localhost]

PLAY [localhost] **************************************************************

GATHERING FACTS ***************************************************************
ok: [localhost]

TASK: [debug var=foo] *********************************************************
ok: [localhost] => {
    "var": {
        "foo": {
            "changed": true,
            "cmd": [
                "/bin/echo",
                "this is a test"
            ],
            "delta": "0:00:00.004585",
            "end": "2015-11-24 20:49:27.462609",
            "invocation": {
                "module_args": "/bin/echo \"this is a test\"",
                "module_complex_args": {},
                "module_name": "command"
            },
            "rc": 0,
            "start": "2015-11-24 20:49:27.458024",
            "stderr": "",
            "stdout": "this is a test",
            "stdout_lines": [
                "this is a test"
            ],
            "warnings": []
        }
    }
}

Если вы немного измените эту игру, чтобы запустить первое воспроизведение на одном хосте, а второе воспроизведение на другом хосте, вы получите сообщение об ошибке вы столкнулись. Решение состоит в том, чтобы использовать встроенную переменную hostvars Ansible, чтобы второй узел явно ссылался на первую переменную хоста. Поэтому измените первый пример следующим образом:

- hosts: localhost
  tasks:

    - command: /bin/echo "this is a test"
      register: foo


- hosts: anotherhost
  tasks:
    - debug: var=foo
      when: foo is defined

    - debug: var=hostvars['localhost']['foo']
      when: hostvars['localhost']['foo'] is defined

. Вывод этой пьесы показывает, что первая задача пропущена, потому что foo не определяется хостом anotherhost. Но вторая задача выполняется успешно, потому что она явно ссылается на экземпляр localhosts переменной foo:

TASK: [debug var=foo] *********************************************************
skipping: [anotherhost]

TASK: [debug var=hostvars['localhost']['foo']] **************************
ok: ['anotherhost'] => {
    "var": {
        "hostvars['localhost']['foo']": {
            "changed": true,
            "cmd": [
                "/bin/echo",
                "this is a test"
            ],
            "delta": "0:00:00.005950",
            "end": "2015-11-24 20:54:04.319147",
            "invocation": {
                "module_args": "/bin/echo \"this is a test\"",
                "module_complex_args": {},
                "module_name": "command"
            },
            "rc": 0,
            "start": "2015-11-24 20:54:04.313197",
            "stderr": "",
            "stdout": "this is a test",
            "stdout_lines": [
                "this is a test"
            ],
            "warnings": []
        }
    }
}

Итак, в двух словах вы хотите изменить ссылки на переменные в main playbook для ссылки на переменные localhost следующим образом:

{{ hostvars['localhost']['app_git_sha1'] }}
61
ответ дан Community 16 August 2018 в 02:31
поделиться

У меня были похожие проблемы с одним и тем же хостом, но в разных играх. Эта вещь, которую следует помнить, это факты, а не переменные, которые сохраняются в разных играх. Вот как я оборачиваю проблему.

#!/usr/local/bin/ansible-playbook --inventory=./inventories/ec2.py
---
- name: "TearDown Infrastructure !!!!!!!"
  hosts: localhost
  gather_facts: no
  vars:
    aws_state: absent
  vars_prompt:
    - name: "aws_region"
      prompt: "Enter AWS Region:"
      default: 'eu-west-2'
  tasks:
    - name: Make vars persistant
      set_fact:
        aws_region: "{{aws_region}}"
        aws_state: "{{aws_state}}"




- name: "TearDown Infrastructure hosts !!!!!!!"
  hosts: monitoring.ec2
  connection: local
  gather_facts: no
  tasks:
    - name: set the facts per host
      set_fact:
        aws_region: "{{hostvars['localhost']['aws_region']}}"
        aws_state: "{{hostvars['localhost']['aws_state']}}"


    - debug:
        msg="state {{aws_state}} region {{aws_region}} id {{ ec2_id }} "

- name: last few bits
  hosts: localhost
  gather_facts: no
  tasks:
    - debug:
        msg="state {{aws_state}} region {{aws_region}} "

приводит к

Enter AWS Region: [eu-west-2]:


PLAY [TearDown Infrastructure !!!!!!!] ***************************************************************************************************************************************************************************************************

TASK [Make vars persistant] **************************************************************************************************************************************************************************************************************
ok: [localhost]

PLAY [TearDown Infrastructure hosts !!!!!!!] *********************************************************************************************************************************************************************************************

TASK [set the facts per host] ************************************************************************************************************************************************************************************************************
ok: [XXXXXXXXXXXXXXXXX]

TASK [debug] *****************************************************************************************************************************************************************************************************************************
ok: [XXXXXXXXXXX] => {
    "changed": false,
    "msg": "state absent region eu-west-2 id i-0XXXXX1 "
}

PLAY [last few bits] *********************************************************************************************************************************************************************************************************************


TASK [debug] *****************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "changed": false,
    "msg": "state absent region eu-west-2 "
}

PLAY RECAP *******************************************************************************************************************************************************************************************************************************
XXXXXXXXXXXXX              : ok=2    changed=0    unreachable=0    failed=0
localhost                  : ok=2    changed=0    unreachable=0    failed=0
9
ответ дан krad 16 August 2018 в 02:31
поделиться
  • 1
    "факты, а не переменные [являются] постоянными в разных играх - вы уверены в этом? – sampablokuper 28 January 2018 в 08:36
  • 2
    Да, пока все пьесы находятся в одном и том же вызове. Очевидно, что они могут быть перезаписаны, если вы делаете несколько фактов собрать – krad 6 February 2018 в 16:56

Использовать фиктивный хост и его переменные

Например, передать токен K8S и хэш от мастера к рабочим.

На главном

- name: "Cluster token"
  shell: kubeadm token list | cut -d ' ' -f1 | sed -n '2p'
  register: K8S_TOKEN

- name: "CA Hash"
  shell: openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
  register: K8S_MASTER_CA_HASH

- name: "Add K8S Token and Hash to dummy host"
  add_host:
    name:   "K8S_TOKEN_HOLDER"
    token:  "{{ K8S_TOKEN.stdout }}"
    hash:   "{{ K8S_MASTER_CA_HASH.stdout }}"

- name:
  debug:
    msg: "[Master] K8S_TOKEN_HOLDER K8S token is {{ hostvars['K8S_TOKEN_HOLDER']['token'] }}"

- name:
  debug:
    msg: "[Master] K8S_TOKEN_HOLDER K8S Hash is  {{ hostvars['K8S_TOKEN_HOLDER']['hash'] }}"

На рабочем

- name:
  debug:
    msg: "[Worker] K8S_TOKEN_HOLDER K8S token is {{ hostvars['K8S_TOKEN_HOLDER']['token'] }}"

- name:
  debug:
    msg: "[Worker] K8S_TOKEN_HOLDER K8S Hash is  {{ hostvars['K8S_TOKEN_HOLDER']['hash'] }}"

- name: "Kubeadmn join"
  shell: >
    kubeadm join --token={{ hostvars['K8S_TOKEN_HOLDER']['token'] }}
    --discovery-token-ca-cert-hash sha256:{{ hostvars['K8S_TOKEN_HOLDER']['hash'] }}
    {{K8S_MASTER_NODE_IP}}:{{K8S_API_SERCURE_PORT}}
7
ответ дан mon 16 August 2018 в 02:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: