• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    INDIANCentralizovaná správa stanic a ostatních prvků v síti - automation/monitoring/alerting a dalsi devops nastroje
    DEFILA
    DEFILA --- ---
    DEFILA:
    respektive chytam uzivatele 1000 - 1999 :D
    DEFILA
    DEFILA --- ---
    FRANCIMOUR:
    mno samozrejme nevim, jak to funguje na MACu, ale je to jednodussi nez tohle v Ansiblu?
    (kdy si tim grepem chytam akorat uzivatele, kteri maji ID >= 1000, predpokladam, ze to chces pro custom uzivatele a ne pro vsechny systemovy "demony"

    - hosts: localhost
      become: yes
      tasks:
        - name: chytnu_uzivatele
          shell: 'egrep ":[1][0-9]{3}" /etc/passwd | cut -d: -f1'
          register: moji_uzivatele
    
        - name: a_pustim_cron
          cron:
            name: "cron_update"
            minute: "0"
            hour: "1"
            job: "ls -lt"
            user: "{{ item }}"
          with_items:
            - "{{ moji_uzivatele.stdout_lines }}"
    ...
    
    FRANCIMOUR
    FRANCIMOUR --- ---
    INDIAN: zkouším teď variantu přes LaunchAgents..
    Nejsem si totiž jist jestli bych přes Ansible pochodil s vytvořením cronu pro každého usera
    INDIAN
    INDIAN --- ---
    FRANCIMOUR:
    cron – Manage cron.d and crontab entries — Ansible Documentation
    https://docs.ansible.com/ansible/latest/modules/cron_module.html
    FRANCIMOUR
    FRANCIMOUR --- ---
    Hoj,

    zase dotaz..

    potřebuju vytvořit cron pro každého uživatele na MacOSu .. existuje nějaká jednodušší varianta, než to dělat ručně? Idealně aby se to pouštělo z jednoho místa a bez root?
    MUXX
    MUXX --- ---
    DEFILA: To neznam. Prozkoumam, diky za tip.
    DEFILA
    DEFILA --- ---
    MUXX: tak však se localhost explicitně nevyhodnocuje, ne? Tedy poslat vše na tvé hosty a pokud to je OK, tak v posledním kroku localhost... Nebo jsem něco minul?
    MUXX
    MUXX --- ---
    Udelal jsem si v ansible task na update OS i s rebootem. Ted jsem ale narazil na to, ze bych chtel updatovat i OS linuxu na kterym ten playbook poustim. Tim si ale zabiju ten prave bezici playbook. Task poustim pres Jenkins. Neresil nekdo podobnou vec? Napada me leda udelat to tak, ze pouziju dve VM. Nejdriv updatnu jednu a dozvim se vysledek a z te updatnute pak updatnu druhou a mam vysledek. Prehlizim nejaky jednodussi reseni?
    DRON
    DRON --- ---
    INDIAN: jj, neprijemne je, ze takto lze elegantne klice pridavat, ale pokud nejakeho uzivatele degradujes, klice se neodeberou. V tomto pripade by centralni autentizace mohla byt resenim.
    INDIAN
    INDIAN --- ---
    MUXX:
    si je v inventory zarad do skupin a pro kazdej prislusnej host... neco ve stylu:
    - name: Set authorized key for DEV
      authorized_key:
        state: present
        key: "{{ lookup('file', 'keys/dev_id_rsa.pub') }}"
      when: inventory_hostname in groups['dev']
    
    - name: Set authorized key for QA
      authorized_key:
        state: present
        key: "{{ lookup('file', 'keys/qa_id_rsa.pub') }}"
      when: inventory_hostname in groups['qa']
    


    Anebo si treba v group_vars/all.yml nadefinuj slovnik klicu:
    ssh_keys:
      dev: 'keys/dev_id_rsa.pub'
      qa: 'keys/qa_id_rsa.pub'
    

    a ten play zavolas jen jednou a vytahnes si prislusnej klic dle skupiny:
    
    - name: Get path for key
      set_fact:
        key_path: "{{ ssh_keys[group_names[0]] }}"
    - name: Set authorized key
      authorized_key:
        state: present
        key: "{{ lookup('file', keys_path) }}"
    

    (tohle bude ale fungovat v pripade pouze jedny skupiny)
    MUXX
    MUXX --- ---
    Potreboval bych popostrcit spravnym ansible smerem. Mam cca 25 VM a k tomu cca 6 uzivatelu. Kazdy z techto uzivatelu ma SSH pristup do nekolika VM. Typicky admin vsude, senior dev na polovinu VM, junior dev na tri VM, tester na jine tri VM.
    Jak to poskladat do ansible tak, abych pushnul klice na odpovidajici VM? Nebo se na to mam vykaslat a zkusit to pres AD/LDAP?
    FRANCIMOUR
    FRANCIMOUR --- ---
    RUDOLF: Ansible mám u sebe lokálně, a instalace běží na vzdáleném stroji přes SSH.
    RUDOLF
    RUDOLF --- ---
    FRANCIMOUR: jen drobnost, chápu správně, že to instaluješ přes ansible na stroji, kde ten ansible běží? pak to musí být lokální akce..
    FRANCIMOUR
    FRANCIMOUR --- ---
    DRON: Jsem v tomto smeru amater... pro me je zaklad ze to dela to co chci, ale kouknu na to diky moc :)
    DRON
    DRON --- ---
    FRANCIMOUR: fakt je, ze sem tohle jeste nepotreboval resit, ale mozna nez editovat bashrc uzivatele, zkus modifikovat path primo pro playbook viz prvni FAQ - https://docs.ansible.com/ansible/latest/reference_appendices/faq.html

    ale samozrejme zalezi, mozna je zmena bashrc to, co presne chces
    FRANCIMOUR
    FRANCIMOUR --- ---
    FRANCIMOUR: ještě dodám co je v tom templatu
    export PATH="/usr/local/bin:$PATH"
    FRANCIMOUR
    FRANCIMOUR --- ---
    DRON: opraveno

    tasks:
    - name: edit bashrc
    become: yes
    template:
    src: templates/bashrc.j2
    dest: /Users/karel/.bashrc
    mode: 0555
    DRON
    DRON --- ---
    FRANCIMOUR: prd vim o mackovi a brew, ale zameril bych se na ten command not found. podle me pod uzivatelem co na ten stroj pres ansible lezes neni command brew v ceste...
    FRANCIMOUR
    FRANCIMOUR --- ---
    FRANCIMOUR: brew cask install google-chrome jde v pohodě
    FRANCIMOUR
    FRANCIMOUR --- ---
    AQUARIUS:
    fatal: []: FAILED! => {
    "changed": true,
    "cmd": "brew cask reinstall google-chrome",
    "delta": "0:00:00.003391",
    "end": "2019-07-15 21:18:53.865821",
    "invocation": {
    "module_args": {
    "_raw_params": "brew cask reinstall google-chrome",
    "_uses_shell": true,
    "argv": null,
    "chdir": null,
    "creates": null,
    "executable": null,
    "removes": null,
    "stdin": null,
    "warn": true
    }
    },
    "msg": "non-zero return code",
    "rc": 127,
    "start": "2019-07-15 21:18:53.862430",
    "stderr": "/bin/sh: brew: command not found",
    "stderr_lines": [
    "/bin/sh: brew: command not found"
    ],
    "stdout": "",
    "stdout_lines": []


    mezery mám správně.. ale díky verbose vím, že to nedoběhne.. ač se to tak tváří..
    Kliknutím sem můžete změnit nastavení reklam