简体   繁体   中英

Ansible escaping a string issue on mac vs ubuntu?

With the following code:

  - name: Add the gii config for main.php on staging
    blockinfile:
      dest: "{{ www_path }}/protected/config/main.php"
      marker: "//Gii"
      insertafter: "\'modules\'=>array\\("
      block: "{{ gii_content }}"

I'm getting a syntax error on OSX:

ERROR! Syntax Error while loading YAML.
The offending line appears to be:

      marker: "//Gii"
      insertafter: "\'modules\'=>array\\("
                     ^ here

Yet on ubuntu, no such issue and the playbook runs seamlessly. Any ideas?

If you run this through a YAML parser it will tell you it discovered an unknown escape character, so OS X is right there. What is the purpose of \\' ? If the idea was to match that string and the backslash appears in the file like this, you should put two backslashes there:

  - name: Add the gii config for main.php on staging
    blockinfile:
      dest: "{{ www_path }}/protected/config/main.php"
      marker: "//Gii"
      insertafter: "\\'modules\\'=>array\\("
      block: "{{ gii_content }}"

If there are two backslashes right after array you would need to have 4 of them there, just for escaping. Though since insertafter takes a regular expression and ( has a special meaning in regular expressions, it might be necessary to actually put 6 of them there.

  - name: Add the gii config for main.php on staging
    blockinfile:
      dest: "{{ www_path }}/protected/config/main.php"
      marker: "//Gii"
      insertafter: "\\'modules\\'=>array\\\\\\("
      block: "{{ gii_content }}"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM