Modern UI for Ansible

semaphore

Circle CI Codacy Badge Codacy Badge semaphore on discord

Release Signing

All releases after 2.5.1 are signed with the gpg public key 8CDE D132 5E96 F1D9 EABF 17D4 2C96 CF7D D27F AB82

Installation

https://github.com/ansible-semaphore/semaphore/wiki/Installation

Get it from the Snap Store

Demo

https://demo.ansible-semaphore.com

Login / password: demo / demo.

Contributing

PR's & UX reviews are welcome!

Please follow the contribution guide. Any questions, please open an issue.

License

MIT License

Copyright (c) 2016 Castaway Consulting LLC

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Comments
  • Possible to play local playbooks?

    Possible to play local playbooks?

    It would be really good if semaphore can also play playbooks from a local server in my n/w or on the host machine where I 've installed semaphore. I might not keep all my ansible code in github for various reasons.

    Please suggest if this can be released in future or it's not feasible at all.

  • How its works ?

    How its works ?

    Hello, I'm new on github and semaphore. I do not quite understand how it works. I don't find documentation with a simple example. Can someone give me a simple example of creating a project from the beginning until its execution? Thanks a lot.

  • Dynamic Inventory support

    Dynamic Inventory support

    I use aws with ansible, so dynamic inventory is used instead of adding hosts manually. Is this possible with semaphore? Documentation for running playbooks from local machine? I am not able see the documentation for running test playbooks with git repo, if I have missed it, can you point the documentation.

  • So does this support LDAPS or not?

    So does this support LDAPS or not?

    I see there is an "ldap_needtls" boolean in the config, but I cant find any mention of how to make it work. My Semaphore works fine under normal LDAP, but where I want to use it, straight LDAP is not permitted and LDAPS must be used.

    If I add the "needtls: true" and change the port to 636, I get this error in the log when attempting to log in:

    Checking DB migrations MySQL [email protected]:3306 semaphore Tmp Path (projects home) /tmp/semaphore Semaphore v2.7.22 Interface Port :3000 Server is running INFO[0013] unable to read LDAP response packet: read tcp 172.17.0.11:34666->10.0.30.135:636: read: connection reset by peer

    This is a docker container, so I copied my root/intermediate CA certs into /etc/ssl/certs/ca-certificates.crt but that had no impact.

  • Updating repository Git - Ask password

    Updating repository Git - Ask password

    While running task, when Updating repository, the task don't progress. On shell, i can see process wait for password. Private key register in Key Store don't contain passphrase.

    I run ssh -T -i access_key_4 [email protected] and i am authentificated without password.

    I've tried an other private key and problem is similar.

    Thank you.

  • Cron definition is ignored

    Cron definition is ignored

    I have a task with defined cron '0 0 * * 0' but it's not started based on this schedule. I'm not able to find any related logs.

    root@serverLinuxWEBAPP:~# cat /etc/redhat-release 
    CentOS Stream release 8
    root@serverLinuxWEBAPP:~# rpm -qa | grep semaphore
    semaphore-2.8.53-1.x86_64
    root@serverLinuxWEBAPP:~# systemctl status semaphore
    ● semaphore.service - Semaphore Ansible
       Loaded: loaded (/etc/systemd/system/semaphore.service; enabled; vendor preset: disabled)
       Active: active (running) since Mon 2022-03-21 16:10:38 CET; 1 months 21 days ago
         Docs: https://github.com/ansible-semaphore/semaphore
     Main PID: 2530737 (semaphore)
        Tasks: 6 (limit: 23546)
       Memory: 68.9M
       CGroup: /system.slice/semaphore.service
               └─2530737 /usr/bin/semaphore service --config=/opt/semaphore/config.json
    

    Can you please suggest where to look / start debug?

  • LDAP Support

    LDAP Support

    From what I've seen so far users are stored in the database. It would be nice to have LDAP support, so that one could use existing groups to match "roles" and people could use their central managed password.

  • SSH bug?? Connection refused Failed to connect to new control master .

    SSH bug?? Connection refused Failed to connect to new control master .

    I was trying to run this from within a Docker container in Centos. I suspected that might be an issue and when I switched to using a VM it worked fine.

    In short,

    debug1: Authentication succeeded (publickey).
    nAuthenticated to 10.3.3.16 ([10.3.3.16]:22).
    debug1: setting up multiplex master socket
    debug3: muxserver_listen: temporary control path /root/.ansible/cp/ansible-ssh-10.3.3.16-22-ansible.WKmgczTyEdVwJpd4
    debug2: fd 4 setting O_NONBLOCK
    debug3: fd 4 is O_NONBLOCK
    debug3: fd 4 is O_NONBLOCK
    debug1: channel 0: new [/root/.ansible/cp/ansible-ssh-10.3.3.16-22-ansible]
    debug3: muxserver_listen: mux listener channel 0 fd 4
    debug2: fd 3 setting TCP_NODELAY
    debug3: ssh_packet_set_tos: set IP_TOS 0x08
    debug1: control_persist_detach: backgrounding master process
    debug2: control_persist_detach: background process is 850
    Control socket connect(/root/.ansible/cp/ansible-ssh-10.3.3.16-22-ansible): **Connection refused
    Failed to connect to new control master ", 
        "unreachable": true**
    }
    

    What could be happening? Thank you in advance.


    Centos info
    CentOS Linux release 7.2.1511 (Core) 
    NAME="CentOS Linux"
    VERSION="7 (Core)"
    ID="centos"
    ID_LIKE="rhel fedora"
    VERSION_ID="7"
    PRETTY_NAME="CentOS Linux 7 (Core)"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o:centos:centos:7"
    HOME_URL="https://www.centos.org/"
    BUG_REPORT_URL="https://bugs.centos.org/"
    CENTOS_MANTISBT_PROJECT="CentOS-7"
    CENTOS_MANTISBT_PROJECT_VERSION="7"
    REDHAT_SUPPORT_PRODUCT="centos"
    REDHAT_SUPPORT_PRODUCT_VERSION="7"
    
    CentOS Linux release 7.2.1511 (Core) 
    CentOS Linux release 7.2.1511 (Core) 
    
    ANSIBLE VERSION

    ansible 2.2.1.0

    SSH Config
     #file: ssh_config
    IdentityFile ~/.ssh/id_rsa
    
    Inventory
    [all]
    node1
    
    [all:vars]
    ansible_connection=ssh
    ansible_ssh_user=ansible
    
    Ping with ansible:
    node1 | UNREACHABLE! => {
        "changed": false, 
        "msg": "Failed to connect to the host via ssh: Control socket connect(/root/.ansible/cp/ansible-ssh-10.3.3.16-22-ansible): Connection refused\r\nFailed to connect to new control master\r\n", 
        "unreachable": true
    }
    
    -Verbose
    <p>Loading callback plugin minimal of type stdout, v2.0 from /usr/lib/python2.7/site-packages/ansible/plugins/callback/init.pyc
    Using module file /usr/lib/python2.7/site-packages/ansible/modules/core/system/ping.py
    &lt;10.3.3.16> ESTABLISH SSH CONNECTION FOR USER: ansible
    &lt;10.3.3.16> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ansible -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/ansible-ssh-%h-%p-%r 10.3.3.16 '/bin/sh -c '"'"'( umask 77 &amp;&amp; mkdir -p "echo ~/.ansible/tmp/ansible-tmp-1490360816.2-240348019772084" &amp;&amp; echo ansible-tmp-1490360816.2-240348019772084="echo ~/.ansible/tmp/ansible-tmp-1490360816.2-240348019772084" ) &amp;&amp; sleep 0'"'"''
    node1 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: OpenSSH<em>7.4p1, LibreSSL 2.4.4
    debug1: Reading configuration data /root/.ssh/config
    debug1: /root/.ssh/config line 1: Applying options for 
    debug1: Reading configuration data /etc/ssh/ssh</em>config
    debug1: auto-mux: Trying existing master
    debug1: Control socket "/root/.ansible/cp/ansible-ssh-10.3.3.16-22-ansible" does not exist
    debug2: resolving "10.3.3.16" port 22
    debug2: ssh<em>connect</em>direct: needpriv 0
    debug1: Connecting to 10.3.3.16 [10.3.3.16] port 22.
    debug2: fd 3 setting O<em>NONBLOCK
    debug1: fd 3 clearing O</em>NONBLOCK
    debug1: Connection established.
    debug3: timeout: 10000 ms remain after connect
    debug1: permanently<em>set</em>uid: 0/0
    debug1: identity file /root/.ssh/id<em>rsa type 1
    debug1: key</em>load<em>public: No such file or directory
    debug1: identity file /root/.ssh/id</em>rsa-cert type -1
    debug1: Enabling compatibility mode for protocol 2.0
    debug1: Local version string SSH-2.0-OpenSSH<em>7.4
    debug1: Remote protocol version 2.0, remote software version OpenSSH</em>7.3
    debug1: match: OpenSSH<em>7.3 pat OpenSSH compat 0x04000000
    debug2: fd 3 setting O</em>NONBLOCK
    debug1: Authenticating to 10.3.3.16:22 as 'ansible'
    debug3: hostkeys<em>foreach: reading file "/root/.ssh/known</em>hosts"
    debug3: record<em>hostkey: found key type ECDSA in file /root/.ssh/known</em>hosts:1
    debug3: load<em>hostkeys: loaded 1 keys from 10.3.3.16
    debug3: order</em>hostkeyalgs: prefer hostkeyalgs: [email protected],[email protected],[email protected],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
    debug3: send packet: type 20
    debug1: SSH2<em>MSG</em>KEXINIT sent
    debug3: receive packet: type 20
    debug1: SSH2<em>MSG</em>KEXINIT received
    debug2: local client KEXINIT proposal
    debug2: KEX algorithms: curve25519-sha256,[email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c
    debug2: host key algorithms: [email protected],[email protected],[email protected],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,[email protected],[email protected],ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa
    debug2: ciphers ctos: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected],aes128-cbc,aes192-cbc,aes256-cbc
    debug2: ciphers stoc: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected],aes128-cbc,aes192-cbc,aes256-cbc
    debug2: MACs ctos: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
    debug2: MACs stoc: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
    debug2: compression ctos: [email protected],zlib,none
    debug2: compression stoc: [email protected],zlib,none
    debug2: languages ctos: 
    debug2: languages stoc: 
    debug2: first<em>kex</em>follows 0 
    debug2: reserved 0 
    debug2: peer server KEXINIT proposal
    debug2: KEX algorithms: [email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1
    debug2: host key algorithms: ssh-rsa,rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256,ssh-ed25519
    debug2: ciphers ctos: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
    debug2: ciphers stoc: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
    debug2: MACs ctos: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
    debug2: MACs stoc: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
    debug2: compression ctos: none
    debug2: compression stoc: none
    debug2: languages ctos: 
    debug2: languages stoc: 
    debug2: first<em>kex</em>follows 0 
    debug2: reserved 0 
    debug1: kex: algorithm: [email protected]
    debug1: kex: host key algorithm: ecdsa-sha2-nistp256
    debug1: kex: server->client cipher: [email protected] MAC: compression: none
    debug1: kex: client->server cipher: [email protected] MAC: compression: none
    debug3: send packet: type 30
    debug1: expecting SSH2<em>MSG</em>KEX<em>ECDH</em>REPLY
    debug3: receive packet: type 31
    debug1: Server host key: ecdsa-sha2-nistp256 SHA256:Dha6CJyI4id6qAaSyM0AhG+8ZG6U6yHpm5xf4JAxkms
    debug3: hostkeys<em>foreach: reading file "/root/.ssh/known</em>hosts"
    debug3: record<em>hostkey: found key type ECDSA in file /root/.ssh/known</em>hosts:1
    debug3: load<em>hostkeys: loaded 1 keys from 10.3.3.16
    debug1: Host '10.3.3.16' is known and matches the ECDSA host key.
    debug1: Found key in /root/.ssh/known</em>hosts:1
    debug3: send packet: type 21
    debug2: set<em>newkeys: mode 1
    debug1: rekey after 134217728 blocks
    debug1: SSH2</em>MSG<em>NEWKEYS sent
    debug1: expecting SSH2</em>MSG<em>NEWKEYS
    debug3: receive packet: type 21
    debug1: SSH2</em>MSG<em>NEWKEYS received
    debug2: set</em>newkeys: mode 0
    debug1: rekey after 134217728 blocks
    debug2: key: /root/.ssh/id<em>rsa (0x7f23694372a0)
    debug3: send packet: type 5
    debug3: receive packet: type 7
    debug1: SSH2</em>MSG<em>EXT</em>INFO received
    debug1: kex<em>input</em>ext<em>info: server-sig-algs=<rsa-sha2-256,rsa-sha2-512>
    debug3: receive packet: type 6
    debug2: service</em>accept: ssh-userauth
    debug1: SSH2<em>MSG</em>SERVICE<em>ACCEPT received
    debug3: send packet: type 50
    debug3: receive packet: type 51
    debug1: Authentications that can continue: publickey,password
    debug3: start over, passed a different list publickey,password
    debug3: preferred gssapi-with-mic,gssapi-keyex,hostbased,publickey
    debug3: authmethod</em>lookup publickey
    debug3: remaining preferred: ,gssapi-keyex,hostbased,publickey
    debug3: authmethod<em>is</em>enabled publickey
    debug1: Next authentication method: publickey
    debug1: Offering RSA public key: /root/.ssh/id<em>rsa
    debug3: send</em>pubkey<em>test
    debug3: send packet: type 50
    debug2: we sent a publickey packet, wait for reply
    debug3: receive packet: type 60
    debug1: Server accepts key: pkalg rsa-sha2-512 blen 279
    debug2: input</em>userauth<em>pk</em>ok: fp SHA256:uqPlK4SsqV/skWF1FSJ9VVcZBNQH78bFMd61zO0YqBs
    debug3: sign<em>and</em>send<em>pubkey: RSA SHA256:uqPlK4SsqV/skWF1FSJ9VVcZBNQH78bFMd61zO0YqBs
    debug3: send packet: type 50
    debug3: receive packet: type 52
    debug1: Authentication succeeded (publickey).
    Authenticated to 10.3.3.16 ([10.3.3.16]:22).
    debug1: setting up multiplex master socket
    debug3: muxserver</em>listen: temporary control path /root/.ansible/cp/ansible-ssh-10.3.3.16-22-ansible.WKmgczTyEdVwJpd4
    debug2: fd 4 setting O<em>NONBLOCK
    debug3: fd 4 is O</em>NONBLOCK
    debug3: fd 4 is O<em>NONBLOCK
    debug1: channel 0: new [/root/.ansible/cp/ansible-ssh-10.3.3.16-22-ansible]
    debug3: muxserver</em>listen: mux listener channel 0 fd 4
    debug2: fd 3 setting TCP<em>NODELAY
    debug3: ssh</em>packet<em>set</em>tos: set IP<em>TOS 0x08
    debug1: control</em>persist<em>detach: backgrounding master process
    debug2: control</em>persist_detach: background process is 850
    Control socket connect(/root/.ansible/cp/ansible-ssh-10.3.3.16-22-ansible): Connection refused
    Failed to connect to new control master
    ",
    "unreachable": true
    }</p>
    
  • panic: Error 1040: Too many connections

    panic: Error 1040: Too many connections

    panic: Error 1040: Too many connections
    
    goroutine 1406 [running]:
    panic(0xa5e780, 0xc820429ec0)
     /usr/local/Cellar/go/1.6/libexec/src/runtime/panic.go:464 +0x3e6
    github.com/ansible-semaphore/semaphore/routes/tasks.(*task).log.func1(0xc8202ee2c0, 0xc8204100f0, 0x4e, 0xecef61c8e, 0x1a83d7aa, 0x102bd60)
     /Users/m/p/gospace/src/github.com/ansible-semaphore/semaphore/routes/tasks/logging.go:36 +0x26c
    created by github.com/ansible-semaphore/semaphore/routes/tasks.(*task).log
     /Users/m/p/gospace/src/github.com/ansible-semaphore/semaphore/routes/tasks/logging.go:38 +0x640
    2016/06/17 18:30:06 notifying bugsnag: Error 1040: Too many connections
    2016/06/17 18:30:06 bugsnag.Notify: not notifying in development
    
  • Version 2.8.31 can't be started

    Version 2.8.31 can't be started

    Hi!

    Looks like release 2.8.31 doesn't want to start with 'semaphore --config /path/to/json':


    semaphore@b5d37cb5364e:~$ /usr/bin/semaphore --config /etc/semaphore.json Ansible Semaphore is a beautiful web UI for Ansible. Source code is available at https://github.com/ansible-semaphore/semaphore. Complete documentation is available at https://ansible-semaphore.com.

    Usage: semaphore [flags] semaphore [command]

    Available Commands: completion generate the autocompletion script for the specified shell help Help about any command migrate Execute migrations service Run Semaphore service setup Perform interactive setup upgrade Upgrade to latest stable version user Manage users version Print the version of Semaphore

    Flags: --config string Configuration file path -h, --help help for semaphore

    Use "semaphore [command] --help" for more information about a command.

    I can't see any doc changes, but did the startup args change since version 2.8.22?

  • I buils semaphore mysef, but it is useless

    I buils semaphore mysef, but it is useless

    First, when I run semaphore -setup, there is an error:

    `[root@node1 semaphore]# ./cli/semaphore_linux_amd64 -setup Cannot Find configuration! Use -c parameter to point to a JSON file generated by -setup.

    Hint: have you run -setup ?`

    Second, when I run ./cli/semaphore_linux_amd64 -setup -config /tmp/semaphore/semaphore_config.json there is an db error:

    ` "cn": "" }, "telegram_alert": false, "telegram_chat": "", "telegram_token": "" }

    Is this correct? (yes/no): yes Running: mkdir -p /tmp/semaphore.. Configuration written to /tmp/semaphore/semaphore_config.json.. Pinging db..

    Running DB Migrations.. Checking DB migrations Executing migration v0.0.0 (at 2017-08-02 10:46:06.81903805 +0800 CST)... panic: asset: Asset(db/migrations/v0.0.0.sql): Asset db/migrations/v0.0.0.sql can't read by error: Error reading asset db/migrations/v0.0.0.sql at /Users/m/p/semaphore/db/migrations/v0.0.0.sql: open /Users/m/p/semaphore/db/migrations/v0.0.0.sql: no such file or directory

    goroutine 1 [running]: github.com/ansible-semaphore/semaphore/util.MustAsset(0xc4201320e0, 0x18, 0x5, 0xa1a2ce, 0x4) /root/goproj/src/github.com/ansible-semaphore/semaphore/util/bindata.go:4856 +0x12e github.com/ansible-semaphore/semaphore/db.(*DBVersion).GetSQL(0xc420011800, 0xc4201320e0, 0x18, 0x0, 0x2, 0x4a) /root/goproj/src/github.com/ansible-semaphore/semaphore/db/versionHistory.go:51 +0x39 github.com/ansible-semaphore/semaphore/db.(*DBVersion).Run(0xc420011800, 0x0, 0x0) /root/goproj/src/github.com/ansible-semaphore/semaphore/db/migrations.go:44 +0x1bf github.com/ansible-semaphore/semaphore/db.MigrateAll(0xc420127b78, 0x1) /root/goproj/src/github.com/ansible-semaphore/semaphore/db/migrations.go:104 +0x169 main.doSetup(0x2) /root/goproj/semaphore/cli/main.go:122 +0x7b8 main.main() /root/goproj/semaphore/cli/main.go:25 +0x644`

    How to solve these problems?

  • Error when adding SSH Keys:

    Error when adding SSH Keys: "illegal base64 data at input byte 36"

    I have installed Ansible Semaphore using the semaphoreui/semaphore:latest Docker image (currently, this is v2.8.77). It seems to work fine, but when I try to add an SSH key through the UI, I'm only getting a red "Request failed with status code 400" error and the console shows this traceback:

    time="2022-12-30T10:15:43Z" level=error msg="illegal base64 data at input byte 36"
    goroutine 632 [running]:
    runtime/debug.Stack()
            /usr/local/go/src/runtime/debug/stack.go:24 +0x65
    runtime/debug.PrintStack()
            /usr/local/go/src/runtime/debug/stack.go:16 +0x19
    github.com/ansible-semaphore/semaphore/api/helpers.WriteError({0x1fc4330, 0xc00006d500}, {0x1fc1440?, 0x22b9840?})
            /go/src/github.com/ansible-semaphore/semaphore/api/helpers/helpers.go:92 +0x1ae
    github.com/ansible-semaphore/semaphore/api/projects.AddKey({0x1fc4330, 0xc00006d500}, 0xc000c3f478?)
            /go/src/github.com/ansible-semaphore/semaphore/api/projects/keys.go:91 +0x66d
    net/http.HandlerFunc.ServeHTTP(0xc0008d2a00?, {0x1fc4330?, 0xc00006d500?}, 0x9a00c0?)
            /usr/local/go/src/net/http/server.go:2084 +0x2f
    github.com/ansible-semaphore/semaphore/api/projects.ProjectMiddleware.func1({0x1fc4330, 0xc00006d500}, 0x0?)
            /go/src/github.com/ansible-semaphore/semaphore/api/projects/project.go:41 +0x3bb
    net/http.HandlerFunc.ServeHTTP(0x1fc4330?, {0x1fc4330?, 0xc00006d500?}, 0xc000051001?)
            /usr/local/go/src/net/http/server.go:2084 +0x2f
    github.com/ansible-semaphore/semaphore/api.authentication.func1({0x1fc4330, 0xc00006d500}, 0xc0004bb600?)
            /go/src/github.com/ansible-semaphore/semaphore/api/auth.go:109 +0x59
    net/http.HandlerFunc.ServeHTTP(0x98fec0?, {0x1fc4330?, 0xc00006d500?}, 0xc?)
            /usr/local/go/src/net/http/server.go:2084 +0x2f
    github.com/ansible-semaphore/semaphore/api.JSONMiddleware.func1({0x1fc4330, 0xc00006d500}, 0x1b?)
            /go/src/github.com/ansible-semaphore/semaphore/api/router.go:35 +0xf4
    net/http.HandlerFunc.ServeHTTP(0xc000521640?, {0x1fc4330?, 0xc00006d500?}, 0xc0008b2b40?)
            /usr/local/go/src/net/http/server.go:2084 +0x2f
    github.com/ansible-semaphore/semaphore/api.StoreMiddleware.func1.1()
            /go/src/github.com/ansible-semaphore/semaphore/api/router.go:26 +0x2e
    github.com/ansible-semaphore/semaphore/db.StoreSession({0x1fc8518, 0xc0000b85f0}, {0xc0008b2b40, 0x1b}, 0xc000521698)
            /go/src/github.com/ansible-semaphore/semaphore/db/Store.go:336 +0x68
    github.com/ansible-semaphore/semaphore/api.StoreMiddleware.func1({0x1fc4330, 0xc00006d500}, 0xc0008d2a00)
            /go/src/github.com/ansible-semaphore/semaphore/api/router.go:25 +0xfc
    net/http.HandlerFunc.ServeHTTP(0xc0008d2a00?, {0x1fc4330?, 0xc00006d500?}, 0x975ea0?)
            /usr/local/go/src/net/http/server.go:2084 +0x2f
    github.com/ansible-semaphore/semaphore/cli/cmd.runService.func1.1({0x1fc4330, 0xc00006d500}, 0xc000521778?)
            /go/src/github.com/ansible-semaphore/semaphore/cli/cmd/root.go:67 +0x124
    net/http.HandlerFunc.ServeHTTP(0x7f970b53b3c8?, {0x1fc4330?, 0xc00006d500?}, 0xc000cc6cf0?)
            /usr/local/go/src/net/http/server.go:2084 +0x2f
    github.com/gorilla/mux.CORSMethodMiddleware.func1.1({0x1fc4330, 0xc00006d500}, 0xc0002da3c0?)
            /go/src/github.com/ansible-semaphore/semaphore/vendor/github.com/gorilla/mux/middleware.go:51 +0xaa
    net/http.HandlerFunc.ServeHTTP(0xc0008d2400?, {0x1fc4330?, 0xc00006d500?}, 0x9be0e0?)
            /usr/local/go/src/net/http/server.go:2084 +0x2f
    github.com/gorilla/mux.(*Router).ServeHTTP(0xc0004ca000, {0x1fc4330, 0xc00006d500}, 0xc0008d2100)
            /go/src/github.com/ansible-semaphore/semaphore/vendor/github.com/gorilla/mux/mux.go:212 +0x202
    github.com/gorilla/handlers.ProxyHeaders.func1({0x1fc4330, 0xc00006d500}, 0xc0008d2100)
            /go/src/github.com/ansible-semaphore/semaphore/vendor/github.com/gorilla/handlers/proxy_headers.go:59 +0x142
    net/http.HandlerFunc.ServeHTTP(0x3b?, {0x1fc4330?, 0xc00006d500?}, 0x0?)
            /usr/local/go/src/net/http/server.go:2084 +0x2f
    github.com/ansible-semaphore/semaphore/cli/cmd.cropTrailingSlashMiddleware.func1({0x1fc4330?, 0xc00006d500?}, 0xc0008d2100?)
            /go/src/github.com/ansible-semaphore/semaphore/cli/cmd/server.go:27 +0xf7
    net/http.HandlerFunc.ServeHTTP(0x0?, {0x1fc4330?, 0xc00006d500?}, 0x40f025?)
            /usr/local/go/src/net/http/server.go:2084 +0x2f
    net/http.serverHandler.ServeHTTP({0x1fc28c8?}, {0x1fc4330, 0xc00006d500}, 0xc0008d2100)
            /usr/local/go/src/net/http/server.go:2916 +0x43b
    net/http.(*conn).serve(0xc00067a500, {0x1fc4708, 0xc000441ec0})
            /usr/local/go/src/net/http/server.go:1966 +0x5d7
    created by net/http.(*Server).Serve
            /usr/local/go/src/net/http/server.go:3071 +0x4db
    

    I'm not sure what I'm doing wrong, I'm merely copy-pasting the contents of the keypair's id_rsa file into the text box and hitting Create. The container is running behind an nginx proxy with this configuration:

    server {
        server_name                     deploy.some.url.de;
        listen      443 ssl;
        listen [::]:443 ssl;
    
        ssl_certificate                 /etc/letsencrypt/live/some.url.de/fullchain.pem;
        ssl_certificate_key             /etc/letsencrypt/live/some.url.de/privkey.pem;
    
        location / {
            proxy_pass                  http://192.168.127.131:3000/;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            
            proxy_set_header X-Forwarded-Proto $scheme;
    
            proxy_buffering off;
            proxy_request_buffering off;
        }
    
        location /api/ws {
            proxy_pass http://192.168.127.131:3000/api/ws;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Origin "";
        }
    }
    

    But also when I port-forward port 3000 to my local machine via SSH and access it directly (thus bypassing nginx completely) I'm getting the same error.

    Could you give me a hint on what the problem might be? Thanks πŸ™‚

  • Task logic loss

    Task logic loss

    Introduction

    This isn't necessarily a semaphore issue, but it can happen when you have thousands of host.

    So let's talk about it and see if anyone else has the same problem.


    Environment:

    Many versions were tried

    semaphore v2.8.35
    python 2 or 3.6 or 3.9 or 3.10
    ansible core 2.10 or 2.11 or 2.14
    

    Problem:

    If more than 300 hosts are deployed and each host has more than 100 tasks, task logic may be lost.

    This number it's not absolute, it's just that most of my environments are of that magnitude.

    See the picture below:

    ok If the number is less than 100, the task logic is missing.

    image

    Also, when task logic is missing, no error is reported, which makes it difficult to troubleshoot problems.

    image
  • NavigationDuplicated: Avoided redundant navigation to current location

    NavigationDuplicated: Avoided redundant navigation to current location

    Hi,

    We have recently tested Ansible Semaphore to evaluate if it fits our simple use cases. Overall it is not half bad. However, when we try to duplicate and edit an existing task template with the little copy button in the top right corner, we have an error message in the browser console that says:

    NavigationDuplicated: Avoided redundant navigation to current location "/project/1/templates/2".
    

    from vue.runtime.esm.js:1897:12.

    We could not find any related information on both web and repo page. Any help is greatly appreciated. Thanks.

    Kind regards,

  • boltdb too big

    boltdb too big

    Hi, my boltdb file is now about 4.1GB and my jobs are not running by cron. I tried to delete task template, but the task output will not be deleted from boltdb.

    Is there a way to manually delete task output? Is there a way to migrate to mysql?

    Thanks Tom

  • Semaphore Not Respecting Default Configuration File Location

    Semaphore Not Respecting Default Configuration File Location

    I have my configuration file set in /etc/ansible/ansible.cfg and when I run ansible --version it shows the configuration file as such. However, when I run a task template, I am getting config file = None within the verbose output and it fails to respect the variables I've set

  • I gave Semaphore a try, here is a quick feedback

    I gave Semaphore a try, here is a quick feedback

    Hi,

    TL;DR : I liked Semaphore a lot but I will not deploy it for my team (and it makes me sad!)

    For a little bit of background on why I am here : My team and I have an Ansible AWX / Tower installed to manage some of our playbooks and automation stuff and I recently ran into quite a lot of trouble with it. After hours of troubleshoot everything was working fine again, but I find every aspect of AWX/Tower to be too complex for our relatively basic needs.

    So I decided to have a look around for an alternative and, among others, I discovered Ansible Semaphore.

    Very few things are preventing me to push Semaphore at my job right now :

    1. credential & inventory management (or more like credential+inventory+template+task are all too tightly linked)

    I do not get why inventories MUST be linked to a credential. That is assuming every users share one credential, obviously that is not the case for my team, for security and traceability reasons every one have their own login/password for the devices we manage. That means if, in Ansible CLI, there are 10 users sharing 10 playbooks on one inventory file, there will be, in Semaphore, 10 templates and 10 inventories, just so each one of them can be linked to a specific credential. In addition to that, nothing would prevent userX from using the template of userY, beside creating 10 different projects, one for each user. Not very convenient, scalable or secure.

    A workaround would be to have the possibility, when creating a template, to specify that the credentials need to be asked each time a task is launched (this would override the inventory's credential if there is any). This, coupled with some kind of "personal credential", something only usable by one user, would fix the above situation. Also, allowing an inventory to NOT be linked to any credential could be a nice option.

    I think this would add a lot of flexibility to Semaphore and will allow it to be used by teams like mine where every team member has his own credential.

    1. limited survey capability

    As of testing, only "strings" and "integer" types are available, I am fine with the types, but I do not trust my users enough to let them input everything they want 😨 If we could limit the possible values of a variable to a pre-defined list that would be nice. Pretty much like asked in #904.

    I do not know if those features could be easily implemented, or even if they match the tool philosophy. I really liked Semaphore feeling, ease of install and usage, that is why I took the time to post some kind of constructive (I hope!) feedback.

    I will certainly keep an eye on the project to see what happen in the future, but sadly for now this is not a viable solution for my needs.

    Anyway, thanks to all the dev and community for everything !

    Bisous

listmonk is a standalone high performance, self-hosted newsletter and mailing list manager with a modern dashboard. Single binary app.
listmonk is a standalone high performance, self-hosted newsletter and mailing list manager with a modern dashboard. Single binary app.

listmonk is a standalone, self-hosted, newsletter and mailing list manager. It is fast, feature-rich, and packed into a single binary. It uses a PostgreSQL database as its data store.

Jan 1, 2023
Store files in Telegram messages for free and access them from a modern Web UI

Telegram Storage Store files in Telegram messages for free and access them in a nice web UI. Telegram allows to store files (of max 2GB each) for a un

Jan 4, 2023
Tsdev (Zero Config Modern Typescript Projects)

Tsdev (Zero Config Modern Typescript Projects) Motivation I really like the idea behind https://github.com/jaredpalmer/tsdx but I find it uses older t

Jun 29, 2022
Go library for Parsing Ansible inventory files

aini Go library for Parsing Ansible inventory files. We are trying to follow the logic of Ansible parser as close as possible. Documentation on ansibl

Jan 5, 2023
Configuration management tool inspired by Ansible, but with no yaml - just Go

GOSSH This repo is an experiement with creating a declarative IT automation and configuration management package for Golang. Think Ansible, but no Yam

Dec 21, 2022
sail is an operation framework based on Ansible/Helm. sail follows the principles of Infrastructure as Code (IaC), Operation as Code (OaC), and Everything as Code. So it is a tool for DevOps.

sail δΈ­ζ–‡ζ–‡ζ‘£ sail is an operation framework based on Ansible/Helm. sail follows the principles of Infrastructure as Code (IaC), Operation as Code (OaC),a

Dec 16, 2021
Ansible-driven CI/CD and monitoring system
Ansible-driven CI/CD and monitoring system

Ansible Semaphore Follow Semaphore on Twitter (AnsibleSem) and StackShare (ansible-semaphore). Ansible Semaphore is a modern UI for Ansible. It lets y

Sep 11, 2022
Go-Guardian is a golang library that provides a simple, clean, and idiomatic way to create powerful modern API and web authentication.

❗ Cache package has been moved to libcache repository Go-Guardian Go-Guardian is a golang library that provides a simple, clean, and idiomatic way to

Dec 23, 2022
Modern Make

Modern Make About Mmake is a small program which wraps make to provide additional functionality, such as user-friendly help output, remote includes, a

Dec 27, 2022
Concurrent task runner, developer's routine tasks automation toolkit. Simple modern alternative to GNU Make 🧰
Concurrent task runner, developer's routine tasks automation toolkit. Simple modern alternative to GNU Make 🧰

taskctl - concurrent task runner, developer's routine tasks automation toolkit Simple modern alternative to GNU Make. taskctl is concurrent task runne

Dec 14, 2022
A Commander for modern Go CLI interactions
A Commander for modern Go CLI interactions

Cobra is both a library for creating powerful modern CLI applications as well as a program to generate applications and command files. Cobra is used i

Jan 3, 2023
✨ #PTerm is a modern go module to beautify console output. Featuring charts, progressbars, tables, trees, and many more πŸš€ It's completely configurable and 100% cross-platform compatible.
✨ #PTerm is a modern go module to beautify console output. Featuring charts, progressbars, tables, trees, and many more πŸš€ It's completely configurable and 100% cross-platform compatible.

?? PTerm | Pretty Terminal Printer A golang module to print pretty text Show Demo Code PTerm.sh | Installation | Documentation | Quick Start | Example

Dec 27, 2022
Write your SQL queries in raw files with all benefits of modern IDEs, use them in an easy way inside your application with all the profit of compile time constants

About qry is a general purpose library for storing your raw database queries in .sql files with all benefits of modern IDEs, instead of strings and co

Dec 25, 2022
A modern and intuitive terminal-based text editor
A modern and intuitive terminal-based text editor

micro is a terminal-based text editor that aims to be easy to use and intuitive, while also taking advantage of the capabilities of modern terminals.

Dec 30, 2022
Build cross-platform modern desktop apps in Go + HTML5
Build cross-platform modern desktop apps in Go + HTML5

Lorca A very small library to build modern HTML5 desktop apps in Go. It uses Chrome browser as a UI layer. Unlike Electron it doesn't bundle Chrome in

Jan 6, 2023
Golang bindings of Sciter: the Embeddable HTML/CSS/script engine for modern UI development
Golang bindings of Sciter: the Embeddable HTML/CSS/script engine for modern UI development

Go bindings for Sciter Check this page for other language bindings (Delphi / D / Go / .NET / Python / Rust). Attention The ownership of project is tra

Dec 23, 2022
Project Flogo is an open source ecosystem of opinionated event-driven capabilities to simplify building efficient & modern serverless functions, microservices & edge apps.
Project Flogo is an open source ecosystem of opinionated  event-driven capabilities to simplify building efficient & modern serverless functions, microservices & edge apps.

Project Flogo is an Open Source ecosystem for event-driven apps Ecosystem | Core | Flows | Streams | Flogo Rules | Go Developers | When to use Flogo |

Dec 31, 2022
Modern Go Application example

Modern Go Application Go application boilerplate and example applying modern practices This repository tries to collect the best practices of applicat

Jan 3, 2023
:rocket: Modern cross-platform HTTP load-testing tool written in Go
:rocket: Modern cross-platform HTTP load-testing tool written in Go

English | δΈ­ζ–‡ Cassowary is a modern HTTP/S, intuitive & cross-platform load testing tool built in Go for developers, testers and sysadmins. Cassowary d

Dec 29, 2022
Modern Job Scheduler
Modern Job Scheduler

Kala Kala is a simplistic, modern, and performant job scheduler written in Go. Features: Single binary No dependencies JSON over HTTP API Job Stats Co

Dec 21, 2022